2012-07-15 131 views
1

假設我有許多點,每個點都由二維笛卡爾座標系中的X和Y座標定義。每個點的X座標都大於前一個點的X座標,所以不能有任何循環。如何在二維空間中的點之間平滑插值?

如何通過這些要點畫出一條平滑線?結果應該看起來像正弦波,但幅度和波長都不相同。只要它允許我計算插值點的Y座標而不使用任何線性或樣條函數庫函數,它就是簡化或近似的。語言並不重要,我對算法感興趣,而不是實現。爲了充分披露,我打算用JavaScript來實現它。

我想遠離複雜的數學,比如Bézier樣條曲線或者帶有控制點的東西。我覺得必須有一個簡單的解決方案,可能與距離點或類似的東西有關。

任何想法是讚賞。

回答

0

聽起來像你需要一個插值多項式。有很多方法可以適應它。嘗試閱讀本

http://en.wikipedia.org/wiki/Polynomial_interpolation#Constructing_the_interpolation_polynomial

如果你有大量的點,那麼你可以考慮想用一種近似代替,否則你可能會過度擬合和點之間的數據的代表性差受到影響。在這種情況下,您可以使用最小二乘多項式近似。這取決於你需要的準確程度。

http://en.wikipedia.org/wiki/Least_squares#Linear_least_squares

特別是,如果你的數據是正弦曲線,您可以使用trignometric基函數(不同的整數頻率的正弦或餘弦函數),而不是x的常規權力實際上近似數據。

或者,你可以插在不涉及控制點

http://en.wikipedia.org/wiki/Spline_interpolation

使用花鍵將阻止你獲得潛在的野生振盪,你可以得到使用基本高階多項式內插的非參數方法使用樣條。

與所有的近似問題一樣,很難在沒有看到數據(及其數量)的情況下給出確定的答案。最終,如果你有大量的數據,基本的多項式插值不是你的朋友,就好像你有1000個插入點一樣,你需要一個999度的多項式。

0

你不能避免這裏的「複雜」數學。這並不複雜。

立方樣條是解決您的問題的好方法。對於類似的任務,我發現this論文有簡短的解釋和我用於計算的矩陣。

您可以嘗試使用近似方法。 「最小二乘」及其修改是最簡單和易於實現的之一。