我有一组位于凹多边形边界的点。我想找到一个非交叉多边形,将这些点作为顶点。换句话说,我想以凹面多边形的ccw(或cw)方式排序。
我看一下评估多边形是以ccw还是cw方式排序的方法(计算和求和交叉乘积)。这不是我的问题:我有随机序列的顶点,我想订购它们,以便在多边形的外壳上有cw或ccw。
我想到了最初的顶点序列,并连续识别了交叉点。如果初始点序列是[x1,y1; x2,y2; x3,y3; ...]和第2和第3点正在交叉,我们继续序列[x1,y1; x2,y3; x3,y2; ......]
您能想到什么算法?什么是背后的概念?你有提示吗?
Regds
答案 0 :(得分:5)
如果我正确理解了问题,您需要对输入的点集进行排序,使它们以某些可能的凹多边形的顺时针顺序出现。这可以解决如下。
让p1和p2成为最左侧和最右侧的点。找到点的下凸壳S. S包含p1,p2和位于线p1p2下方的所有凸包点。现在按其x坐标对剩余的点(不在S中的点)进行排序。这个排序顺序连同S的顺序(由下凸壳体算法生成)将为您提供所有顶点的所需顺时针顺序。
答案 1 :(得分:0)
构造多边形时有信息必须使用,除非多边形比一组可能是凹多边形的点更好地定义。
例如,如果从形状或图像中取出顶点,则形状中的填充像素可能会有所帮助。对于一个项目,我需要在blob的周边订购点,所以我得到blob的边框像素(可以通过多种方式完成),然后我使用DFS样式遍历这些按顺序放置它们。然后我编写算法来合并边缘并在交叉点做出决定。