cgpath / uibezierpath против часовой стрелки - PullRequest
0 голосов
/ 01 мая 2018

Как узнать, связаны ли эти точки против часовой стрелки или по часовой стрелке? У меня есть этот код в моем 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 голосов
/ 01 мая 2018

То, что у вас есть, похоже на:

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

То есть против часовой стрелки в стандартной системе координат.

0 голосов
/ 01 мая 2018

Ориентация может быть выведена из подписанной области. Вы можете вычислить подписанную область из суммы перекрестных произведений последовательных точек:

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, чтобы определить, идет ли путь по часовой стрелке или против часовой стрелки (какой из них относится к тому, какой знак зависит от вашей системы координат).

...