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

fil*_*lip 5 bezier curve-fitting

我想将带有已知端点(p0和p3)的贝塞尔曲线拟合到嘈杂的2d数据。与传统的4点贝塞尔曲线拟合相比,这似乎是一个容易解决的问题,但对于我来说仍然太难了。

有人可以指出我现有的代码或算法来找到控制点p1和p2的最佳值吗?

贝塞尔曲线拟合

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

fil*_*lip 5

我偶然发现了一篇名为“使用三次贝塞尔曲线最小二乘拟合的数据近似”的论文,该论文描述了一种算法来计算我正在寻找的确切事物。

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

编辑:事实证明,您可以使用牛顿拉夫森来优化贝塞尔曲线的每个单独的 t 值。这样做之后,曲线拟合得很好,至少对于只有少数不自相交的点的曲线,但我必须做更多的测试。 贝塞尔 t 值的牛顿步优化

  • 我刚刚设法运行了第一个测试,它的效果比我预期的要好。请参阅 http://imgur.com/ii5DUQu 以使用 click+mousemove 进行快速测试。我将研究点减少算法,看看它是否有帮助。 (2认同)
  • 做了一些谷歌搜索并在这里找到它:http://freesourcecode.net/matlabprojects/68721/cubic-bezier-least-square-fitting-in-matlab。点击“下载源代码”,你会在一些matlab文件中找到pdf (2认同)