adjusted BVH improved 2D/3D BVH new bounding volumes new test cases renamed some test-cases for grouping reasons made GPC header-only using slight adjustments
86 lines
1.8 KiB
C++
86 lines
1.8 KiB
C++
#ifdef WITH_TESTS
|
|
|
|
#include "../Tests.h"
|
|
|
|
#include "../../geo/Circle2.h"
|
|
|
|
TEST(Geo_Circle2, intersect) {
|
|
|
|
Circle2 c1(Point2(3,2), 1.0);
|
|
|
|
// left of circle
|
|
Ray2 r1(Point2(1,0), Point2(0,1));
|
|
ASSERT_FALSE(c1.intersects(r1));
|
|
|
|
// right of circle
|
|
Ray2 r2(Point2(5,0), Point2(0,1));
|
|
ASSERT_FALSE(c1.intersects(r2));
|
|
|
|
|
|
// through circle (from bottom)
|
|
Ray2 r3(Point2(3,0), Point2(0,1));
|
|
ASSERT_TRUE(c1.intersects(r3));
|
|
// through circle (from bottom)
|
|
Ray2 r4(Point2(3.5,0), Point2(0,1));
|
|
ASSERT_TRUE(c1.intersects(r4));
|
|
|
|
// within circle
|
|
Ray2 r5(Point2(3,2), Point2(0,1));
|
|
ASSERT_TRUE(c1.intersects(r5));
|
|
|
|
|
|
// through circle (from left)
|
|
Ray2 r6(Point2(0,2), Point2(1,0));
|
|
ASSERT_TRUE(c1.intersects(r6));
|
|
// through circle (from right)
|
|
Ray2 r7(Point2(10,2), Point2(-1,0));
|
|
ASSERT_TRUE(c1.intersects(r7));
|
|
// through circle (from top)
|
|
Ray2 r8(Point2(3,10), Point2(0,-1));
|
|
ASSERT_TRUE(c1.intersects(r8));
|
|
|
|
|
|
}
|
|
|
|
TEST(Geo_Circle2, contains) {
|
|
|
|
Circle2 c(Point2(0,0), 1.01);
|
|
|
|
ASSERT_TRUE(c.contains(Point2(+1,0)));
|
|
ASSERT_TRUE(c.contains(Point2(-1,0)));
|
|
|
|
ASSERT_TRUE(c.contains(Point2(0,+1)));
|
|
ASSERT_TRUE(c.contains(Point2(0,-1)));
|
|
|
|
ASSERT_FALSE(c.contains(Point2(+1,+1)));
|
|
ASSERT_FALSE(c.contains(Point2(-1,-1)));
|
|
|
|
}
|
|
|
|
TEST(Geo_Circle2, join) {
|
|
|
|
// no overlap
|
|
Circle2 a1(Point2(-1,0), 0.5);
|
|
Circle2 a2(Point2(+1,0), 0.5);
|
|
Circle2 a3 = Circle2::join(a1,a2);
|
|
ASSERT_EQ(Point2(0,0), a3.center);
|
|
ASSERT_NEAR(1.5, a3.radius, 0.01);
|
|
|
|
// overlap
|
|
Circle2 b1(Point2(0,+1), 1.5);
|
|
Circle2 b2(Point2(0,-1), 1.5);
|
|
Circle2 b3 = Circle2::join(b1,b2);
|
|
ASSERT_EQ(Point2(0,0), b3.center);
|
|
ASSERT_NEAR(2.5, b3.radius, 0.01);
|
|
|
|
// within
|
|
Circle2 c1(Point2(0,+1), 3.0);
|
|
Circle2 c2(Point2(0,-1), 1.0);
|
|
Circle2 c3 = Circle2::join(c1,c2);
|
|
ASSERT_EQ(c1.center, c3.center);
|
|
ASSERT_NEAR(c1.radius, c3.radius, 0.01);
|
|
|
|
}
|
|
|
|
#endif
|