圖形旋轉(zhuǎn)和歪斜的橢圓

圖形旋轉(zhuǎn)和歪斜的橢圓

ID:13589350

大小:22.42 KB

頁數(shù):5頁

時間:2018-07-23

圖形旋轉(zhuǎn)和歪斜的橢圓_第1頁
圖形旋轉(zhuǎn)和歪斜的橢圓_第2頁
圖形旋轉(zhuǎn)和歪斜的橢圓_第3頁
圖形旋轉(zhuǎn)和歪斜的橢圓_第4頁
圖形旋轉(zhuǎn)和歪斜的橢圓_第5頁
資源描述:

《圖形旋轉(zhuǎn)和歪斜的橢圓》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、圖形旋轉(zhuǎn)和歪斜的橢圓介紹窗口中的矩形,帶圓角的矩形和橢圓只能由GDI在軸向上繪制。假如有人希望在WindowsNT下繪制旋轉(zhuǎn)或歪斜的圖形,他可以使用世界坐標(biāo)系變換。很不幸的是在Windows95/98下,是沒有世界坐標(biāo)系變換的。作為一個跨平臺的解決方案,就需要自己做更多的工作。矩形能由四邊形模擬,這樣它就能旋轉(zhuǎn)和歪斜了。然而,橢圓又該怎么辦呢?基本上有三個選擇兩種選擇使用一個定制的函數(shù)來畫橢圓。橢圓的數(shù)學(xué)模型相對簡單,而且還有用于在標(biāo)準(zhǔn)文本中旋轉(zhuǎn)橢圓的修改過的Bresenham方程。然而,這種方法必須自己執(zhí)行光柵操作,這樣在繪制寬線時就變得復(fù)雜了。這種努力只有在向一個脫離屏幕的表面(比如Dir

2、ectDraw)或位圖上繪制視才是值得的用連接的線段來繪制橢圓。實際的線條可以通過LineTo(...)或Polyline(...)圖形設(shè)備接口調(diào)用。你可以自己完成橢圓的近似,或者使用GDI的FlattenPath(...)函數(shù)使用貝塞爾曲線來近似繪制橢圓。這里就舉例說明這種方法。用貝塞爾曲線繪制橢圓使用四條貝塞爾曲線,每條代表原軸向橢圓的90度,這樣就能獲得一個相當(dāng)近似的橢圓,最大誤差只有0.027%。這個最大誤差相當(dāng)于長徑3700的橢圓的誤差小于一個像素,這已經(jīng)超出我們所要求的準(zhǔn)確度了。優(yōu)點簡單。只需要有四個GDI調(diào)用。貝塞爾曲線控制點的計算代價是很小的。快速你可以利用現(xiàn)在新的顯卡對曲線繪

3、制的硬件支持。在我的系統(tǒng)上,這和調(diào)用GDI函數(shù)Ellipse(...)繪制橢圓的速度比,如果不是更快,至少也是一樣快。變化因為貝塞爾曲線在旋轉(zhuǎn)、縮放和平移時是不變的,在對橢圓做同樣的變化時就只需要傳送控制點。更巧的是,因為在一個三次貝塞爾曲線上的每個點都是控制點的重心組合,在仿射映射中曲線上控制點之間的關(guān)系是不變的。設(shè)備無關(guān)性假如想自己把橢圓轉(zhuǎn)化為線段或光柵,那么每次表面的分辨率和設(shè)備描述表改變時(例如向一個打印機(jī)設(shè)備描述表繪制時),就必須重新光柵化。而使用貝塞爾曲線時就不需要這樣做。還有一個好處就是橢圓能通過圖元文件輸出到繪畫程序,例如CORELDRAW,在其中可以沒有失真的縮放圖形。過程首

4、先以一個軸向橢圓的外接邊界矩形開始(使用一個普通的GDI調(diào)用)。13個定義4條組成橢圓的貝塞爾曲線的控制點(以下標(biāo)為0-12)可使用一個經(jīng)驗常量計算得出。下列代碼為Y軸正方向向下的的映射模式產(chǎn)生控制點(例如MM_TEXT)。在Y軸正方向向上時,只要如注釋中所示,把偏移量設(shè)為負(fù)值就行了。//Createpointstosimulateellipseusingbeziers//使用貝塞爾曲線創(chuàng)建點,模擬橢圓voidEllipseToBezier(CRect&r,CPoint*cCtlPt){//MAGICALCONSTANTtomapellipsetobeziers//2/3*(sqrt(2)-1

5、)//把橢圓映射為貝塞爾曲線的常量2/3*(sqrt(2)-1)constdoubleEToBConst=0.2761423749154;CSizeoffset((int)(r.Width()*EToBConst),(int)(r.Height()*EToBConst));//Usethefollowinglineinsteadformappingsystemswhere+veYisupwards//在Y軸正方向向上時,使用下面一行//CSizeoffset((int)(r.Width()*EToBConst),-(int)(r.Height()*EToBConst));CPointcentr

6、e((r.left+r.right)/2,(r.top+r.bottom)/2);cCtlPt[0].x=//------------------------/cCtlPt[1].x=///cCtlPt[11].x=//2___3___4/cCtlPt[12].x=r.left;//15/cCtlPt[5].x=//

7、

8、/cCtlPt[6].x=//

9、

10、/cCtlPt[7].x=r.right;//0,126/cCtlPt[2].x=//

11、

12、/cCtlPt[10].x=centre.x-offset.cx;//

13、

14、/cCtlPt[4].x=//117/cCtlPt[8].x=centre.x+

15、offset.cx;//10___9___8/cCtlPt[3].x=///cCtlPt[9].x=centre.x;//------------------------*cCtlPt[2].y=cCtlPt[3].y=cCtlPt[4].y=r.top;cCtlPt[8].y=cCtlPt[9].y=cCtlPt[10].y=r.bottom;cCtlPt[7].y=cCtlPt[11].y=c

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。