void Transform::RotateInternal(const Vector3d& internalTheta){ double theta = norm2(internalTheta); if (theta == 0){ return; } Vector3d z; z = internalTheta / theta; Vector3d x; Vector3d y; if (all_elements(z == Vector3d(0, 0, 1))){ x = 1, 0, 0; y = 0, 1, 0; } else if (all_elements(z == Vector3d(0, 0, -1))){ x = 1, 0, 0; y = 0, -1, 0; } else{ x = normalize(cross(z)); y = normalize(cross(z, x)); } Matrix33d Mu; Mu = x(0), y(0), z(0), x(1), y(1), z(1), x(2), y(2), z(2); Matrix33d Rho; Rho = cos(theta), -sin(theta), 0, sin(theta), cos(theta), 0, 0, 0, 1; m = Matrix33d(m) * Mu * Rho * trans(Mu); RefreshM4(); }
namespace gmtl { const Matrix22f MAT_IDENTITY22F = Matrix22f(); const Matrix22d MAT_IDENTITY22D = Matrix22d(); const Matrix23f MAT_IDENTITY23F = Matrix23f(); const Matrix23d MAT_IDENTITY23D = Matrix23d(); const Matrix33f MAT_IDENTITY33F = Matrix33f(); const Matrix33d MAT_IDENTITY33D = Matrix33d(); const Matrix34f MAT_IDENTITY34F = Matrix34f(); const Matrix34d MAT_IDENTITY34D = Matrix34d(); const Matrix44f MAT_IDENTITY44F = Matrix44f(); const Matrix44d MAT_IDENTITY44D = Matrix44d(); }