一、貝塞爾曲線的概念
對於兩點之間的連線,我們可以用直線進行連接效果如下:
其中的每一個F點都在AB連接的線段上
這就是一階貝塞爾曲線
如果我們加入一個控制點C,那麼做圖如下:
1、連接AC,BC
2、在AC,BC上找到 AD/AC = CE/CB 的點D,E
3、連接DE,在DE上尋找點F,F點需要滿足:EF/ ED = AD/AC = CE/CB
4、找出所有F點,連接而成的線,就是貝塞爾曲線
兩個線段根據等比關係找點的貝塞爾曲線,一般也稱爲二階貝塞爾曲線。
關於貝賽爾曲線的基本數學理論大概就是上面的內容。
除了二階貝塞爾曲線外還有三階,四階貝塞爾曲線,它們的控制點依次增加,我們常用的是三階貝塞爾曲線,有兩個控制點,控制點決定着生成完成後曲線的形狀。
三階貝塞爾曲線的繪製示意圖如下:
1、首先連接AC,AB,BD
2、找到EFG三點,滿足 AE/AC = BF/BA = DG/DB
3、連接EF.FG
4、找到J,I兩點,滿足 AE/AC = BF/BA = DG/DB = FJ/FE = GI/GF
5、連接JI兩點
6、找到H點,滿足AE/AC = BF/BA = DG/DB = FJ/FE = GI/GF = IH/IJ
7、F點從A移動到B,所計算出的H點連成的線,就是三階貝塞爾曲線
二、三階貝塞爾曲線控制點的計算方法
介紹完了什麼是貝塞爾曲線,現在來說遇到的問題:
現在已知有A,B.C.D,E,F,G,H點若干個,假如它們直線連接如下
可以看出,連接直線並不平滑,在連接點上會出現方向突變。
如果想要生成光滑曲線,需要進行控制點計算,計算出A,B,C,D,E,F,H各個帶你的控制點進行計算
每個位置要計算出左右兩個控制點L1,L2:
算法如下:
1、兩端的控制點位置爲自己本身,例如A點控制點位置L1=L2=A ,G點 L1=L2=G
2、中間控制點的位置由左右兩個點的位置決定,例如C點的控制點位置通過計算BCD連接而成的三角形決定
3、計算向量和 與三角形BCD的夾角 ,
4、計算垂直於三角形BCD所在平面的單位向量,計算方法爲的向量積,再歸一化
5、向量繞軸旋轉 ( - )/ 2 度 得到向量
6、向量繞軸旋轉 -( - )/ 2 度得到向量
7、將5,6計算結果乘以一個比例因子的到向量CL1 與CL2(的大小決定曲線的形狀,一般設置在0.5以下)
8、L1座標 = CL1 + C , L2座標 = CL2 + C
注:如果爲180度,那麼跳過4,5,6步的計算
三、代碼實現
暫無