% Lane, Edward J. Fitting Data Using Piecewise G1 Cubic Bezier Curves.
% Thesis, NAVAL POSTGRADUATE SCHOOL MONTEREY CA, 1995
http://www.dtic.mil/dtic/tr/fulltext/u2/a298091.pdf
要使用此功能,您必须至少指定节点数,即优化程序将用于拟合的数据点数。可选地,您可以指定节点本身,这将增加拟合的可靠性。论文展示了一些相当棘手的例子。请注意,Lane的方法保证了三次贝塞尔曲线段之间的G1连续性(相邻切向量的方向相同),即平滑接合处。但是,曲率中可能存在不连续性(二阶导数方向的变化)。我对这个问题有一个MATLAB解决方案。 我遇到了同样的问题,但我的代码是用MATLAB编写的。 我希望把它翻译成Python不会太难。
您可以通过这段代码FindBezierControlPointsND.m找到控制点。 由于某种原因,在其存档中没有函数“ChordLengthNormND”, 但在第45行调用了它。
我用以下代码替换了它:
[arclen,seglen] = arclength(p(:,1),p(:,2),'sp');
t = zeros(size(p,1),1);
sums = seglen(1);
for i = 2:size(p,1)-1
t(i) = sums / arclen;
sums = sums + seglen(i);
end
t(end) = 1;
arclength的MATLAB代码可以在这里获取。
之后,我们有了Bezier曲线的控制点,网上有很多实现通过控制点构建Bezier曲线的方法。