许多这些答案中缺少的是您可能不想为您的数据拟合单个三次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上!!!!不会让我在我的声望等级张贴图片)