【发布时间】:2013-07-25 15:21:07
【问题描述】:
给定一个直线多边形,其坐标已给出。
请向我建议一个逆时针排序的解决方案,这样可以形成一条闭合线。
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);
}
但这不起作用。
请提供解决方案。
【问题讨论】:
-
我不认为这是@JimMischel 指出的另一个问题的重复。在那个问题中,多边形是由顶点和边指定的,这里似乎只给出了顶点。
-
转换为以多边形质心为原点的极坐标,然后按角度排序。
-
如果多边形不是凸的,则按角度对直线多边形的点进行排序不一定会产生正确的线环。我的直觉是,为一组顶点找到一个简单的直线循环是 NP 难的。
-
多边形轴对齐了吗?这样会容易很多。