gpt4 book ai didi

iphone - Objective C 贝塞尔曲线 reshape

转载 作者:可可西里 更新时间:2023-11-01 04:22:58 28 4
gpt4 key购买 nike

我希望能够通过触摸并拖动它来重新定位和 reshape 在 Core Graphics 中绘制的三次贝塞尔曲线。我可以绘制基本形状,我可以使用触摸和拖动来移动整个形状,但这不是我想要的。

我想要的是能够移动和 reshape 贝塞尔曲线,就好像它是一根放在 table 上的绳子,被我的手指拉来拉去。即触摸贝塞尔曲线的一部分并将其拉向一个方向以改变整体曲线的形状。

有人知道怎么做吗?非常欢迎任何帮助。

提前致谢

最佳答案

绘制控制点并允许用户四处拖动它们相当容易。遗憾的是,曲线并未通过所有控制点,因此体验与您的建议不太相符。

要执行您的建议,您首先需要回答“用户是否触及曲线?”这个问题。这与“是曲线一定距离内的给定点”的问题相同。这不是一个微不足道的问题,但它是可以计算的。可能最简单的方法是只计算沿曲线的 X 点(其中 X 足够高以提供合理的精度),并检查每个点的距离。原则上,您也可以对距离方程求导并求解它的零点,但这需要迭代。根据我的经验,您可以足够快地计算出所需的 1000 个左右的距离(即使在 iPad 1 上),因此可能不值得额外的复杂性。

一旦您发现用户实际上正在触摸曲线,就很容易找出哪个控制点最近。此时最困难的事情是决定如何处理它。一些选项:

  • 在用户移动的方向上移动最近的控制点。您可能需要进行多次计算,直到找到一条通过触摸点的新曲线。这是最简单的方法,可能也是我要开始的地方。
  • 您可以在触摸点分割曲线并移动新创建的端点。 (请参阅 De Casteljau's 算法。)除非您调整其他控制点以创建匹配的斜坡,否则这将倾向于创建尖角。这允许更多的任意曲线,但可能很难知道用户真正想要什么。您几乎肯定还需要申请 Ramer-Douglas-Peucker以防止曲线数量激增。

我目前对 Objective-C 中的贝塞尔曲线问题很感兴趣。你可能对我的first post on the subject感兴趣.我在这方面的初步工作可在 GitHub 上找到。在iOS:PTL示例代码。希望这周我能再发一篇文章。您的特定问题很有趣,所以我可能会看到我可以围绕它构建什么。

关于iphone - Objective C 贝塞尔曲线 reshape ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9263235/

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