use*_*684 27 python algorithm bezier curve-fitting
我有一组数据点(我可以精简)我需要适应Bézier曲线.我需要速度超过准确性,但合身应该足够好,以便可识别.我也正在寻找一种我可以使用的算法,它没有充分利用库(特别是NumPy).
我已经阅读了几篇研究论文,但没有足够的细节可以完全实现.有没有开源示例?
Arc*_*ald 17
我有类似的问题,我从Graphics Gems(1990)找到了关于Bezier曲线拟合的"自动拟合数字化曲线的算法".除此之外,我找到了该文章的源代码.
不幸的是,它是用C编写的,我不太清楚.此外,该算法很难理解(至少对我而言).我试图将其转换为C#代码.如果我会成功,我会尝试分享.
文件GGVecLib.c夹在同一文件夹中,FitCurves.c包含基本矢量操作功能.
我找到了类似的Stack Overflow问题,平滑了手绘曲线.批准的答案提供了来自Graphic Gems的曲线拟合算法的C#代码.
Bio*_*oat 10
许多这些答案中缺少的是您可能不希望将单个Bézier曲线拟合到您的数据中.更一般地说,您希望将一系列三次Bézier曲线(即,分段三次Bézier拟合)拟合到任意数据集.
有一篇很好的论文,可以追溯到1995年,完成MATLAB代码,这样做:
% Lane, Edward J. Fitting Data Using Piecewise G1 Cubic Bezier Curves.
% Thesis, NAVAL POSTGRADUATE SCHOOL MONTEREY CA, 1995
Run Code Online (Sandbox Code Playgroud)
http://www.dtic.mil/dtic/tr/fulltext/u2/a298091.pdf
要使用此功能,您必须至少指定结点的数量,即优化例程将使用的数据点数.您可以选择自己指定结点,这样可以提高拟合的可靠性.论文展示了一些相当棘手的例子.注意,Lane的方法保证了立方Bézier段之间的G1连续性(相邻切向量的方向相同),即平滑关节.然而,曲率可能存在不连续性(二阶导数方向的变化).
我重新实现了代码,将其更新为现代MATLAB(R2015b).如果您愿意,请与我联系.
这是一个使用三个结点(由代码自动选择)的示例,将两个立方贝塞尔曲线拟合到一个利萨如图.