我有一个非交叉的闭合矢量循环,我想确定它是逆时针方向还是顺时针方向。
这是一个简单的例子
[x y] = [0 0; 1 0; 1 1; 0 1; 0 0]
是逆时针和
[x y] = [0 0; 0 1; 1 1; 1 0; 0 0]
是顺时针方向。
有没有一种好方法可以确定它是顺时针还是逆时针?
编辑:更多示例
[x, y] OR [x, y]
0 ,0 0, 0
1 ,0.5 0, 2
2 ,0 2, 2
2 ,2 2, 0
0 ,2 1, 0.5
0 ,0 0, 0
现在,上述各点仅按给定顺序加入。我需要将左侧箱体检测为逆时针,将右侧箱体检测为顺时针方向。
答案 0 :(得分:1)
对非交叉凸和凹多边形执行此操作的大多数稳健方法是计算signed area of the polygon。如果有符号区域为正,则为逆时针,否则为顺时针
signedArea = 0.5 * sum(x.*y([2:end 1]) - y.*x([2:end 1]));
isClockwise = signedArea < 0;