我实现了一种算法来查找一组点的alpha形状。阿尔法形状是一组凹形船体,其形状取决于参数α,决定哪些点构成船体。
我已经解决了凹形船体中的一组点。这些点构成凹多边形。我想以顺时针方式订购这些点。
当它是凸形时,顺时针顺序点是直截了当的。如何用凹陷的东西做到这一点?背后是什么算法?我看着“穿越最短路径”#39;算法,'最短非交叉哈密顿路径'算法。这是正确的做法吗?
答案 0 :(得分:0)
这个答案非常有价值https://gamedev.stackexchange.com/questions/13229/sorting-array-of-points-in-clockwise-order因为在凹形船体和任何一组点中对点进行排序是相同的,其中有序的参考是点的重心(或船体内的任何点) !)
你的问题不够准确。一系列点只是« 顺时针»或«逆时针»相对于参考点。 否则,任何三个点的数组总是可以是CW或CCW。 请参见下图:在左侧,订购点 顺时针;在右边,订购完全相同的点 逆时针方向。
顺时针或逆时针
在你的情况下,我相信使用点的重心作为 参考点是合理的。
对于未知数量的点,一个好的方法可能如下 之一:
让P [0],P [1],... P [n-1]为要排序的点列表,让M为 所有点的重心
计算a [0],a [1],... a [n-1]使a [i] = atan2(P [i] .y - M.y,P [i] .x - M.x);
使用qsort对相对于其值的点进行排序。