1. 程式人生 > >貝塞爾曲線擬合

貝塞爾曲線擬合

貝塞爾曲線擬合

最近寫論文,需要對資料點進行一個擬合,想起以前圖形學學的貝塞爾曲線,便整理了一下。

簡介(摘自百科)

貝塞爾曲線(Bézier curve),又稱貝茲曲線或貝濟埃曲線,是應用於二維圖形應用程式的數學曲線。一般的向量圖形軟體通過它來精確畫出曲線,貝茲曲線由線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種向量曲線的。
貝塞爾曲線於1962,由法國工程師皮埃爾·貝塞爾(Pierre Bézier)所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由Paul de Casteljau於1959年運用de Casteljau演演算法開發,以穩定數值的方法求出貝茲曲線。

公式

線性公式

給定點P0、P1,線性貝茲曲線只是一條兩點之間的直線。說白了,就是給一個t取0到1之間的值,對其進行插值,比如取t=0.3,P0(0,0),P1(1,0)這時候插值點的座標是什麼呢,顯然是Pt(0.3,0),好,現在分別取t=0.1,0.2,…,0.9,那麼我們就可以得到P0,P1之間的10個插值點,將插值點連起來,就是一條線,顯然,t分的值越小,連起來的曲線越光滑,這條線由下式給出:
一階公式
且其等同於線性插值。

二次方公式

二次方貝茲曲線的路徑由給定點P0、P1、P2,其中P0,P2是資料點,也就是起點和終點,而P1是控制點,二次就不像一次那樣直接線性插值就可以了,但是二次是怎麼做的呢?
同樣,取一個t值,在P0,P1上,用一次方的方法,得到一個點Pt1,在P1,P2上得到一個點Pt2。Pt1和Pt2之間,還是用t得到最終的Pt點,這就是二次方法,其公式如下:
二次公式

TrueType字型就運用了以貝茲樣條組成的二次貝茲曲線。

三次方公式

P0、P1、P2、P3四個點在平面或在三維空間中定義了三次方貝茲曲線。其中取點的方式同樣,只是多幾次迭代而已,曲線起始於P0走向P1,並從P2的方向來到P3。一般不會經過P1或P2;這兩個點只是在那裡提供方向資訊。P0和P1之間的間距,決定了曲線在轉而趨進P3之前,走向P2方向的“長度有多長”。
曲線的引數形式為:
三次公式
現代的成象系統,如PostScript、Asymptote和Metafont,運用了以貝茲樣條組成的三次貝茲曲線,用來描繪曲線輪廓。