【问题标题】:Bezier curve fitting with known end points已知端点的贝塞尔曲线拟合
【发布时间】:2017-02-26 05:48:16
【问题描述】:

我想将具有已知端点(p0 和 p3)的贝塞尔曲线拟合到嘈杂的二维数据。与传统的 4 点贝塞尔曲线拟合相比,这似乎是一个更容易的问题,但我仍然难以弄清楚。

谁能指点我现有的代码或算法来找到控制点 p1 和 p2 的最佳值?

编辑:我试图用贝塞尔曲线拟合的点来自用鼠标绘制的曲线(想象一下用画笔在 Paint 中绘制的东西,可能有数百个记录点一长冲程)。锚点 p0 和 p3 是预先创建的,但要计算控制点 p1 和 p2,使贝塞尔曲线适合用鼠标勾勒出的曲线形状。

【问题讨论】:

    标签: curve-fitting bezier


    【解决方案1】:

    我偶然发现了一篇名为“M.Khan”的名为 "Approximation of data using cubic Bezier curve least square fitting" 的论文,该论文描述了一种计算我正在寻找的确切事物的算法。

    用 javascript 实现很容易。它工作得很好而且速度很快,但产生的贝塞尔曲线并不完美。可能是我的代码中的一个错误,但我怀疑可以通过迭代调整贝塞尔曲线上的匹配点来获得更好的曲线以更好地拟合数据

    编辑:事实证明,您可以使用 newton-raphson 来优化贝塞尔曲线的每个单独的 t 值。在这样做之后,曲线非常适合,至少对于只有几个不自相交的点的曲线,但我必须做更多的测试。

    【讨论】:

    • 为什么不直接使用 catmull-rom 样条曲线呢?仍然是一个三次多边形,但 通过 点,而不是“在它们周围”。
    • 这个想法是在一个依赖贝塞尔曲线的矢量绘图软件中使用它,因此样条在这种情况下不起作用。
    • 我刚刚成功运行了第一个测试,它比我预期的要好。请参阅imgur.com/ii5DUQu 以使用单击+鼠标移动进行快速测试。我将研究减分算法,看看是否有帮助。
    • @filip 当我尝试查看上面链接的“使用三次贝塞尔曲线最小二乘拟合的数据近似”pdf 时,我得到了 404。我有兴趣阅读更多关于它的信息。你有备用链接吗?
    • 做了一些谷歌搜索并在这里找到它:freesourcecode.net/matlabprojects/68721/…。点击“下载源代码”,你会在一些matlab文件中找到pdf
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2018-03-10
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多