123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- #include <bits/stdc++.h>
- 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<PT> 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<PT> 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<PT> 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;
- }
|