iphone – CGPathRef交集

有没有办法找出两个CGPathRef是否相交.在我的例子中,所有CGPath都有closePath.

例如,我有两条路.一条路径是以一定角度旋转的矩形,另一条路径是弯曲路径.两条路径的起源将经常变化.在某些时候,它们可能相交.我想知道它们什么时候相交.如果您有任何解决方案,请告诉我.

提前致谢

解决方法

将一条路径设为剪切路径,绘制另一条路径,然后搜索在剪切过程中幸存的像素:

// initialise and erase context
CGContextAddpath(context,path1);
CGContextClip(context);

// set fill colour to intersection colour
CGContextAddpath(context,path2);
CGContextFillPath(context);

// search for pixels that match intersection colour

这是因为裁剪=相交.

不要忘记,交叉点取决于内部性的定义,其中有几个.此代码使用了绕组数填充规则,您可能需要偶数奇数规则或其他内容.如果内在性不能让你夜不能寐,那么这段代码应该没问题.

我之前的回答涉及将透明曲线绘制到RGBA上下文.这种解决方案优于旧解决方案,因为它是

>更简单
>使用四分之一的内存作为8位灰度上下文就足够了
>不需要毛茸茸的,难以调试的透明度代码

谁还能要求更多?

我想你可以要求一个完整的实现,准备削减”””,但这会破坏乐趣并混淆一个简单的答案.

年纪较大,更难理解并且缺乏有效的答案

将50%透明度的CGPathRefs分别绘制到已归零的CGBitmapContextCreate-ed RGBA内存缓冲区中并检查任何像素值> 128.这适用于任何支持CoreGraphics(即iOS和OSX)的平台.

在伪代码

// zero memory

CGContextRef context;
context = CGBitmapContextCreate(memory,wide,high,8,wide*4,CGColorSpaceCreateDeviceRGB(),kCGImageAlphaPremultipliedLast);
CGContextSetRGBFillColor(context,1,0.5);  // Now everything you draw will be at 50%

// draw your path 1 to context

// draw your path 2 to context

// for each pixel in memory buffer
if(*p > 128) return true; // curves intersect  
else p+= 4; // keep looking

让光栅化版本的分辨率成为您的精度,并选择精度以满足您的性能需求.

相关文章

我正在用TitaniumDeveloper编写一个应用程序,它允许我使用Ja...
我的问题是当我尝试从UIWebView中调用我的AngularJS应用程序...
我想获取在我的Mac上运行的所有前台应用程序的应用程序图标....
我是一名PHP开发人员,我使用MVC模式和面向对象的代码.我真的...
OSX中的SetTimer在Windows中是否有任何等效功能?我正在使用...
我不确定引擎盖下到底发生了什么,但这是我的设置,示例代码和...