微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐