資源描述:
《vc實現(xiàn)貝塞爾曲線繪制》由會員上傳分享,免費在線閱讀,更多相關內容在學術論文-天天文庫。
1、VC實現(xiàn)貝塞爾曲線繪制:本文主要通過對Bezier曲線的幾何圖形的進一步理解,探討其具體的控制方法,結合具體繪制實際分析理論描述對控制點計算理解的偏差,統(tǒng)一了認識;結合曲線繪制函數(shù)PolyBezier()具體的要求,實現(xiàn)VC環(huán)境下簡單的曲線繪制方法研究?! £P鍵詞:貝塞爾曲線;PolyBezier;曲線連續(xù)性 1貝塞爾曲線描述 貝賽爾曲線的每一個頂點都有兩個控制點,用于控制在該頂點兩側的曲線的弧度。所以本函數(shù)的頂點數(shù)組的記錄方式是:控制點+頂點+控制點+控制點+頂點+控制點+……。所以兩個頂點之間的曲線是由兩個頂點以及兩個頂點之間的控制點來決定的。一條貝塞爾樣條由
2、4個定義點定義:兩個端點和兩個控制點?! ?曲線的繪制方法 2.1PolyBezier函數(shù) PolyBezier函數(shù)用于畫貝賽爾樣條曲線,原型:BOOLPolyBezier(HDC,hdc,CONSTPOINT*lppt,DWORDcPoints);參數(shù):hdc:指定的設備環(huán)境句柄。Lppt:POINT結構數(shù)組的指針,包括了樣條端點和控制點的坐標、其順序是起點的坐標、起點的控制點的坐標、終點的控制點的坐標和終點的坐標。cPoints:指明數(shù)組中的點的個數(shù)。本文中繪制曲線主要用到這個函數(shù)。 2.2一階連續(xù)性 圖1所示為一段Bezier曲線經過p0、p1兩個端點,要繪
3、制經過它們的曲線需要再確定k1、K2兩個控制點,這條曲線最終是由p0、k1、k2、p1四個點決定。圖2為經過p0、p1(p2)、p3的一段連續(xù)曲線,可以看出,它是由p0-p1及p2-p3兩段曲線組成,連續(xù)的貝塞爾曲線會把前一個終止點當作起始點:即p1=p2。 要繪制如圖2所示曲線,關鍵在于確定k0、k1、k2、k3四個控制點方法,一般是根據(jù)兩段曲線連續(xù)(即一階連續(xù)性:兩個相鄰曲線段在交點處有相同的一階導數(shù))條件來得出??偟膩碚f,就是k0p0連線即為曲線在p0處切線,k1p1連線為p1處切線,k24p2為p2處切線,k3p3為p3處切線,兩段曲線連續(xù)必然要求k1p1與k2
4、p2在一條線上。端點處可令其倒數(shù)為0,即可算得控制點。如此在cPoints結構中會順序存儲p0,k0,k1,p1(p2),k2,k3,p3七個點,調用PolyBezier函數(shù)完成繪制曲線?! ∩厦婧唵蚊枋隽税谪惾麪柖噙呅蝺鹊呢惾麪柷€的控制點的推算。接下來我們以繪制經過固定點形成的多邊形基礎上理解經過其頂點的相似曲線(多邊形的外接曲線)。根據(jù)貝塞爾曲線的定義及控制方法,多邊形的頂點即為曲線的端點,關鍵還是如何理解控制點位置的確定和計算方法,使其既滿足曲線的繪制需求又能較好的切合多邊形的外沿(圖4)?! ezier曲線Bezier曲線 圖3所示為用鼠標選取p0,p1
5、,p2三個點,通過上面的方法繪制的Bezier曲線。比較圖2和圖3,都是繪制經過p0、p1、p2三個點的曲線,圖3相比圖2少2個控制點,實際上是一樣的,起點控制點和終點控制點都和各自的起始端點是重合一致的。如此在cPoints結構中會順序存儲p0,p0,k01,p1,k1,p2,p2七個點,把這幾個點連接起來就是這條曲線的貝塞爾多邊形,代入PolyBezier函數(shù)也就滿足了畫Bezier曲線的條件?! ?程序關鍵代碼 程序中定義了一個函數(shù)qulv()用來求得控制點,針對圖3主要是求得兩個控制點k0,k1,爾后得到順序存儲p0,k0,k01,p1,k1,k12,p2的cP
6、oints結構;繪制出相應的曲線。如果是針對如圖4具有更多端點的圖形依此方法重新計算更新lppt結構數(shù)據(jù)。 voidCShape::qulv(intxx1,intxx2,intxx3,intyy1,intyy2,intyy3) {//根據(jù)曲線一階連續(xù)性條件 //輸入三個已知經過的點的橫、縱坐標;輸出兩個控制點的坐標(xz,yz),(xy,yy) doubled12=0.0,d23=0,s=0,].北京:北京航空大學出版社,1994. [2]嚴蘭蘭,宋來忠,李軍成.有理Bezier曲線的拼接[J].三峽大學學報(自然科學版),2005,27(5):469-471.
7、 注:“本文中所涉及到的圖表、公式、注解等請以PDF格式閱讀”