gpt4 book ai didi

objective-c - 从另一个 UIBezierPath 减去 UIBezierPath

转载 作者:可可西里 更新时间:2023-11-01 05:46:35 26 4
gpt4 key购买 nike

我正在制作一个应用程序,允许用户用手指在屏幕上绘制不同的颜色。图纸是用 UIBezierPaths 绘制的,但我需要橡皮擦。我确实有一个橡皮擦,它只是一条以背景图像为颜色的路径,但这种方法会导致内存问题。我想从选择橡皮擦时绘制的任何路径中删除点。

不幸的是,UIBezierPath 没有减法函数,所以我想自己做一个。因此,如果选择橡皮擦,它将查看所​​有应删除的点并查看是否有任何现有路径包含这些点,然后分割路径留下空白点。但它应该能够看到连续删除多少点而不是一次一个地删除。从理论上讲这是有道理的,但我在开始实现时遇到了麻烦。

任何人都可以指导我走上正确的“道路”吗?

最佳答案

乍一看,您似乎可以通过简单地使用 containsPoint: 在 UIBezierPath 上进行命中检测。如果你想确定该点是否包含在 UIBezierPath 的 fill 中,这很好用,但它不适用于确定是否只有 UIBezierPath 的 stroke 与观点。检测给定点是否在 UIBezierPath 的笔画中可以按照 this page 底部的“在路径上进行命中检测”部分中的描述来完成。 .实际上,他们提供的代码示例可以任意使用。基本思想是您必须使用 Core Graphics 方法 CGContextPathContainsPoint .

根据橡皮擦画笔的大小,您可能想要检查画笔圆边缘上的几个不同点,看它们是否与曲线相交,并且您可能必须遍历 UIBezierPaths 直到得到一击。您应该能够使用 UIBezierPath 的 bounds 优化搜索。

检测到点与 UIBezierPath 相交后,您必须对路径进行实际分割。 this post 中似乎对该算法有一个很好的概述。 .主要思想是使用 De Casteljau's algorithm执行曲线的分割。您应该可以通过快速搜索找到该算法的各种实现,包括一些 C++ 实现。

关于objective-c - 从另一个 UIBezierPath 减去 UIBezierPath,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11695168/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com