封闭的矢量循环方向

时间:2015-11-20 08:39:53

标签: matlab vector direction

我有一个非交叉的闭合矢量循环,我想确定它是逆时针方向还是顺时针方向。

这是一个简单的例子

[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

现在,上述各点仅按给定顺序加入。我需要将左侧箱体检测为逆时针,将右侧箱体检测为顺时针方向。

1 个答案:

答案 0 :(得分:1)

对非交叉凸凹多边形执行此操作的大多数稳健方法是计算signed area of the polygon。如果有符号区域为正,则为逆时针,否则为顺时针

signedArea = 0.5 * sum(x.*y([2:end 1]) - y.*x([2:end 1]));
isClockwise = signedArea < 0;