gpt4 book ai didi

iphone - 如何分割UIBezierPath并将其存储在两个不同的对象中

转载 作者:行者123 更新时间:2023-12-03 18:40:14 25 4
gpt4 key购买 nike

我的应用程序中有 UIBezierPath。当识别到路径上的手指触摸时,我想分割该曲线并将这两条曲线存储到两个不同的对象中。因此,触摸坐标将作为一条曲线的终点和第二条曲线的起点。

如果我再次触摸该曲线中的任何一条,该曲线将分割为另外两条曲线,依此类推。

我搜索了很多这个。但没找到什么好的解决办法。

此外,我不知道是否还有其他方法可以做到这一点。任何帮助将不胜感激。谢谢

最佳答案

您可以使用de Casteljau算法来做到这一点。如果您真的对数学感兴趣 check out the Wikipedia page here ,但如果你对数学不太感兴趣,它可能会让你更加困惑,因为它实际上很简单......

  1. 计算沿触摸曲线(0.0 到 1.0 之间)的参数化值。为此,您可以定期计算一组点(0.1、0.2、0.3 等),然后找到距离触摸点最近的两个点,如果您想要更高的精度(0.21、0.22、 0.23 等)。这将导致沿着代表您触摸位置的曲线段出现一个介于 0.0 和 1.0 之间的数字。
  2. 这一点很难用文字解释,但 this page 上有很好的可视化。大约在标题分割贝塞尔曲线的中间位置。使用图表下方的 slider 查看其工作原理,这是我的文字解释:您需要按照与步骤 1 中计算的参数化值成比例的方式分割曲线段控制点之间的直线。因此,如果您计算出 0.4,则有四个点(A、B、C、D)加上曲线上最接近您触摸的分割点(沿曲线 0.4 处),我们将此分割点称为 S:
    • 计算沿 B→C 线的临时点 T,其值为 0.4
    • 令 A1 点等于 A 点
    • 计算点 B1,即沿线 A→B 的 0.4
    • 计算点C1,沿线B1→T为0.4
    • 令 D1 点等于分割点 S
    • 令 D2 点等于 D 点
    • 计算点C2,沿线C→D为0.4
    • 计算点 B2,沿线 T→C2 为 0.4
    • 令 A2 点等于分割点 S

现在您有两条新的贝塞尔曲线,第一条使用控制点 A1、B1、C1、D1,第二条使用 A2、B2、C2、D2。

关于iphone - 如何分割UIBezierPath并将其存储在两个不同的对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8557910/

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