逆时针cgpath / uibezierpath

时间:2018-05-01 06:29:39

标签: objective-c math sprite-kit cgpath

如何判断这些点是逆时针还是顺时针连接? 我在GameScene.m

中有这段代码
CGFloat radius = (self.frame.size.width - 6) / 2;
CGFloat a = radius * sqrt((CGFloat)3.0) / 2;
CGFloat b = radius / 2;

UIBezierPath *pathFirstTrigon = [UIBezierPath bezierPath];

[pathFirstTrigon moveToPoint:CGPointMake(0, -radius)];
[pathFirstTrigon addLineToPoint:CGPointMake(a, b)];
[pathFirstTrigon addLineToPoint:CGPointMake(-a, b)];
[pathFirstTrigon closePath];

2 个答案:

答案 0 :(得分:0)

可以从签名区域推断出方向。您可以从连续点的叉积之和计算签名区域:

2 * area = (0, -radius) x (a, b) + (a, b) ⨯ (-a, b) + (-a, b) ⨯ (0, -radius)

使用2D交叉产品的定义:

(a, b) ⨯ (c, d) = a * d - b * c

这会让你:

area = a * radius + a * b

使用area的符号确定路径是顺时针还是逆时针(哪一个指的是哪个符号取决于您的坐标系)。

答案 1 :(得分:0)

你所拥有的是类似的东西:

           Y
(-a,b)     ^    (a,b)
   +       |      +
           |
           |
           |
           | 
   --------+---------> X
           |
           + (0,r)
           |

因此它在标准坐标系上是逆时针的。