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

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

ID:13589350

大小:22.42 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2018-07-23

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

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

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

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

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

4、先以一個(gè)軸向橢圓的外接邊界矩形開始(使用一個(gè)普通的GDI調(diào)用)。13個(gè)定義4條組成橢圓的貝塞爾曲線的控制點(diǎn)(以下標(biāo)為0-12)可使用一個(gè)經(jīng)驗(yàn)常量計(jì)算得出。下列代碼為Y軸正方向向下的的映射模式產(chǎn)生控制點(diǎn)(例如MM_TEXT)。在Y軸正方向向上時(shí),只要如注釋中所示,把偏移量設(shè)為負(fù)值就行了。//Createpointstosimulateellipseusingbeziers//使用貝塞爾曲線創(chuàng)建點(diǎn),模擬橢圓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軸正方向向上時(shí),使用下面一行//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ù)覽五頁(yè),下載文檔查看全文

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

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