Advertisement
Guest User

split_o

a guest
Jun 26th, 2019
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.47 KB | None | 0 0
  1. struct Line {
  2.     long x1;
  3.     long y1;
  4.     long x2;
  5.     long y2;
  6. };
  7.  
  8. string split_O(Polygon &p) {
  9.     set< pair<int, int> > convex_point;
  10.     vector< pair<int, int> > concave_point;
  11.     vector< pair<int, int> > inner_point;
  12.     set<int> inner_xcoord;
  13.     set<int> inner_ycoord;
  14.  
  15.     Polygon hull;
  16.     boost::geometry::convex_hull(p, hull);
  17.  
  18.     std::cout << "hull:" << std::endl;
  19.     for (int i = 0; i < hull.outer().size(); i++) {
  20.         std::cout << hull.outer().at(i).x() << " " << hull.outer().at(i).y() << std::endl;
  21.         pair<int, int> tmp(hull.outer().at(i).x(), hull.outer().at(i).y());
  22.         convex_point.insert(tmp);
  23.     }
  24.  
  25.     //outer
  26.     for (int i = 0; i < p.outer().size(); i++) {
  27.         pair<int, int> tmp(p.outer().at(i).x(), p.outer().at(i).y());
  28.         if (!convex_point.count(tmp)) {
  29.             concave_point.push_back(tmp);
  30.         }
  31.     }
  32.  
  33.     //line
  34.     vector<Line> v_line;
  35.     vector<Line> h_line;
  36.     for (int i = 0; i < concave_point.size(); i++) {
  37.         for (int j = 0; j < concave_point.size(); j++) {
  38.             Line tmp;
  39.             if (concave_point[i].first == concave_point[j].first) {
  40.                 tmp.x1 = concave_point[i].first;
  41.                 tmp.y1 = concave_point[i].second;
  42.                 tmp.x2 = concave_point[j].first;
  43.                 tmp.y2 = concave_point[j].second;
  44.                 v_line.push_back(tmp);
  45.             }
  46.             else if (concave_point[i].second == concave_point[j].second) {
  47.                 tmp.x1 = concave_point[i].first;
  48.                 tmp.y1 = concave_point[i].second;
  49.                 tmp.x2 = concave_point[j].first;
  50.                 tmp.y2 = concave_point[j].second;
  51.                 h_line.push_back(tmp);
  52.             }
  53.         }
  54.     }
  55.  
  56.    
  57. }
  58.  
  59. bool isIntersect(Line &v, Line &h) {
  60.     if (v.x1 <= h.x1) {
  61.         if (v.x1 >= h.x2) {
  62.             if (h.y1 >= v.y1) {
  63.                 if (h.y1 <= v.y2) {
  64.                     return true;
  65.                 }
  66.             } else if (h.y1 >= v.y2) {
  67.                 if (h.y1 <= v.y1) {
  68.                     return true;
  69.                 }
  70.             }
  71.         }
  72.     } else if (v.x1 <= h.x2) {
  73.         if (v.x1 >= h.x1) {
  74.             if (h.y1 >= v.y2) {
  75.                 if (h.y1 <= v.y1) {
  76.                     return true;
  77.                 }
  78.             } else if (h.y1 >= v.y1) {
  79.                 if (h.y1 <= v.y2) {
  80.                     return true;
  81.                 }
  82.             }
  83.         }
  84.     }
  85.     return false;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement