貝賽爾曲線的拆分演算法

2021-04-16 15:34:09 字數 1716 閱讀 3425

貝賽爾曲線的拆分是指將貝賽爾曲線分解成逼近的多邊形。可以用來判斷貝賽爾曲線的選中,以及顯示貝賽爾曲線的旋轉效果等。

貝賽爾曲線簡單介紹:

貝賽爾曲線的每乙個頂點都有兩個控制點,用於控制在該頂點兩側的曲線的弧度。所以本函式的頂點陣列的記錄方式是:控制點+頂點+控制點+控制點+頂點+控制點+

……。所以兩個頂點之間的曲線是由兩個頂點以及兩個頂點之間的控制點來決定的。

===主函式

polybeziertopolys

===【主要型別申明】

typedef carray

cptarray;//

點動態陣列型別

【引數說明】

bezierpts[in]---

貝賽爾曲線頂點和控制點陣列

bclose[in]------

是否封閉的貝賽爾曲線

polypt[out]-----

拆分後的多邊形點陣列

precision[in]---

拆分精度

bool polybeziertopolys(cptarray &bezierpts,

bool bclose,cptarray &polypt,int precision)

//如果是封閉曲線,那麼需要將最後乙個頂點和第乙個頂點以及最後乙個控制點以及第乙個控制點組成一組進行拆分

if(bclose)

count = polypt.getsize();

i=0;

//過濾相鄰的值相等的點(由於精度和誤差,可能會有一些座標值相同的相鄰拆分點)

while(i

if(polypt[i] ==polypt[i+1])

i++;

}return true;}//

拆分貝賽爾曲線

bool incisebezier(cpoint *psrcpt, cpoint *pdstpt)

for(i=0;i<2;i++)

buffer[2][0] = buffer[1][0] + buffer[1][1];

buffer[2][0].x /=2;

buffer[2][0].y /=2;

pdstpt[0]=psrcpt[0];

pdstpt[1]=buffer[0][0];

pdstpt[2]=buffer[1][0];

pdstpt[3]=buffer[2][0];

pdstpt[4]=buffer[1][1];

pdstpt[5]=buffer[0][2];

pdstpt[6]=psrcpt[3];

return true;}//

拆分一組貝賽爾曲線段

bool beziertopoly(cpoint *psrcpts,cptarray &polypt,int precision)

}if(bexit)

break;

}count = polypt.getsize();

i=0;

while(i

if(polypt[i] ==polypt[i+1])

i++;

}return true;}//

計算貝賽爾曲線兩個頂點的縱向和橫向的最大距離

int getbeziergap(cpoint *p)

return gap;}//

判斷是否可以終止更精細得拆分

bool endbeziercut(cpoint *ptbezier, int nextent)

貝賽爾曲線的拆分演算法

貝賽爾曲線的拆分是指將貝賽爾曲線分解成逼近的多邊形。可以用來判斷貝賽爾曲線的選中,以及顯示貝賽爾曲線的旋轉效果等。貝賽爾曲線簡單介紹 貝賽爾曲線的每乙個頂點都有兩個控制點,用於控制在該頂點兩側的曲線的弧度。所以本函式的頂點陣列的記錄方式是 控制點 頂點 控制點 控制點 頂點 控制點 所以兩個頂點之間...

貝賽爾曲線

貝塞爾曲線又稱貝茲曲線或貝濟埃曲線,一般的向量圖形軟體通過它來精確畫出曲線,貝茲曲線由線段與節點組成,節點是可拖動的支點,線段像可伸縮的皮筋,我們在繪圖工具上看到的鋼筆工具就是來做這種向量曲線的。當然在一些比較成熟的點陣圖軟體中也有貝塞爾曲線工具,如photoshop等。在flash4中還沒有完整的...

CSS3 貝賽爾曲線

在了解cubic bezier之前,你需要對 css3 中的動畫效果有所認識,它是animation timing function和transition timing function中乙個重要的內容。cubic bezier又稱三次貝塞爾,主要是為animation生成速度曲線的函式,規定是cu...