兩年前調試全向輪底盤的時候,曾經用到過貝塞爾曲線做路徑規劃。今天同學突然問起這個東西,回查了一下當時的代碼,覺得有必要寫個博客備忘一下。 在數學的數值分析領域中,貝塞爾曲線是計算機圖形學中相當重要的參數曲線。更高維度的廣泛化貝濟埃曲線就稱作貝濟埃曲面,其中貝濟埃三角是一種特殊的實例。 貝塞爾曲線于1962年,由法國工程師皮埃爾·貝濟埃(Pierre Bézier)所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由Paul de Casteljau于1959年運用de Casteljau算法開發,以穩定數值的方法求出貝塞爾曲線。 接下來簡單介紹貝塞爾曲線的繪制方法。如下圖,假設給定了控制點P0,P1,P2。這里我們需要做輔助點Q0和Q1,使得: P0Q0:P0P1=P1Q1:P1P2=t,這里0≤t≤1。現在,我們可以簡單理解為三個控制點P0,P1,P2 “降維” 成了兩個控制點Q0,Q1。按照同樣的方法,再取輔助點B使得Q0B:Q0Q1=t,這里的 t 和上次 "降維"時的 t 是相等的。現在,我們已經降維成了只有一個點,那么這個點B就是該貝塞爾曲線中的一點。 推廣一下,我們考慮多個控制點的情景。對于4、5、6。。。n個控制點,首先選定一個比例 t ,以此按比例降維直到只有一個點,這個點就是比例 t 時貝塞爾曲線上的點。當把 t 從0到1按照一定比例依次選取時,就能繪制出一個貝塞爾曲線。 六個控制點的情形: 根據之前的描述,繪制貝塞爾曲線的過程可以用如下公式表述: 式中,j是降了多少次維,i是第i個控制點。由于每降維一次,控制點就減少一個,所以i的取值范圍是(0,n-j)。 C#程序如下:
效果: |
|