版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、橢圓和直線、圓一樣,是圖形學(xué)領(lǐng)域中的一種常見圖元,橢圓的生成算法(光柵轉(zhuǎn)換算法)也是圖形學(xué)軟件中最常見的生成算法之一。在平面解析幾何中,橢圓的方程可以描述為 (x x0)2 / a2+ (y y0)2 / b2 = 1,其中 (x0, y0)是圓心坐標(biāo), a和 b 是橢圓的長短軸,特別的,當(dāng) (x0, y0)就是坐標(biāo)中心點時,橢圓方程可以簡化為 x2 / a2 + y2 / b2 = 1。在計算機(jī)圖形學(xué)中,橢圓圖形也存在在點陣輸出設(shè)備上顯示或輸出的問題, 因此也需要一套光柵掃描轉(zhuǎn)換算法。 為了簡化, 我們先考慮圓心在原點的橢圓的生成, 對于中心不是原點的橢圓, 可以通過坐標(biāo)的平移變換獲得相應(yīng)位
2、置的橢圓。在進(jìn)行掃描轉(zhuǎn)換之前,需要了解一下橢圓的對稱性,如圖(1)所示:圖( 1)橢圓的對稱性中心在原點。焦點在坐標(biāo)軸上的標(biāo)準(zhǔn)橢圓具有 X 軸對稱、 Y 軸對稱和原點對稱特性,已知橢圓上第一象限的 P 點坐標(biāo)是 (x, y) ,則橢圓在另外三個象限的對稱點分別是 (x, -y)、(-x, y) 和 (-x, -y) 。因此,只要畫出第一象限的四分之一橢圓,就可以利用這三個對稱性得到整個橢圓。在光柵設(shè)備上輸出橢圓有很多種方法, 可以根據(jù)直角平面坐標(biāo)方程直接求解點坐標(biāo), yekeyii 利用極坐標(biāo)方程求解,但是因為涉及到浮點數(shù)取整,效果都不家用制氧機(jī)十大品牌好,一般都不使用直接求解的方式。 本文就
3、介紹幾種計算機(jī)圖形學(xué)中兩種比較常用的橢圓生成方法:中點畫橢圓算法和 Bresenham橢圓生成算法。1、 中點畫橢圓法中點在坐標(biāo)原點,焦點在坐標(biāo)軸上(軸對齊)的橢圓的平面集合方程是:x2 / a2 + y2 / b2 = 1,也可以轉(zhuǎn)化為如下非參數(shù)化方程形式:F(x, y) = b2x2 + a2y2 - a2b2 = 0(方程 1)無論是中點畫線算法、 中點畫圓算法還是本節(jié)要介紹的中點畫橢圓算法,對選擇x 方向像素增量還是 y 方向像素增量都是很敏感的。 舉個例子,如果某段圓弧上, x 方向上增量 +1 個像素時, y 方向上的增量如果 < 1,則比較適合用中點算法,如果 y 方向上的
4、增量 > 1,就會產(chǎn)生一些跳躍的點,最后生成的光柵位圖圓弧會有一些突變的點,看起來好像不在圓弧上。因此,對于中點畫圓弧算法,要區(qū)分出橢圓弧上哪段 x 增量變化顯著,哪段 y 增量變化顯著,然后區(qū)別對待。由于橢圓的對稱性,我們只考慮第一象限的橢圓圓弧,如圖(2)所示:家用制氧機(jī)十大品牌圖( 2)第一象限橢圓弧示意圖定義橢圓弧上某點的切線法向量N 如下:對方程 1 分別求 x 偏導(dǎo)和 y 偏導(dǎo),最后得到橢圓弧上 (x,y) 點處的法向量是 (2b2x, 2a2 y)。 dy/dx = -1 的點是橢圓弧上的分界點。此點之上的部分(橙褐色部分)橢圓弧法向量的 y 分量比較大,即:2b22 ;此
5、點之下的部分(藍(lán)(x + 1) < 2a (y0.5)紫色部分)橢圓弧法向量的 x 分量比較大,即: 2b22。(x + 1) > 2a (y0.5)對于圖( 2)中橙褐色標(biāo)識的上部區(qū)域, y 方向每變化 1 個單位, x 方向變化大于一個單位,因此中點算法需要沿著x 方向步進(jìn)畫點, x 每次增量加 1,求y 的值。同理,對于圖( 2)中藍(lán)紫色標(biāo)識的下部區(qū)域,中點算法沿著y 方向反家用制氧機(jī)十大品牌向步進(jìn), y 每次減 1,求 x 的值。先來討論上部區(qū)域橢圓弧的生成,如圖(3)所示:圖( 3)中點畫橢圓算法對上部區(qū)域處理示意圖假設(shè)當(dāng)前位置是 P(xii,則下一個可能的點就是P點右邊
6、的ii點或右, y )P1(x +1, y )下方的 P2(x+1, y-1)點,取舍的方法取決于判別式d ,d 的定義如下:iiiidi = F(xi +1, yi -0.5) = b2(x i+1)2 + a2(yi-0.5)2 a2b2若 di < 0,表示像素點 P1 和 P2 的中點在橢圓內(nèi), 這時可取 P1 為下一個像素點。此時 xi+1 = xi + 1, yi+1 = yi,代入判別式 di 得到 di+1:di+1 = F(xi+1 +1, yi+1-0.5) = b2(xi +2)2 + a2(yi -0.5)2 a2b2 = di + b2(2xi + 3)家用制氧
7、機(jī)十大品牌計算出 di 的增量是 b2(2xi + 3)。同理,若 di >= 0,表示像素點 P1 和 P2 的中點在橢圓外,這時應(yīng)當(dāng)取 P2 為下一個像素點。此時 xi+1 = xi + 1,yi+1 = yi - 1,代入判別式 di 得到 di+1:di+1 = F(xi+1 +1, yi+1-0.5) = b2(xi +2)2 + a2(yi -1.5)2 a2b2 = d1 + b2(2xi+3) + a2(-2yi +2)計算出 di 的增量是 b2(2xi +3)+a2(-2yi +2)。計算 di 的增量的目的是減少計算量,提高算法效率,每次判斷一個點時,不必完整的計算
8、判別式 di ,只需在上一次計算出的判別式上增加一個增量即可。接下來繼續(xù)討論下部區(qū)域橢圓弧的生成,如圖(4)所示:圖( 4)中點畫橢圓算法對下部區(qū)域處理示意圖假設(shè)當(dāng)前位置是 P(xi , yi ),則下一個可能的點就是 P 點左下方的 P1(xi -1, yi-1)點或下方的 P2(xi , yi -1)點,取舍的方法同樣取決于判別式 di ,di 的定義如下:di = F(xi +0.5, yi -1) = b2(x i+0.5)2 + a2(yi -1)2 a2b2家用制氧機(jī)十大品牌若 di < 0,表示像素點 P1 和 P2 的中點在橢圓內(nèi), 這時可取 P2 為下一個像素點。此時
9、xi+1 = xi + 1, yi+1 = yi - 1,代入判別式 di 得到 di+1:di+1 = F(xi+1 +0.5, yi+1 -1) = b2(xi +1.5)2 + a2(yi -2)2 a2b2 = di + b2(2xi +2)+a2(-2yi +3)計算出 di 的增量是2i2i+3)。同理,若i,表示像素點P1和P2b (2x+2)+a (-2yd >= 0的中點在橢圓外,這時應(yīng)當(dāng)取P1 為下一個像素點。此時xi+1i ,i+1i- 1,= x y= y代入判別式 di 得到 di+1:di+1 = F(xi+1 +0.5, yi+1 -1) = b2(xi +
10、0.5)2 + a2(yi -2)2 a2b2 = d1 + a2(-2yi +3)計算出 di 的增量是 a2(-2yi +3)。中點畫橢圓算法從 (0, b)點開始,第一個中點是 (1, b 0.5),判別式 d 的初始值是:d0 = F(1, b0.5) = b2 + a2 (-b+0.25)上部區(qū)域生成算法的循環(huán)終止條件是: 2b22 ,下部區(qū)域的循(x + 1) >= 2a (y0.5)環(huán)終止條件是 y = 0,至此,中點畫橢圓算法就可以完整給出了:20 voidMP_Ellipse( intxc,intyc,inta ,intb )21 22 double sqa = a *
11、 a ;23 double sqb = b * b ;2425doubled= sqb+ sqa*(- b + 0.25 );家用制氧機(jī)十大品牌26 int x = 0;27 int y = b ;28EllipsePlot( xc , yc , x , y );29while( sqb*( x+1 )< sqa*( y-0.5 )3031if( d<0)3233d+= sqb*( 2* x+ 3);3435else3637d+=( sqb*( 2 * x+3)+ sqa*(-2* y +2);38y-;3940x+;41EllipsePlot( xc ,yc,x ,y );424
12、3d=( b* ( x+ 0.5 )*2+( a*( y-1)*2- ( a* b ) * 2;44 while ( y > 0)45 46if( d < 0)4748d+= sqb*( 2* x+ 2) + sqa * (- 2 * y + 3);49x+;5051else5253d+= sqa*(- 2* y+ 3);5455y-;56EllipsePlot( xc ,yc, x ,y );57 58 EllipsePlot() 函數(shù)利用橢圓的三個對稱性,一次完成四個對稱點的繪制,因為簡單,此處就不再列出代碼。家用制氧機(jī)十大品牌2、Bresenham 算法中點畫橢圓法中,計算判
13、別式 d 使用了浮點運(yùn)算,影響了橢圓的生成效率。如果能將判別式規(guī)約到整數(shù)運(yùn)算, 則可以簡化計算, 提高效率。 于是人們針對中點畫橢圓法進(jìn)行了多種改進(jìn),提出了很多種中點生成橢圓的整數(shù)型算法,Bresenham橢圓生成算法就是其中之一。在生成橢圓上部區(qū)域時,以x 軸為步進(jìn)方向,如圖( 5-a)所示:圖( 5)Bresenham橢圓生成算法判別式x 每步進(jìn)一個單位, 就需要在判斷 y 保持不變還是也步進(jìn)減 1,bresenham算法定義判別式為:D = d1 d2家用制氧機(jī)十大品牌如果 D < 0,則取 P1 為下一個點,否則,取 P2 為下一個點。采用判別式 D,避免了中點算法因 y-0.5
14、 而引入的浮點運(yùn)算,使得判別式規(guī)約為全整數(shù)運(yùn)算,算法效率得到了很大的提升。根據(jù)橢圓方程,可以計算出d1 和 d2 分別是:d1 = a2(yi 2 y2)d2 = a2(y2 yi+1 2)以 (0, b)作為橢圓上部區(qū)域的起點,將其代入判別式D 可以得到如下遞推關(guān)系:Di+1 = Di + 2b2(2xi + 3)(Di < 0)Di+1 = Di + 2b2(2xi + 3) 4a2(yi - 1)(Di >= 0)D0 = 2b2 2a2b + a2在生成橢圓下部區(qū)域時,以 y 軸為步進(jìn)方向,如圖( 5-b)所示,y 每步進(jìn)減一個單位,就需要在判斷 x 保持不變還是步進(jìn)加一個
15、單位,對于下部區(qū)域,計算出 d1 和 d2 分別是:d1 = b2(xi+12 x2)d2 = b2(x2 xi 2)以 (xp p 作為橢圓下部區(qū)域的起點,將其代入判別式D可以得到如下遞推關(guān)系:, y )家用制氧機(jī)十大品牌Di+1 = Di 4a2(yi - 1) + 2a2(Di < 0)Di+1 = Di + 2b2(xi + 1) 4a2(y - 1) + 2a2 + b2(Di >= 0)D0 = b2(xp + 1)2 +b2xp2 - 2a2b2 + 2a2(yp - 1)2根據(jù)以上分析, Bresenham橢圓生成算法的實現(xiàn)就比較簡單了:61voidBresenha
16、m_Ellipse( intxc,intyc,inta ,intb )62 63 int sqa = a * a ;64 int sqb = b * b ;6566 int x = 0;67inty= b ;68intd=2 * sqb-2* b* sqa + sqa ;69EllipsePlot( xc ,yc, x ,y );70intP_x= ROUND_INT( double ) sqa / sqrt ( double )( sqa +sqb ) );71 while ( x <= P_x )72 73if( d< 0)7475d+=2* sqb*( 2* x+3);7677else7879d+=2* sqb*( 2* x+3) - 4 * sqa * ( y - 1);80y-;8182x+;83EllipsePlot( xc ,yc ,x ,y );84 85家用制氧機(jī)十大品牌86d= sqb*( x * x+ x )+ sqa*( y * y- y )- sqa* sqb ;87 while (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 木地板安裝合同范例
- 電源材料采購合同范例
- 簡約勞動合同范例
- 義診合作協(xié)議合同范例
- 抖音短編劇合同范例
- 完整版100以內(nèi)加減法混合運(yùn)算4000道112
- 鐵門關(guān)職業(yè)技術(shù)學(xué)院《計算機(jī)控制技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 小學(xué)數(shù)學(xué)二年級第二學(xué)期口算計算共5073道題
- 小學(xué)數(shù)學(xué)二年級第二學(xué)期口算計算共5083道題
- 小學(xué)數(shù)學(xué)二年級第二學(xué)期口算計算共5093道題
- 婦女健康教育宣傳內(nèi)容課件
- 2024年度個人工作總結(jié)范文四
- 人教版三年級數(shù)學(xué)上冊復(fù)習(xí)計劃
- 機(jī)電傳動控制自動運(yùn)輸線-課程設(shè)計
- 知行合一 - 社會實踐?創(chuàng)新創(chuàng)業(yè)(江西師范大學(xué))知到智慧樹章節(jié)答案
- 城市排水系統(tǒng)維護(hù)員合同范例
- Unit5《Lovely faces》(說課稿)-2024-2025學(xué)年滬教版(五四制)(2024)英語一年級上冊
- 2024年度文化旅游產(chǎn)業(yè)投資與運(yùn)營合同6篇
- 2025年專項債券投向及申報要求
- 東方明珠課件
- 貼片機(jī)智能控制技術(shù)
評論
0/150
提交評論