2012-09-29 27 views
0

我有一列要繪製平滑線的點。我正在使用RVG庫進行繪圖,所以如果我能從我的觀點獲得SVG字符串,我會很高興。搜索並發現Catmull-Rom可能是使用的算法。Ruby中的Catmull-Rom插值

在Kamelopard和Rubyvis庫中發現了一些實現,但無法理解如何從我的列表中使用它們。所以,問題是,我怎樣才能取得我的(x,y)點數組,並從它們中獲得一個Catmull-Rom插值SVG曲線?

+1

Catmull-Rom本身很容易出現循環和其他工件。更好的實現是在這裏詳細討論的向心參數化版本:http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/19283471#19283471 – Ted

回答

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是一個常見值。

如果您試圖評估列表中前兩個控制點或最後兩個控制點之間的曲線,則會發現製作矩陣時出現問題,因爲您需要兩個控制點在你評估的觀點的任何一邊。在這些情況下,根據需要複製第一個或最後一個控制點。