我有一个点列表,我想在它们之间画一条平滑的线。我正在使用RVG库进行绘图,所以如果我能从我的点中获得SVG字符串,我会很高兴。四处搜索,发现Catmull Rom可能是要使用的算法。
在Kamelopard和Rubyvis库中找到了一些实现,但从我的要点列表中无法理解如何使用它们。
所以,问题是,我如何获得(x,y)点的数组,并从中获得Catmull-Rom插值的SVG曲线?
Catmull Rom可能是一个很好的起点。我最近重新实现了Kamelopard版本,发现这很有帮助:http://www.cs.cmu.edu/~462个项目/assn2/assn2/catmullRom.pdf
只要你了解矩阵乘法,它就相当简单。你最终会得到一个矩阵方程,你需要评估很多次,在你绘制的路径上的每个点一次。如果你有控制点A、B、C和D,并且你想绘制B和C之间的曲线,那么制作一个矩阵,其中A、B,C和D是行,并将其插入我链接的论文顶部的方程中。这将是列表中的最后一个矩阵。您需要知道的其他值是"u"(范围从0到1)和"T"(样条曲线的"张力")。您将对方程进行多次求值,每次在其域中递增u。可以将张力设置为0到1之间的任意值,这将影响样条曲线的锐度。0.5是一个常用值。
例如,如果你试图评估列表上前两个控制点或后两个控制点将之间的曲线,你会发现你在制作矩阵时遇到了问题,因为你需要评估点两侧的两个控制点通过。在这些情况下,只需根据需要复制第一个或最后一个控制点。