#include class mat3{ public: double m00; double m10; double m20; double m01; double m11; double m21; double m02; double m12; double m22; mat3() { m00 = 0; m10 = 0; m20 = 0; m01 = 0; m11 = 0; m21 = 0; m02 = 0; m12 = 0; m22 = 0; } void setToIdentity() { m00 = 1; m10 = 0; m20 = 0; m01 = 0; m11 = 1; m21 = 0; m02 = 0; m12 = 0; m22 = 1; } //scale the matrix void scale(double s) { m00 *= s; m11 *= s; m22 *= s; } //rotate around an arbitrary axis void rotate(double theta, vec3 axis) { } //functions for setting values into the matrix void setRow1(double one, double two, double three) { m00 = one; m10 = two; m20 = three; } void setRow2(double one, double two, double three) { m01 = one; m11 = two; m21 = three; } void setRow3(double one, double two, double three) { m02 = one; m12 = two; m22 = three; } //multiply two matrices together mat3 multiply(mat3 b) { mat3 a; a.m00 = m00*b.m00 + m10*b.m01 + m20*b.m02; a.m10 = m00*b.m10 + m10*b.m11 + m20*b.m12; a.m20 = m00*b.m20 + m10*b.m21 + m20*b.m22; a.m01 = m01*b.m00 + m11*b.m01 + m21*b.m02; a.m11 = m01*b.m10 + m11*b.m11 + m21*b.m12; a.m21 = m01*b.m20 + m11*b.m21 + m21*b.m22; a.m02 = m02*b.m00 + m12*b.m01 + m22*b.m02; a.m12 = m02*b.m10 + m12*b.m11 + m22*b.m12; a.m22 = m02*b.m20 + m12*b.m21 + m22*b.m22; return a; } //multiply a matrix by a vec3 vec3 multiply(vec3 b) { vec3 a; a.x = m00*b.x + m10*b.y + m20*b.z; a.y = m01*b.x + m11*b.y + m21*b.z; a.z = m02*b.x + m12*b.y + m22*b.z; return a; } };