Geometry_test.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #include "Geometry.cpp"
  4. bool operator==(const PT &a, const PT &b) {
  5. return a.x == b.x && a.y == b.y;
  6. }
  7. int main() {
  8. assert(RotateCCW90(PT(2,5)) == PT(-5, 2));
  9. assert(RotateCW90(PT(2,5)) == PT(5, -2));
  10. assert(fabs(RotateCCW(PT(2,5),M_PI/2).x - (-5)) < 0.00001);
  11. assert(fabs(RotateCCW(PT(2,5),M_PI/2).y - 2) < 0.00001);
  12. assert(ProjectPointLine(PT(-5,-2), PT(10,4), PT(3,7)) == PT(5, 2));
  13. assert(ProjectPointSegment(PT(-5,-2), PT(10,4), PT(3,7)) == PT(5, 2));
  14. assert(ProjectPointSegment(PT(7.5,3), PT(10,4), PT(3,7)) == PT(7.5, 3));
  15. assert(ProjectPointSegment(PT(-5,-2), PT(2.5,1), PT(3,7)) == PT(2.5, 1));
  16. assert(fabs(DistancePointPlane(4,-4,3,2,-2,5,-8) - 6.78903) < 0.0001);
  17. assert(LinesParallel(PT(1,1), PT(3,5), PT(2,1), PT(4,5)) == 1);
  18. assert(LinesParallel(PT(1,1), PT(3,5), PT(2,0), PT(4,5)) == 0);
  19. assert(LinesParallel(PT(1,1), PT(3,5), PT(5,9), PT(7,13)) == 1);
  20. assert(LinesCollinear(PT(1,1), PT(3,5), PT(2,1), PT(4,5)) == 0);
  21. assert(LinesCollinear(PT(1,1), PT(3,5), PT(2,0), PT(4,5)) == 0);
  22. assert(LinesCollinear(PT(1,1), PT(3,5), PT(5,9), PT(7,13)) == 1);
  23. assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(3,1), PT(-1,3)) == 1);
  24. assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(4,3), PT(0,5)) == 1);
  25. assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(2,-1), PT(-2,1)) == 1);
  26. assert(SegmentsIntersect(PT(0,0), PT(2,4), PT(5,5), PT(1,7)) == 0);
  27. assert(ComputeLineIntersection(PT(0,0), PT(2,4), PT(3,1), PT(-1,3)) == PT(1, 2));
  28. assert(ComputeCircleCenter(PT(-3,4), PT(6,1), PT(4,5)) == PT(1, 1));
  29. vector<PT> v;
  30. v.push_back(PT(0,0)); v.push_back(PT(5,0)); v.push_back(PT(5,5)); v.push_back(PT(0,5));
  31. assert(PointInPolygon(v, PT(2,2)) == 1);
  32. assert(PointInPolygon(v, PT(2,0)) == 1);
  33. assert(PointInPolygon(v, PT(0,2)) == 1);
  34. assert(PointInPolygon(v, PT(5,2)) == 0);
  35. assert(PointInPolygon(v, PT(2,5)) == 0);
  36. assert(PointOnPolygon(v, PT(2,2)) == 0);
  37. assert(PointOnPolygon(v, PT(2,0)) == 1);
  38. assert(PointOnPolygon(v, PT(0,2)) == 1);
  39. assert(PointOnPolygon(v, PT(5,2)) == 1);
  40. assert(PointOnPolygon(v, PT(2,5)) == 1);
  41. // expected: (1,6)
  42. // (5,4) (4,5)
  43. // blank line
  44. // (4,5) (5,4)
  45. // blank line
  46. // (4,5) (5,4)
  47. // vector<PT> u = CircleLineIntersection(PT(0,6), PT(2,6), PT(1,1), 5);
  48. // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl;
  49. // u = CircleLineIntersection(PT(0,9), PT(9,0), PT(1,1), 5);
  50. // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl;
  51. // u = CircleCircleIntersection(PT(1,1), PT(10,10), 5, 5);
  52. // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl;
  53. // u = CircleCircleIntersection(PT(1,1), PT(8,8), 5, 5);
  54. // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl;
  55. // u = CircleCircleIntersection(PT(1,1), PT(4.5,4.5), 10, sqrt(2.0)/2.0);
  56. // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl;
  57. // u = CircleCircleIntersection(PT(1,1), PT(4.5,4.5), 5, sqrt(2.0)/2.0);
  58. // for (int i = 0; i < u.size(); i++) cerr << u[i] << " "; cerr << endl;
  59. PT pa[] = { PT(0,0), PT(5,0), PT(1,1), PT(0,5) };
  60. vector<PT> p(pa, pa+4);
  61. PT c = ComputeCentroid(p);
  62. assert(fabs(ComputeArea(p) - 5.) < 0.00001);
  63. assert(fabs(c.x - 1.166666) < 0.00001);
  64. assert(fabs(c.y - 1.166666) < 0.00001);
  65. return 0;
  66. }