检查绘制路径/CGPath是否在iPhone游戏中与自身相交
我在OpenGL ES中绘制了一条路径。如果需要,我可以将其转换为CGPath检查绘制路径/CGPath是否在iPhone游戏中与自身相交,iphone,objective-c,path,cocos2d-iphone,touch,Iphone,Objective C,Path,Cocos2d Iphone,Touch,我在OpenGL ES中绘制了一条路径。如果需要,我可以将其转换为CGPath 我该如何检查它是否与自身相交(如果用户创建了一个完整的循环)?注意:这是对问题早期版本的回答,我认为问题在于确定路径是否闭合 我认为当当前点=起点时,路径被视为闭合的 我所知道的检查这一点的最简单方法是自己跟踪这两点,并检查是否相等。您还可以使用,并且只跟踪起点以与此进行比较 如果很难直接跟踪,这里有一个迂回的方法来找到起点: 复制路径 存储其当前点 调用CGPathCloseSubpath 检查当前点是否已更改
我该如何检查它是否与自身相交(如果用户创建了一个完整的循环)?注意:这是对问题早期版本的回答,我认为问题在于确定路径是否闭合 我认为当当前点=起点时,路径被视为闭合的 我所知道的检查这一点的最简单方法是自己跟踪这两点,并检查是否相等。您还可以使用,并且只跟踪起点以与此进行比较 如果很难直接跟踪,这里有一个迂回的方法来找到起点:
- 复制路径
- 存储其当前点
- 调用
CGPathCloseSubpath
- 检查当前点是否已更改
您可能还想继续看这篇SO文章,这篇文章也与您的问题类似,并且一些建议的解决方案与上面Graham的相同。这是一种检查由单个连续段组成的路径是否自交的方法 我确信,如果您想要更快的实现,您可以通过使用一些好的想法和对
CGPath
内部数据的完全访问来实现。这一想法侧重于快速编码,尽管我怀疑它仍然会相当快:
基本上,获取路径的两个副本,并以两种不同的方式填充它。一个填充使用CGContextFillPath
,而另一个填充使用CGContextFillPath
。如果路径是自交的,则结果将不同
您可以通过在中混合结果并测试生成的原始图像数据是否全部为0(全部为黑色)来检查结果是否不同
哈奇,是的。但也(相对)容易编码
**附录**我刚刚意识到这不会在100%的时间内起作用-例如,它不会检测到一个数字8,尽管它会检测到一个椒盐卷饼。对不起,我不清楚……我试过了,但有时用户的触摸会与路径相交,然后需要关闭。我试着比较路径中的所有点,但是很多点之间的距离只有几个像素。谢谢你的回复。我一直在尝试,但在CGBitmapContext中的不同路径上使用CGContextFillPath/CgContextOfillPath时遇到了问题。我应该用白色还是黑色来填充它们?谢谢…我试过每像素碰撞检测,但它太敏感了。有时,锯齿状的对角线运动会触发“碰撞”。