Esempio n. 1
0
 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));
		}
Esempio n. 3
0
    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);

    }
Esempio n. 4
0
 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);
 }
Esempio n. 5
0
 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));
 }