许多这些答案中缺少的是您可能不想为您的数据拟合单个三次Bézier曲线。更一般地,您想要将一系列三次贝塞尔曲线(即分段三次贝塞尔拟合)拟合到任意一组数据。

有一个很好的论文追溯到1995年,完成与MATLAB代码,这是否:

% Lane, Edward J. Fitting Data Using Piecewise G1 Cubic Bezier Curves.

% Thesis, NAVAL POSTGRADUATE SCHOOL MONTEREY CA, 1995

要使用此功能,你必须,至少,指定结点的数量,即优化程序将使用的数字数据点来使其适合。或者,您可以自己指定结点,这会提高拟合的可靠性。论文显示了一些非常艰难的例子。注意,Lane的方法保证了三次Bézier段之间的G1连续性(相邻切向量的方向相同),即平滑的关节。但是,曲率会有不连续性(二阶导数方向的变化)。

我重新实现了代码,将其更新到现代MATLAB(R2015b)。如果你愿意,请联系我。

下面是一个仅使用三个结点(通过代码自动选择)将一个立方贝塞尔曲线拟合到利萨如图的例子。

(StackOverflow上!!!!不会让我在我的声望等级张贴图片)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐