iphone – CGPathRef交集

iphone – CGPathRef交集,第1张

概述有没有办法找出两个CGPathRef是否相交.在我的例子中,所有CGPath都有closePath. 例如,我有两条路.一条路径是以一定角度旋转的矩形,另一条路径是弯曲路径.两条路径的起源将经常变化.在某些时候,它们可能相交.我想知道它们什么时候相交.如果您有任何解决方案,请告诉我. 提前致谢 将一条路径设为剪切路径,绘制另一条路径,然后搜索在剪切过程中幸存的像素: // initialise a 有没有办法找出两个CGPathref是否相交.在我的例子中,所有CGPath都有closePath.

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

提前致谢

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

// initialise and erase contextCGContextAddpath(context,path1);CGContextClip(context);// set fill colour to intersection colourCGContextAddpath(context,path2);CGContextFillPath(context);// search for pixels that match intersection colour

这是因为裁剪=相交.

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

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

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

谁还能要求更多?

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

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

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

在伪代码中

// zero memoryCGContextRef 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 bufferif(*p > 128) return true; // curves intersect  else p+= 4; // keep looking

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

总结

以上是内存溢出为你收集整理的iphone – CGPathRef交集全部内容,希望文章能够帮你解决iphone – CGPathRef交集所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1033039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存