具有已知端点的贝塞尔曲线拟合

Bezier curve fitting with known end points

我想将具有已知端点(p0 和 p3)的贝塞尔曲线拟合到嘈杂的二维数据。这似乎是一个比传统的 4 点贝塞尔曲线拟合更简单的问题,但对我来说还是太难弄明白了。

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

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

我偶然发现了 "M.Khan" 的一篇名为 "Approximation of data using cubic Bezier curve least square fitting" 的论文,其中描述了一种算法来计算我正在寻找的东西。

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

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