有没有办法找出两个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
让光栅化版本的分辨率成为您的精度,并选择精度以满足您的性能需求.