Ejemplo n.º 1
0
void test_vunit(void) {
  EXPECT_APPROX(1.0, az_vnorm(az_vunit(AZ_VZERO)));
  EXPECT_APPROX(az_vtheta(AZ_VZERO), az_vtheta(az_vunit(AZ_VZERO)));
  for (int i = 0; i < 1000; ++i) {
    const az_vector_t vec = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)};
    ASSERT_APPROX(1.0, az_vnorm(az_vunit(vec)));
    ASSERT_APPROX(az_vtheta(vec), az_vtheta(az_vunit(vec)));
  }
}
Ejemplo n.º 2
0
void test_vcaplen(void) {
  EXPECT_APPROX(0.0, az_vnorm(az_vcaplen(AZ_VZERO, 3.0)));
  EXPECT_APPROX(0.0, az_vnorm(az_vcaplen(az_vpolar(3, 3), 0)));
  for (int i = 0; i < 1000; ++i) {
    const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)};
    const double length = az_random(0.0, 1.3);
    const az_vector_t v2 = az_vcaplen(v1, length);
    ASSERT_APPROX(fmin(length, az_vnorm(v1)), az_vnorm(v2));
    ASSERT_APPROX(az_vtheta(v1), az_vtheta(v2));
  }
}
Ejemplo n.º 3
0
void test_vaddlen(void) {
  EXPECT_APPROX(3.0, az_vnorm(az_vaddlen(AZ_VZERO, 3.0)));
  EXPECT_APPROX(0.0, az_vtheta(az_vaddlen(AZ_VZERO, 3.0)));
  EXPECT_APPROX(4.0, az_vnorm(az_vaddlen(AZ_VZERO, -4.0)));
  EXPECT_APPROX(AZ_PI, az_vtheta(az_vaddlen(AZ_VZERO, -4.0)));
  for (int i = 0; i < 1000; ++i) {
    const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)};
    const double length = az_random(0.0, 1.3);
    const az_vector_t v2 = az_vaddlen(v1, length);
    ASSERT_APPROX((length + az_vnorm(v1)), az_vnorm(v2));
    ASSERT_APPROX(az_vtheta(v1), az_vtheta(v2));
  }
}
Ejemplo n.º 4
0
void test_vwithlen(void) {
  EXPECT_APPROX(3.0, az_vnorm(az_vwithlen(AZ_VZERO, 3.0)));
  EXPECT_APPROX(0.0, az_vtheta(az_vwithlen(AZ_VZERO, 3.0)));
  for (int i = 0; i < 1000; ++i) {
    const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)};
    const double length = az_random(0.0, 1.3);
    const az_vector_t v2 = az_vwithlen(v1, length);
    ASSERT_APPROX(length, az_vnorm(v2));
    ASSERT_APPROX(az_vtheta(v1), az_vtheta(v2));
  }
  for (int i = 0; i < 1000; ++i) {
    const az_vector_t v1 = {az_random(-1.5, 1.5), az_random(-1.5, 1.5)};
    const double length = az_random(0.0, 1.3);
    const az_vector_t v2 = az_vwithlen(v1, -length);
    ASSERT_APPROX(length, az_vnorm(v2));
    ASSERT_APPROX(az_vtheta(v1), az_mod2pi(az_vtheta(v2) + AZ_PI));
  }
}
	template<class T, unsigned int D> void testIntersectsDistance()
	{
		HyperSphere<T, D> sphere { };
		HyperSphere<T, D> sphere2 { };
		HyperPlane<T, D> plane {};
		plane.normal()[0] = 1;
		HyperRectangle<T, D> rect {};
		ASSERT_EQ(sphere.intersects(sphere2), true);
		ASSERT_EQ(sphere.intersects(plane), true);
		ASSERT_EQ(sphere.intersects(rect), true);
		ASSERT_EQ(sphere.getSignedDistance(sphere2), -2);
		ASSERT_EQ(sphere.getSignedDistance(sphere2.center()), -1);
		sphere.center()[0] = 1;
		plane.base()[0] = 10;
		ASSERT_EQ(sphere.intersects(sphere2), true);
		ASSERT_EQ(sphere.intersects(plane), false);
		ASSERT_EQ(sphere.intersects(rect), true);
		ASSERT_EQ(sphere.getSignedDistance(sphere2), -1);
		ASSERT_EQ(sphere.getSignedDistance(sphere2.center()), 0);
		sphere.center()[0] = 2;
		plane.base()[0] = 0;
		ASSERT_EQ(sphere.intersects(sphere2), true);
		ASSERT_EQ(sphere.intersects(plane), false);
		ASSERT_EQ(sphere.intersects(rect), true);
		ASSERT_EQ(sphere.getSignedDistance(sphere2), 0);
		ASSERT_EQ(sphere.getSignedDistance(sphere2.center()), 1);
		sphere.center()[0] = 2.1f;
		plane.base()[0] = 1;
		plane.base()[1] = 1;
		plane.normal()[0] = 1;
		plane.normal()[1] = 1;
		plane.normal().normalize();
		rect.pos()[0] = 1;
		rect.pos()[1] = 1;
		ASSERT_EQ(sphere.intersects(sphere2), false);
		ASSERT_EQ(sphere.intersects(plane), true);
		ASSERT_EQ(sphere.intersects(rect), false);
		ASSERT_APPROX(sphere.getSignedDistance(sphere2), 0.1f, 0.01f);
		ASSERT_APPROX(sphere.getSignedDistance(sphere2.center()), 1.1f, 0.01f);
	}