Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct Line {
- long x1;
- long y1;
- long x2;
- long y2;
- };
- string split_O(Polygon &p) {
- set< pair<int, int> > convex_point;
- vector< pair<int, int> > concave_point;
- vector< pair<int, int> > inner_point;
- set<int> inner_xcoord;
- set<int> inner_ycoord;
- Polygon hull;
- boost::geometry::convex_hull(p, hull);
- std::cout << "hull:" << std::endl;
- for (int i = 0; i < hull.outer().size(); i++) {
- std::cout << hull.outer().at(i).x() << " " << hull.outer().at(i).y() << std::endl;
- pair<int, int> tmp(hull.outer().at(i).x(), hull.outer().at(i).y());
- convex_point.insert(tmp);
- }
- //outer
- for (int i = 0; i < p.outer().size(); i++) {
- pair<int, int> tmp(p.outer().at(i).x(), p.outer().at(i).y());
- if (!convex_point.count(tmp)) {
- concave_point.push_back(tmp);
- }
- }
- //line
- vector<Line> v_line;
- vector<Line> h_line;
- for (int i = 0; i < concave_point.size(); i++) {
- for (int j = 0; j < concave_point.size(); j++) {
- Line tmp;
- if (concave_point[i].first == concave_point[j].first) {
- tmp.x1 = concave_point[i].first;
- tmp.y1 = concave_point[i].second;
- tmp.x2 = concave_point[j].first;
- tmp.y2 = concave_point[j].second;
- v_line.push_back(tmp);
- }
- else if (concave_point[i].second == concave_point[j].second) {
- tmp.x1 = concave_point[i].first;
- tmp.y1 = concave_point[i].second;
- tmp.x2 = concave_point[j].first;
- tmp.y2 = concave_point[j].second;
- h_line.push_back(tmp);
- }
- }
- }
- }
- bool isIntersect(Line &v, Line &h) {
- if (v.x1 <= h.x1) {
- if (v.x1 >= h.x2) {
- if (h.y1 >= v.y1) {
- if (h.y1 <= v.y2) {
- return true;
- }
- } else if (h.y1 >= v.y2) {
- if (h.y1 <= v.y1) {
- return true;
- }
- }
- }
- } else if (v.x1 <= h.x2) {
- if (v.x1 >= h.x1) {
- if (h.y1 >= v.y2) {
- if (h.y1 <= v.y1) {
- return true;
- }
- } else if (h.y1 >= v.y1) {
- if (h.y1 <= v.y2) {
- return true;
- }
- }
- }
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement