2011-06-16 71 views
6

我正在研究一個涉及從定義的一組點(數萬個點)創建樣條的項目。創建連續樣條/在樣條之間平滑過渡

我首先爲前1000個點創建樣條,然後用箭頭(使用樣條線上的切線和當前點繪製)模擬該路徑上的「驅動」。當我接近路徑的末端時,我將採取下一個1000點並創建一個新的樣條線並繼續我的「駕駛」。

我遇到的問題是樣條曲線(上一個樣條曲線和當前樣條曲線)在最後不匹配。不匹配我的意思是他們沒有相同的切線(一階導數不匹配),並且前一個樣條曲線的最後一個點與新樣條曲線上的第一個點之間存在差異(這是因爲我沒有使用插值樣條曲線但光滑樣條曲線 - 參見下面的注1)。當切換到新創建的樣條曲線時,這使得我的箭頭在樣條曲線的末端「跳躍」。

NOTE1:我是不是使用插值樣條曲線。我正在使用平滑樣條線。有關更多詳細信息,請參閱herehere。這意味着作爲輸入的一組點可能不在結果樣條上(在我的情況下,它們非常接近樣條 - 但通常樣條上爲而不是)。

NOTE2:使用插值樣條函數是不成問題的,因爲用於計算樣條函數的數據中有很多噪聲。在我們的2GB RAM的3Ghz PC(我們的應用程序的目標平臺)上計算整組點的樣條需要很多時間(超過30秒)。所以這樣做也是不可能的。

在切換樣條曲線時,我很有興趣克服那種不需要的「跳躍」。

所以我的問題是:

  • 是否有這樣做的平穩「跳」 /過渡到新花一些方法/算法?
  • 我可以使用特殊類型的樣條線來做些什麼來克服這一點嗎? (這是我迄今爲止嘗試沒有相當大的改進)。

謝謝你的任何想法,

尤利安

回答

4

這是一個非常不成熟的建議,無可否認,但一個明顯的黑客將擬合點的重疊,而不是不同的子集,然後進行插補在重疊區域產生樣條。

例如,爲點1-1000生成平滑樣條。當您從1-900開始動畫時,從901-1900生成下一個樣條。對於901和1000之間的區域,使用兩個樣條線中對應位置的加權組合,其中901處的權重爲1:0,1000處的權重爲0:1。對於1801-1900等等,使用相同的位置。

我猜想一個簡單的線性插值就足夠了,邊距可能不需要很大,但是你可以根據經驗確定。

+0

+1這是一個有趣的方法;雖然它非常簡單,但它可能證明是有效的。我會試一試。在這種情況下,這意味着我將以兩個樣條結束,直到「切換」到下一個樣條。 – INS 2011-06-16 09:52:21

+0

由於使用樣條方程在數學水平上工作以實現我想要的可能非常困難,我可能最終會從一個樣條到另一個樣條平滑地進行平移。如果沒有其他答案會增加,這可能會被接受。 – INS 2011-06-16 11:43:18

+0

假設結矢量的相應部分合理排列,您也可以插入重疊部分的控制點以將重疊樣條組合成一個大樣條。它與逐點插值不同,除非實際上將樣條乘以轉換權重函數(並且這樣做會導致更高度的樣條曲線,您可能不想這樣做),但它非常接近並且可能會值得進行一些實驗,看看結果是否可以接受。 – mokus 2011-06-16 12:58:00