コード例 #1
0
int Vector3f_ediv_Vector3f (Vector3f *v, Vector3f *result, Vector3f *right)
{
	CHECK_VECTOR3F(v);
	CHECK_VECTOR3F(right);

	return Vector_ediv_Vector (v, result, right, VECTOR3F_ROWS);
}
コード例 #2
0
int Vector3f_compare (Vector3f *v, Vector3f *right)
{
	CHECK_VECTOR3F(v);
	CHECK_VECTOR3F(right);
	
	return Vector_compare (v, right);
}
コード例 #3
0
int Vector3f_dot (Vector3f *v, float *result, Vector3f *right)
{
	CHECK_VECTOR3F(v);
	CHECK_VECTOR3F(right);

	return Vector_dot (v, result, right);
}
コード例 #4
0
int Vector3f_sub_Vector3f (Vector3f *v, Vector3f *right)
{
	CHECK_VECTOR3F(v);
	CHECK_VECTOR3F(right);
		
	return Vector_sub_Vector (v, right);
}
コード例 #5
0
ファイル: VectorTests.cpp プロジェクト: Lecrapouille/SimTaDyn
//--------------------------------------------------------------------------
void VectorTests::testSwap()
{
  vector::swap(v2, v4);
  CHECK_VECTOR3F(v2, 4.0f, 5.0f, 6.0f);
  vector::swap(v2, v4);
  CHECK_VECTOR3F(v2, 1.0f, 2.0f, 3.0f);
  vector::swap(v4, v2);
  CHECK_VECTOR3F(v2, 4.0f, 5.0f, 6.0f);
  vector::swap(v4, v2);
  CHECK_VECTOR3F(v2, 1.0f, 2.0f, 3.0f);
}
コード例 #6
0
ファイル: VectorTests.cpp プロジェクト: Lecrapouille/SimTaDyn
//--------------------------------------------------------------------------
void VectorTests::testCopy()
{
  v1 = v5;
  CHECK_VECTOR3F(v1, 1.0f, 2.0f, 3.0f);
  //v1 = 42.0f;
  //CHECK_VECTOR3F(v1, 42.0f, 42.0f, 42.0f);
}
コード例 #7
0
int Vector3f_cross_Vector3f (Vector3f *v, Vector3f *right)
{
	float v0, v1, v2, right0, right1, right2;
	float res0, res1, res2;
	
	CHECK_VECTOR3F(v);
	CHECK_VECTOR3F(right);
	
	MATHLIB_ASSERT (Vector3f_getX (v, &v0));
	MATHLIB_ASSERT (Vector3f_getY (v, &v1));
	MATHLIB_ASSERT (Vector3f_getZ (v, &v2));
	MATHLIB_ASSERT (Vector3f_getX (right, &right0));
	MATHLIB_ASSERT (Vector3f_getY (right, &right1));
	MATHLIB_ASSERT (Vector3f_getZ (right, &right2));
	
	res0 = v1 * right2 - v2 * right1;
	res1 = v2 * right0 - v0 * right2;
	res2 = v0 * right1 - v1 * right0;

	return Vector3f_init_components (v, res0, res1, res2);
}
コード例 #8
0
ファイル: VectorTests.cpp プロジェクト: Lecrapouille/SimTaDyn
//--------------------------------------------------------------------------
void VectorTests::testCreator()
{
  // Check the size
  CPPUNIT_ASSERT_EQUAL(12_z, sizeof (Vector3f));

  // Check values passed to the constructor
  CHECK_NAN_VECTOR3F(dummy);
  CHECK_VECTOR3F(v2, 1.0f, 2.0f, 3.0f);
  CHECK_VECTOR3F(v3, 1.0f, 2.0f, 0.0f);
  CHECK_VECTOR3F(v7, 1.0f, 2.0f, 0.0f);
  CHECK_VECTOR3F(v4, 4.0f, 5.0f, 6.0f);
  CHECK_VECTOR3F(v5, 1.0f, 2.0f, 3.0f);
  CHECK_VECTOR3F(v6, -4.0f, 5.0f, -6.0f);
  CPPUNIT_ASSERT_EQUAL(3_z, v1.size());

  // Check the union [x,y,z] == [r,g,b]
  CPPUNIT_ASSERT_EQUAL(v1.r, v1.x);
  CPPUNIT_ASSERT_EQUAL(v1.g, v1.y);
  CPPUNIT_ASSERT_EQUAL(v1.b, v1.z);

  // Display
  std::cout << v2 << std::endl;
}
コード例 #9
0
int Vector3f_set_all (Vector3f *v, float value)
{
	CHECK_VECTOR3F(v);
	
	return Vector_init_three_elements (v, value, value, value);
}
コード例 #10
0
// copy constructor
int Vector3f_init_Vector3f (Vector3f *v, Vector3f *right)
{
	CHECK_VECTOR3F(right);
	
	return Vector_init_Vector (v, right);
}
コード例 #11
0
int Vector3f_unit (Vector3f *v)
{
	CHECK_VECTOR3F(v);

	return Vector_normalize (v);
}
コード例 #12
0
int Vector3f_norm (Vector3f *v, float *result)
{
	CHECK_VECTOR3F(v);

	return Vector_length (v, result);
}
コード例 #13
0
int Vector3f_div_float (Vector3f *v, float value)
{
	CHECK_VECTOR3F(v);
	
	return Vector_div_float (v, value);
}
コード例 #14
0
ファイル: VectorTests.cpp プロジェクト: Lecrapouille/SimTaDyn
//--------------------------------------------------------------------------
void VectorTests::testOperations()
{
  // Min, max, clamp, abs
  CHECK_VECTOR3F(vector::abs(v6), 4.0f, 5.0f, 6.0f);
  CHECK_VECTOR3F(vector::min(v2, dummy), v2.x, v2.y, v2.z);
  CHECK_VECTOR3F(vector::max(v2, dummy), v2.x, v2.y, v2.z);
  CHECK_VECTOR3F(vector::min(v2, Vector3f::UNIT_Z + 1.0f), 1.0f, 1.0f, 2.0f);
  CHECK_VECTOR3F(vector::max(v2, Vector3f::UNIT_Y + 2.0f), 2.0f, 3.0f, 3.0f);
  CHECK_VECTOR3F(vector::clamp(v6, -5.0f, 3.0f), -4.0f, 3.0f, -5.0f);
  CHECK_VECTOR3F(vector::clamp(vector::abs(v6), -3.0f, 5.0f), 4.0f, 5.0f, 5.0f);

  // Middle Point
  CHECK_VECTOR3F(vector::middle(Vector3f::ZERO, Vector3f::UNIT_Z), 0.0f, 0.0f, 0.5f);
  CHECK_VECTOR3F(vector::middle(Vector3f::ZERO, Vector3f::UNIT_Y), 0.0f, 0.5f, 0.0f);
  CHECK_VECTOR3F(vector::middle(Vector3f::ZERO, Vector3f::UNIT_X), 0.5f, 0.0f, 0.0f);
  CHECK_VECTOR3F(vector::middle(Vector3f::UNIT_X, -Vector3f::UNIT_X), 0.0f, 0.0f, 0.0f);
  CHECK_VECTOR3F(vector::middle(-Vector3f::UNIT_X, Vector3f::UNIT_X), 0.0f, 0.0f, 0.0f);
  CHECK_VECTOR3F(-vector::middle(Vector3f::UNIT_X, Vector3f::UNIT_X), -1.0f, 0.0f, 0.0f);

  // Distance
  v1 = Vector3f::UNIT_SCALE * 2.0f;
  CPPUNIT_ASSERT_EQUAL(std::sqrt(12.0f), vector::distance(v1, Vector3f::ZERO));
  v1 = Vector3f::ZERO;
  CPPUNIT_ASSERT_EQUAL(0.0f, vector::distance(v1, Vector3f::ZERO));

  // Norm
  CPPUNIT_ASSERT_EQUAL(5, vector::norm(Vector2i(-3, 4)));
  CPPUNIT_ASSERT_EQUAL(5, vector::length(Vector2i(-3, 4)));
  CPPUNIT_ASSERT_EQUAL(5.0f, std::sqrt(vector::squaredLength(Vector2f(-3, 4))));
  CPPUNIT_ASSERT_EQUAL(1.0f, vector::length(Vector3f::UNIT_X));
  CPPUNIT_ASSERT_EQUAL(std::sqrt(3.0f), vector::length(Vector3f::UNIT_SCALE));
  CPPUNIT_ASSERT_EQUAL(std::sqrt(3.0f), vector::length(-Vector3f::UNIT_SCALE));
  CPPUNIT_ASSERT_EQUAL(3.0f, vector::squaredLength(Vector3f::UNIT_SCALE));
  CPPUNIT_ASSERT_EQUAL(0.0f, vector::dot(Vector3f::UNIT_X, Vector3f::UNIT_Y));
  CPPUNIT_ASSERT_EQUAL(3.0f, vector::dot(Vector3f::UNIT_SCALE, Vector3f::UNIT_SCALE));

  // Normalize
  v1 = vector::normalize(Vector3f::UNIT_SCALE * 2.0f);
  v2 = Vector3f::UNIT_SCALE / std::sqrt(3.0f);
  CHECK_VECTOR3B(v2 == v1, true, true, true);

  // Perpendicular 2D
  Vector2f a = Vector2f(2.0f, 4.0f);
  Vector2f o = vector::orthogonal(Vector2f(2.0f, 4.0f));
  CPPUNIT_ASSERT_EQUAL(true, vector::orthogonal(o, a));
  CPPUNIT_ASSERT_EQUAL(true, vector::eq(o, Vector2f(-4.0f, 2.0f)));
  CPPUNIT_ASSERT_EQUAL(false, vector::orthogonal(a, Vector2f(3.0f, 2.0f)));

  // Perpendicular 3D

  // Cross product 3D
  Vector3f v = vector::cross(Vector3f::UNIT_X, Vector3f::UNIT_Y);
  CHECK_VECTOR3B((v == Vector3f::UNIT_Z), true, true, true);
  v = vector::cross(Vector3f::UNIT_Y, Vector3f::UNIT_X);
  CHECK_VECTOR3B((v == -Vector3f::UNIT_Z), true, true, true);

  // Cross product 2D
  //Vector2f b = cross(Vector2f::UNIT_X, Vector2f::UNIT_Y);
  //CPPUNIT_ASSERT_EQUAL(true, eq(b, Vector2f::UNIT_Z));
  //b = cross(Vector2f::UNIT_Y, Vector2f::UNIT_X);
  //CPPUNIT_ASSERT_EQUAL(true, eq(b, -Vector2f::UNIT_Z));

  // Complex math
  CPPUNIT_ASSERT_EQUAL(true, vector::eq(Vector3f::NEGATIVE_UNIT_X, vector::reflect(Vector3f::UNIT_X, Vector3f::UNIT_X)));
  CPPUNIT_ASSERT_EQUAL(true, vector::eq(Vector3f::NEGATIVE_UNIT_Y, vector::reflect(Vector3f::UNIT_Y, Vector3f::UNIT_Y)));
  CPPUNIT_ASSERT_EQUAL(true, vector::eq(Vector3f::NEGATIVE_UNIT_Z, vector::reflect(Vector3f::UNIT_Z, Vector3f::UNIT_Z)));
  CPPUNIT_ASSERT_EQUAL(true, vector::eq(Vector3f::UNIT_X, vector::reflect(Vector3f::UNIT_X, Vector3f::UNIT_Y)));

  // Complex math
  CPPUNIT_ASSERT_DOUBLES_EQUAL(00.0f, vector::angleBetween(Vector3f::UNIT_X, Vector3f::UNIT_X), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(90.0f, vector::angleBetween(Vector3f::UNIT_X, Vector3f::UNIT_Y), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(90.0f, vector::angleBetween(Vector3f::UNIT_Y, Vector3f::UNIT_X), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(180.0f, vector::angleBetween(Vector3f::UNIT_X, Vector3f::NEGATIVE_UNIT_X), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(180.0f, vector::angleBetween(Vector3f::NEGATIVE_UNIT_X, Vector3f::UNIT_X), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(90.0f, vector::angleBetween(Vector3f::UNIT_X, Vector3f::NEGATIVE_UNIT_Y), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(90.0f, vector::angleBetween(Vector3f::NEGATIVE_UNIT_X, Vector3f::UNIT_Y), 0.0001f);
  CPPUNIT_ASSERT_DOUBLES_EQUAL(90.0f, vector::angleBetween(Vector3f::NEGATIVE_UNIT_X, Vector3f::UNIT_Z), 0.0001f);
}
コード例 #15
0
int Vector3f_getZ (Vector3f *v, float *result)
{
	CHECK_VECTOR3F(v);
	
	return Vector_get_data (v, result, 2);
}
コード例 #16
0
int Vector3f_change_sign (Vector3f *v)
{
	CHECK_VECTOR3F(v);
	
	return Vector_change_sign (v);
}
コード例 #17
0
int Vector3f_setZ (Vector3f *v, float value)
{
	CHECK_VECTOR3F(v);
	
	return Vector_set_data (v, value, 2);
}
コード例 #18
0
ファイル: VectorTests.cpp プロジェクト: Lecrapouille/SimTaDyn
//--------------------------------------------------------------------------
void VectorTests::testArithmetic()
{
  const float c_scalar = -2.0f;
  float scalar = -2.0f;

  // Addition, substraction
  CHECK_VECTOR3F((v2 + v5 + v3), 3.0f, 6.0f, 6.0f);
  CHECK_VECTOR3F(Vector3f::ZERO + 4.0f, 4.0f, 4.0f, 4.0f);
  CHECK_VECTOR3F(Vector3f::UNIT_X - Vector3f::UNIT_X, 0.0f, 0.0f, 0.0f);
  CHECK_VECTOR3F(-Vector3f::UNIT_X, -1.0f, 0.0f, 0.0f);
  CHECK_VECTOR3F(+Vector3f::UNIT_X, +1.0f, 0.0f, 0.0f);
  CHECK_VECTOR3F(-v2, -1.0f, -2.0f, -3.0f);

  // Multiplication
  CHECK_VECTOR3F((v5 * 2.0f), 2.0f, 4.0f, 6.0f);
  CHECK_VECTOR3F((v5 * -2.0f), -2.0f, -4.0f, -6.0f);
  CHECK_VECTOR3F((-2.0f * v5), -2.0f, -4.0f, -6.0f);
  CHECK_VECTOR3F((c_scalar * v5), -2.0f, -4.0f, -6.0f);
  CHECK_VECTOR3F((-v5 * 2.0f), -2.0f, -4.0f, -6.0f);
  CHECK_VECTOR3F((-v5 * c_scalar), 2.0f, 4.0f, 6.0f);
  CHECK_VECTOR3F((-v5 * scalar), 2.0f, 4.0f, 6.0f);

  // Division
  CHECK_VECTOR3F((v5 / 2.0f), 0.5f, 1.0f, 3.0f/2.0f);
  CHECK_VECTOR3F((v5 / -2.0f), -0.5f, -1.0f, -3.0f/2.0f);
  CHECK_VECTOR3F((-2.0f / v5), -2.0f, -1.0f, -2.0f/3.0f);
  CHECK_VECTOR3F((c_scalar / v5), -2.0f, -1.0f, -2.0f/3.0f);
  CHECK_VECTOR3F((scalar / v5), -2.0f, -1.0f, -2.0f/3.0f);
  CHECK_VECTOR3F((-v5 / 2.0f), -0.5f, -1.0f, -3.0f/2.0f);
  CHECK_VECTOR3F((-v5 / c_scalar), 0.5f, 1.0f, 3.0f/2.0f);
  CHECK_VECTOR3F((-v5 / scalar), 0.5f, 1.0f, 3.0f/2.0f);

  //
  static Vector3f v(v2);
  v += 1.0f;
  CHECK_VECTOR3F(v, 2.0f, 3.0f, 4.0f);
  v += 1.0f;
  CHECK_VECTOR3F(v, 3.0f, 4.0f, 5.0f);
  v -= 2.0f;
  CHECK_VECTOR3F(v, 1.0f, 2.0f, 3.0f);
  v /= 2.0f;
  CHECK_VECTOR3F(v, 1.0f / 2.0f, 1.0f, 3.0f / 2.0f);
  v *= 2.0f;
  CHECK_VECTOR3F(v, 1.0f, 2.0f, 3.0f);
}