逆向排序直线多边形的点

时间:2013-07-25 15:21:08

标签: c++ algorithm sorting

我得到一个直线多边形,其坐标给出 请向我建议一个逆时针排序的解决方案,这样就可以形成一条封闭的线。

bool mycomparator(Point p1,Point p2){

    return ((p1.x*p2.y-p2.x*p1.y)>0);

}

void sort_anticlockwise(vector<Point> v){

    sort(v.begin(),v.end(),mycomparator);

}

但这不起作用。
请提供解决方案。

1 个答案:

答案 0 :(得分:6)

考虑以下多边形:

Polygon

首先,按y坐标排序顶点。在y坐标相等的组中,顶点按x坐标排序:

Sorted by y and x-coordinate

如果没有退化顶点,每个组中将始终存在偶数个顶点。边缘将永远交替。因此,在0-1之间存在边缘,1-2之间没有边缘,2-3之间没有边缘,没有边缘,边缘等。

Add edges

存储每个顶点的关联边。例如。在地图或适当的结构中。

对垂直边缘执行相同操作(首先按x坐标排序,在组中按y坐标排序)。

然后你有多边形的所有边。每个顶点现在应该有2个相关边。选择一个顶点并从边缘到边缘。这将为您提供折线。如果您发现该线是顺时针方向,只需还原顺序,您将获得一条ccw折线。