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