VC實現貝塞爾曲線繪制_第1頁
VC實現貝塞爾曲線繪制_第2頁
VC實現貝塞爾曲線繪制_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、VC實現貝塞爾曲線繪制    核心提示:摘要:本文主要通過對Bezier曲線的幾何圖形的進一步理解,探討其具體的控制方法,結合具體繪制實際分析理論描述對控制點計算理解的偏差,統一了認識;結合曲線繪制函數PolyBezier()具體的要求,實現VC環境下簡單的曲線繪制方法研究。 關鍵詞:貝塞爾曲線;PolyBezier;曲線連續性 .             摘要:本文主要通過對Bezier曲線的幾何圖形的進一步理解,探討其具體的控制方法

2、,結合具體繪制實際分析理論描述對控制點計算理解的偏差,統一了認識;結合曲線繪制函數PolyBezier()具體的要求,實現VC環境下簡單的曲線繪制方法研究。 關鍵詞:貝塞爾曲線;PolyBezier;曲線連續性 1貝塞爾曲線描述 貝賽爾曲線的每一個頂點都有兩個控制點,用于控制在該頂點兩側的曲線的弧度。所以本函數的頂點數組的記錄方式是:控制點頂點控制點控制點頂點控制點。所以兩個頂點之間的曲線是由兩個頂點以及兩個頂點之間的控制點來決定的。一條貝塞爾樣條由4個定義點定義:兩個端點和兩個控制點。 2曲線的繪制方法 2.1PolyBezier函數 PolyBezier函數用于畫貝賽爾樣條曲線,原型:BO

3、OL PolyBezier(HDC,hdc,CONST POINT *lppt,DWORD cPoints);參數:hdc:指定的設備環境句柄。Lppt:POINT結構數組的指針,包括了樣條端點和控制點的坐標、其順序是起點的坐標、起點的控制點的坐標、終點的控制點的坐標和終點的坐標。cPoints:指明數組中的點的個數。本文中繪制曲線主要用到這個函數。 2.2一階連續性 圖1所示為一段Bezier曲線經過p0、p1兩個端點,要繪制經過它們的曲線需要再確定k1、K2兩個控制點,這條曲線最終是由p0、k1、k2、p1四個點決定。圖2為經過p0、p1(p2)、p3的一段連續曲線,可以看出,它是由p0-

4、p1及p2-p3兩段曲線組成,連續的貝塞爾曲線會把前一個終止點當作起始點:即p1=p2。 要繪制如圖2所示曲線,關鍵在于確定k0、k1、k2、k3四個控制點方法,一般是根據兩段曲線連續(即一階連續性:兩個相鄰曲線段在交點處有相同的一階導數)條件來得出。總的來說,就是k0p0 連線即為曲線在p0處切線,k1p1連線為p1處切線,k24p2為p2處切線,k3p3為p3處切線,兩段曲線連續必然要求k1p1與k2p2在一條線上。端點處可令其倒數為0,即可算得控制點。如此在cPoints結構中會順序存儲p0,k0,k1,p1 (p2),k2,k3,p3七個點,調用PolyBezier函數完成繪制曲線。

5、上面簡單描述了包含在貝塞爾多邊形內的貝塞爾曲線的控制點的推算。接下來我們以繪制經過固定點形成的多邊形基礎上理解經過其頂點的相似曲線(多邊形的外接曲線)。根據貝塞爾曲線的定義及控制方法,多邊形的頂點即為曲線的端點,關鍵還是如何理解控制點位置的確定和計算方法,使其既滿足曲線的繪制需求又能較好的切合多邊形的外沿(圖4)。 Bezier曲線 Bezier曲線 圖3所示為用鼠標選取p0,p1,p2三個點,通過上面的方法繪制的Bezier曲線。比較圖2和圖3,都是繪制經過p0、p1、p2三個點的曲線,圖3相比圖2少2個控制點,實際上是一樣的,起點控制點和終點控制點都和各自的起始端點是重合一致的。如此在cP

6、oints 結構中會順序存儲p0,p0,k01,p1,k1,p2,p2七個點,把這幾個點連接起來就是這條曲線的貝塞爾多邊形,代入PolyBezier函數也就滿足了畫Bezier曲線的條件。 3程序關鍵代碼 程序中定義了一個函數qulv()用來求得控制點,針對圖3主要是求得兩個控制點k0,k1,爾后得到順序存儲p0,k0,k01,p1,k1,k12,p2的cPoints結構;繪制出相應的曲線。如果是針對如圖4具有更多端點的圖形依此方法重新計算更新lppt結構數據。 void CShape:qulv(int xx1, int xx2, int xx3, int yy1, int yy2, int

7、yy3) /根據曲線一階連續性條件 /輸入三個已知經過的點的橫、縱坐標;輸出兩個控制點的坐標(xz,yz),(xy,yy) double d12=0.0, d23=0, s=0, w=0, k=0; d12=0.25*sqrt(xx2-xx1)*(xx2-xx1)+(yy2- y1)*(yy2-yy1); d23=0.25*sqrt(xx3-xx2)*(xx3-xx2)+(yy3-yy2)*(yy3-yy2); if(xx3>xx1) s=1;else s=-1; if(yy3>yy1) w=1; else w=-1; if(xx3=xx1) xz=xx2;yz=yy2-w * d

8、12; xy=xx2;yy=yy2+w * d23; else k=(yy3-yy1)/(xx3-xx1); xz= float(xx2)-s*(d12/sqrt(1+k*k); yz=float(yy2)-s*(k*d12/sqrt(1+k*k); xy=float(xx2)+s*(d23/sqrt(1+k*k); yy=float(yy2)+s*(k*d23/sqrt(1+k*k); 4總結 Bezier 曲線是計算機圖形學中最基本、最重要的內容。在實際應用中, 可以進一步研究曲線的拼接方法、連續性、擬合等,比較它與其它B樣條曲線、雙曲線等的區別,進一步發掘它的實用價值并推廣到曲面的繪制、拼接研究。 參考文獻: 1 施法中.計算機輔助幾何設計與非均勻有理B 樣條M.北京:北京航空大學出版社,1994. 2 嚴蘭蘭,宋來忠,李軍成.有理Bezier曲線的拼接J.三峽大學學報

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論