This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/tests/geo/TestCircle2.cpp
FrankE 686151b511 worked on 2D/3D raytracing
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
2017-09-13 08:08:00 +02:00

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