}
Matrix2D Matrix2D :: scale ( const Vector2D& v ) {
Matrix2D m;
m.a [0][0] = v.x; m.a [1][1] = v.y; m.a [0][1] = m.a [1][0] = 0.0;
return m;
}
Matrix2D Matrix2D :: rotate (float angle ) {
float cosine.sine; Matrix2D m (1.0 );
cosine = cos (angle ); sine = sin ( angle ); m.a [0][0] = cosine; m.a [0][1] = sine; m.a [1][0] = -sine; m.a = cosine;
return m;
}
Matrix2D Matrix2D :: mirrorX () {
Matrix2D m (1.0 ); m.a[0][0] = -1.0; return m;
}
Matrix2D Matrix2D :: mirrorY () {
Matrix2D m (1.0 ); m.a [1][1] = -1.0; return m;
7. (lpeo6pa30BaHHfl Ha nnocKOC
}
Matrix2D operator + ( const Matrix2D& a, const Matrix2D& b ) {
Matrix2D c;
c.x[0][0]=a.x[0][0]+b.x[0][0]; c.x[0][1]=a.x[0][1]+b.x[0][1]; c.x[1][0]=a.x[1][0]+b.x[1][0]; c.x[1][1]=a.x[1][1]+b.x!1][1];
return c;
}
Matrix2D operator - ( const Matrix2D& a, const Matrix2D& b ) {
Matrix2D c;
c.x[0][0]=a.x[0][0]-b.x[0][0]; c.x[0][1]=a.x[0][1]-b.x[0][1]; c.x[1][0]=a.x[1][0]-b.x[1][0]; c.x[1][1]=a.x[1][1]-b.x[1][1];
return c;
}
Matrix2D operator * ( const Matrix2D& a, const Matrix2D& b ) {
Matrix2D c;
c.x[0][0]=a.x[0][0]*b.x[0][0]+a.x[0][1]*b.x[1][0]; c.x[0][1]=a.x[0][0]*b.x[0][1]+a.x[0][1]*b.x[1][1]; c.x[1 ][0]=a.x[1 ][0]*b.x[0][0]+a.x[1 ][1 ]*b.x[1 ][0]; c.xt1][1]=a.x[1][0]*b.x[0][1]+a.x[1][1]*b.x[1][1];
return c;
}
Matrlx2D operator * ( const Matrix2D& a, float b ) {
Matrix2D c;
c.x[0][0]=a.x[0][0]*b; c.x[0][1]=a.x[0][1]*b; c.x[1][0]=a.x[1][0]*b; c.x[1][1]=a.x[1][1]*b;
return c;
}
Matrlx2D operator * (float b, const Matrix2D& a ) {
Matrix2D c;
c.x[0][0]=a.x[0][0]*b; c.x[0][1]=a.x[0][1]*b; c.x[1][0]=a.x[1][0]*b; c.x[1][1]=a.x[1][1]*b;
return c;
}
Компьютерная графика. Полигональные модели Эти классы представляют собой реализацию двумерных векторов (класс Уест.ог20) и матриц 2x2 (класс Маптх20). Для этих классов переопределяются основные знаки операций:
+
* *
/ /
& []
- унарный минус и поэлементное вычитание;
- поэлементное сложение;
- умножение на число;
- перемножение матриц;
- поэлементное умножение векторов;