Можно ли когда-нибудь назвать pointInside: неправильной формы? - PullRequest
0 голосов
/ 03 февраля 2011

Я рисую продолговатую форму яйца (на iOS) и хочу использовать ее в качестве границы для частиц.Моя мысль состоит в том, чтобы использовать кривые пути, чтобы сделать UIView, а затем использовать hitTest:withEvent: или pointInside:withEvent: для принудительного столкновения границы.

Проблема, конечно, в том, что UIView всегда прямоугольный.Как вы будете проверять, находится ли точка внутри неправильной формы, подобной этой?

- (void)drawRect:(CGRect)rect {
int w = rect.size.width;
int h = rect.size.height;
CGContextBeginPath(context);
CGContextMoveToPoint(context, w/2, h/5);
CGContextAddCurveToPoint(context, w*0.1, h/4.3, w*0.1, h*0.82, w/2, h*0.8);
CGContextAddCurveToPoint(context, w*0.9, h*0.82, w*0.9, h/4.3, w/2, h*0.2);

Я использую openFrameworks , для чего это стоит.Этот код просто Obj-C, но я открыт для любых решений C ++ / obj-C ++.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2011

Если вы делаете CGPathRef, вы можете использовать CGPathContainsPoint. Вы можете использовать тот же CGPathRef для рендеринга в контекст. Вы также можете вызвать CGContextPathContainsPoint в контексте, содержащем путь, но в зависимости от того, когда вам нужно проверить, у вас может не быть контекста. И другой альтернативой является селектор containsPoint на UIBezierPath.

0 голосов
/ 03 февраля 2011

Если вы хотите закодировать это с нуля, http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm использует несколько различных алгоритмов, которые будут работать для произвольного многоугольника.

...