#include using namespace std; #include "Geometry.cpp" bool operator==(const PT &a, const PT &b) { return a.x == b.x && a.y == b.y; } int main() { assert(RotateCCW90(PT(2,5)) == PT(-5, 2)); assert(RotateCW90(PT(2,5)) == PT(5, -2)); assert(fabs(RotateCCW(PT(2,5),M_PI/2).x - (-5)) < 0.00001); assert(fabs(RotateCCW(PT(2,5),M_PI/2).y - 2) < 0.00001); assert(ProjectPointLine(PT(-5,-2), PT(10,4), PT(3,7)) == PT(5, 2)); assert(ProjectPointSegment(PT(-5,-2), PT(10,4), PT(3,7)) == PT(5, 2)); assert(ProjectPointSegment(PT(7.5,3), PT(10,4), PT(3,7)) == PT(7.5, 3)); assert(ProjectPointSegment(PT(-5,-2), PT(2.5,1), PT(3,7)) == PT(2.5, 1)); assert(fabs(DistancePointPlane(4,-4,3,2,-2,5,-8) - 6.78903) < 0.0001); assert(LinesParallel(PT(1,1), PT(3,5), PT(2,1), PT(4,5)) == 1); assert(LinesParallel(PT(1,1), PT(3,5), PT(2,0), PT(4,5)) == 0); assert(LinesParallel(PT(1,1), PT(3,5), PT(5,9), PT(7,13)) == 1); assert(LinesCollinear(PT(1,1), PT(3,5), PT(2,1), PT(4,5)) == 0); assert(LinesCollinear(PT(1,1), PT(3,5), PT(2,0), PT(4,5)) == 0); assert(LinesCollinear(PT(1,1), PT(3,5), PT(5,9), PT(7,13)) == 1); assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(3,1), PT(-1,3)) == 1); assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(4,3), PT(0,5)) == 1); assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(2,-1), PT(-2,1)) == 1); assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(5,5), PT(1,7)) == 0); assert(ComputeLineIntersection(PT(0,0), PT(2,4), PT(3,1), PT(-1,3)) == PT(1, 2)); assert(ComputeCircleCenter(PT(-3,4), PT(6,1), PT(4,5)) == PT(1, 1)); vector v; v.push_back(PT(0,0)); v.push_back(PT(5,0)); v.push_back(PT(5,5)); v.push_back(PT(0,5)); assert(PointInPolygon(v, PT(2,2)) == 1); assert(PointInPolygon(v, PT(2,0)) == 1); assert(PointInPolygon(v, PT(0,2)) == 1); assert(PointInPolygon(v, PT(5,2)) == 0); assert(PointInPolygon(v, PT(2,5)) == 0); assert(PointOnPolygon(v, PT(2,2)) == 0); assert(PointOnPolygon(v, PT(2,0)) == 1); assert(PointOnPolygon(v, PT(0,2)) == 1); assert(PointOnPolygon(v, PT(5,2)) == 1); assert(PointOnPolygon(v, PT(2,5)) == 1); // expected: (1,6) // (5,4) (4,5) // blank line // (4,5) (5,4) // blank line // (4,5) (5,4) // vector u = CircleLineIntersection(PT(0,6), PT(2,6), PT(1,1), 5); // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl; // u = CircleLineIntersection(PT(0,9), PT(9,0), PT(1,1), 5); // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl; // u = CircleCircleIntersection(PT(1,1), PT(10,10), 5, 5); // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl; // u = CircleCircleIntersection(PT(1,1), PT(8,8), 5, 5); // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl; // u = CircleCircleIntersection(PT(1,1), PT(4.5,4.5), 10, sqrt(2.0)/2.0); // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl; // u = CircleCircleIntersection(PT(1,1), PT(4.5,4.5), 5, sqrt(2.0)/2.0); // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl; PT pa[] = { PT(0,0), PT(5,0), PT(1,1), PT(0,5) }; vector p(pa, pa+4); PT c = ComputeCentroid(p); assert(fabs(ComputeArea(p) - 5.) < 0.00001); assert(fabs(c.x - 1.166666) < 0.00001); assert(fabs(c.y - 1.166666) < 0.00001); return 0; }