0

我正在绘制一个长方形的“鸡蛋”形状(在 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++ 解决方案持开放态度。

4

2 回答 2

2

如果你制作一个CGPathRef你可以使用CGPathContainsPoint. 您可以使用它CGPathRef来渲染到上下文中。您也可以调用CGContextPathContainsPoint包含路径的上下文,但根据您需要测试的时间,您可能没有上下文。另一种选择containsPointUIBezierPath.

于 2011-02-03T14:36:21.837 回答
0

如果您想从头开始编写此代码,http://www.softsurfer.com/Archive/algorithm_0103/algorithm_0103.htm会通过几种适用于任意多边形的不同算法。

于 2011-02-03T14:40:32.240 回答