#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