void testAngleAxis(void) { float origAngle = 1.234; Vector3f origAxis = Vector3f(.5,.5,1).normal(); Quaternion test2(origAxis,origAngle); float angle; Vector3f axis; test2.toAngleAxis(angle,axis); TS_ASSERT_DELTA(origAngle, angle, 1e-6); assert_near(origAxis,axis); }
/** @throw gcm::Exception */ void checkDecomposition(const real eps = EQUALITY_TOLERANCE) const { // traces assert_near(linal::trace(A), linal::trace(L), eps); // eigenvectors assert_true(linal::approximatelyEqual(A * U1, U1 * L, eps*1000)); // eigenraws assert_true(linal::approximatelyEqual(U * A, L * U, eps*1000)); // inverse matrices assert_true(linal::approximatelyEqual(U * U1, Matrix::Identity(), eps*100)); }
void testIdentityOps( void) { Quaternion id = Quaternion::identity(); Quaternion test(Vector3f(1,0,0),0.5); TS_ASSERT_EQUALS(test*id, test); TS_ASSERT_EQUALS(id*test, test); assert_near(id.normal(), id); Quaternion inverseid = id.inverse(); TS_ASSERT_EQUALS(inverseid, id); }
void testInverseCompose( void) { Quaternion id = Quaternion::identity(); Quaternion test(Vector3f(1,0,0),0.5); assert_near(test * test.inverse(), id); assert_near(test.inverse() * test, id); }
void assert_near(const Quaternion &a,const Quaternion &b) { TS_ASSERT_DELTA(a.w, b.w, 1e-6); assert_near(Vector3f(a.x,a.y,a.z),Vector3f(b.x,b.y,b.z)); }