コード例 #1
0
ファイル: vector_test.cpp プロジェクト: Arroon/openage
void vector() {
	{
		// tests in 2 dimensions.
		// we want to be able to reuse the variable names later.
		const Vector<2> a(1.0, 2.0);
		const Vector<2> b(3.0, 4.0);
		Vector<2> c;

		c = a + b;
		TESTEQUALS(c[0], 4.0);
		TESTEQUALS(c[1], 6.0);

		c = a - b;
		TESTEQUALS(c[0], -2.0);
		TESTEQUALS(c[1], -2.0);

		c = 5 * a;
		TESTEQUALS(c[0], 5.0);
		TESTEQUALS(c[1], 10.0);

		// division by 8 should be precise
		c = a / 8;
		TESTEQUALS(c[0], 0.125);
		TESTEQUALS(c[1], 0.25);

		TESTEQUALS(a.dot_product(b), 11);

		c = b;
		TESTEQUALS(c.norm(), 5);
		c.normalize();
		TESTEQUALS_FLOAT(c.norm(), 1, 1e-7);
	}

	{
		// test for the cross_product
		const Vector<3> a(1.0, 2.0, 3.0);
		const Vector<3> b(4.0, 5.0, 6.0);
		Vector<3> c = a.cross_product(b);
		TESTEQUALS(c[0], -3.0);
		TESTEQUALS(c[1],  6.0);
		TESTEQUALS(c[2], -3.0);
	}
}
コード例 #2
0
ファイル: matrix_test.cpp プロジェクト: SFTtech/openage
void matrix() {
	{ // matrix multiplication
		const Matrix<5, 3, float> a(0.0, 0.5, 1.0,
		                            1.5, 2.0, 2.5,
		                            3.0, 3.5, 4.0,
		                            4.5, 5.0, 5.5,
		                            6.0, 6.5, 7.0);
		const Matrix<3, 4, float> b(1, 0, 0, 0,
		                            0, 1, 0, 0,
		                            0, 0, 1, 0);
		Matrix<5, 4, float> c = a * b;
		TESTEQUALS_FLOAT(c[0][0], 0, 1e-7);
		TESTEQUALS_FLOAT(c[0][1], 0.5, 1e-7);
		TESTEQUALS_FLOAT(c[0][2], 1, 1e-7);
		TESTEQUALS_FLOAT(c[0][3], 0, 1e-7);
		TESTEQUALS_FLOAT(c[1][0], 1.5, 1e-7);
		TESTEQUALS_FLOAT(c[1][1], 2, 1e-7);
		TESTEQUALS_FLOAT(c[1][2], 2.5, 1e-7);
		TESTEQUALS_FLOAT(c[1][3], 0, 1e-7);
		TESTEQUALS_FLOAT(c[2][0], 3, 1e-7);
		TESTEQUALS_FLOAT(c[2][1], 3.5, 1e-7);
		TESTEQUALS_FLOAT(c[2][2], 4, 1e-7);
		TESTEQUALS_FLOAT(c[2][3], 0, 1e-7);
		TESTEQUALS_FLOAT(c[3][0], 4.5, 1e-7);
		TESTEQUALS_FLOAT(c[3][1], 5, 1e-7);
		TESTEQUALS_FLOAT(c[3][2], 5.5, 1e-7);
		TESTEQUALS_FLOAT(c[3][3], 0, 1e-7);
		TESTEQUALS_FLOAT(c[4][0], 6, 1e-7);
		TESTEQUALS_FLOAT(c[4][1], 6.5, 1e-7);
		TESTEQUALS_FLOAT(c[4][2], 7, 1e-7);
		TESTEQUALS_FLOAT(c[4][3], 0, 1e-7);
	}

	{ // addition and subtraction
		const Matrix2f a(1, 2, 3, 4);
		const Matrix2f b(5, 6, 7, 8);
		Matrix2f c = a + b;
		TESTEQUALS_FLOAT(c[0][0], 6, 1e-7);
		TESTEQUALS_FLOAT(c[0][1], 8, 1e-7);
		TESTEQUALS_FLOAT(c[1][0], 10, 1e-7);
		TESTEQUALS_FLOAT(c[1][1], 12, 1e-7);

		c = b - a;
		TESTEQUALS_FLOAT(c[0][0], 4, 1e-7);
		TESTEQUALS_FLOAT(c[0][1], 4, 1e-7);
		TESTEQUALS_FLOAT(c[1][0], 4, 1e-7);
		TESTEQUALS_FLOAT(c[1][1], 4, 1e-7);
	}

	{ // scalar multiplication and division
		const Matrix2f a(0, 1, 2, 3);
		Matrix2f b = a * 2;
		TESTEQUALS_FLOAT(b[0][0], 0, 1e-7);
		TESTEQUALS_FLOAT(b[0][1], 2, 1e-7);
		TESTEQUALS_FLOAT(b[1][0], 4, 1e-7);
		TESTEQUALS_FLOAT(b[1][1], 6, 1e-7);

		b = 2 * a;
		TESTEQUALS_FLOAT(b[0][0], 0, 1e-7);
		TESTEQUALS_FLOAT(b[0][1], 2, 1e-7);
		TESTEQUALS_FLOAT(b[1][0], 4, 1e-7);
		TESTEQUALS_FLOAT(b[1][1], 6, 1e-7);

		b = a / 0.5;
		TESTEQUALS_FLOAT(b[0][0], 0, 1e-7);
		TESTEQUALS_FLOAT(b[0][1], 2, 1e-7);
		TESTEQUALS_FLOAT(b[1][0], 4, 1e-7);
		TESTEQUALS_FLOAT(b[1][1], 6, 1e-7);
	}

	{ // transposition
		const Matrix2f a(1, 2, 3, 4);
		const Matrix2f b = a.transpose();
		TESTEQUALS_FLOAT(b[0][0], 1, 1e-7);
		TESTEQUALS_FLOAT(b[0][1], 3, 1e-7);
		TESTEQUALS_FLOAT(b[1][0], 2, 1e-7);
		TESTEQUALS_FLOAT(b[1][1], 4, 1e-7);
	}

	{ // vector interaction
		const Matrix3f a(2, 0, 0,
		                 0, 2, 0,
		                 0, 0, 2);
		const Vector3f v(1, 2, 3);
		auto u = (a * v).to_vector();
		TESTEQUALS_FLOAT(u[0], 2, 1e-7);
		TESTEQUALS_FLOAT(u[1], 4, 1e-7);
		TESTEQUALS_FLOAT(u[2], 6, 1e-7);
	}
}