



版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、橢圓和直線、圓一樣,是圖形學領域中的一種常見圖元,橢圓的生成算法(光柵轉換算法)也是圖形學軟件中最常見的生成算法之一。在平面解析幾何中,橢圓的方程可以描述為 (x x0)2 / a2+ (y y0)2 / b2 = 1,其中 (x0, y0)是圓心坐標, a和 b 是橢圓的長短軸,特別的,當 (x0, y0)就是坐標中心點時,橢圓方程可以簡化為 x2 / a2 + y2 / b2 = 1。在計算機圖形學中,橢圓圖形也存在在點陣輸出設備上顯示或輸出的問題, 因此也需要一套光柵掃描轉換算法。 為了簡化, 我們先考慮圓心在原點的橢圓的生成, 對于中心不是原點的橢圓, 可以通過坐標的平移變換獲得相應位
2、置的橢圓。在進行掃描轉換之前,需要了解一下橢圓的對稱性,如圖(1)所示:圖( 1)橢圓的對稱性中心在原點。焦點在坐標軸上的標準橢圓具有 X 軸對稱、 Y 軸對稱和原點對稱特性,已知橢圓上第一象限的 P 點坐標是 (x, y) ,則橢圓在另外三個象限的對稱點分別是 (x, -y)、(-x, y) 和 (-x, -y) 。因此,只要畫出第一象限的四分之一橢圓,就可以利用這三個對稱性得到整個橢圓。在光柵設備上輸出橢圓有很多種方法, 可以根據直角平面坐標方程直接求解點坐標, yekeyii 利用極坐標方程求解,但是因為涉及到浮點數取整,效果都不家用制氧機十大品牌好,一般都不使用直接求解的方式。 本文就
3、介紹幾種計算機圖形學中兩種比較常用的橢圓生成方法:中點畫橢圓算法和 Bresenham橢圓生成算法。1、 中點畫橢圓法中點在坐標原點,焦點在坐標軸上(軸對齊)的橢圓的平面集合方程是:x2 / a2 + y2 / b2 = 1,也可以轉化為如下非參數化方程形式:F(x, y) = b2x2 + a2y2 - a2b2 = 0(方程 1)無論是中點畫線算法、 中點畫圓算法還是本節要介紹的中點畫橢圓算法,對選擇x 方向像素增量還是 y 方向像素增量都是很敏感的。 舉個例子,如果某段圓弧上, x 方向上增量 +1 個像素時, y 方向上的增量如果 < 1,則比較適合用中點算法,如果 y 方向上的
4、增量 > 1,就會產生一些跳躍的點,最后生成的光柵位圖圓弧會有一些突變的點,看起來好像不在圓弧上。因此,對于中點畫圓弧算法,要區分出橢圓弧上哪段 x 增量變化顯著,哪段 y 增量變化顯著,然后區別對待。由于橢圓的對稱性,我們只考慮第一象限的橢圓圓弧,如圖(2)所示:家用制氧機十大品牌圖( 2)第一象限橢圓弧示意圖定義橢圓弧上某點的切線法向量N 如下:對方程 1 分別求 x 偏導和 y 偏導,最后得到橢圓弧上 (x,y) 點處的法向量是 (2b2x, 2a2 y)。 dy/dx = -1 的點是橢圓弧上的分界點。此點之上的部分(橙褐色部分)橢圓弧法向量的 y 分量比較大,即:2b22 ;此
5、點之下的部分(藍(x + 1) < 2a (y0.5)紫色部分)橢圓弧法向量的 x 分量比較大,即: 2b22。(x + 1) > 2a (y0.5)對于圖( 2)中橙褐色標識的上部區域, y 方向每變化 1 個單位, x 方向變化大于一個單位,因此中點算法需要沿著x 方向步進畫點, x 每次增量加 1,求y 的值。同理,對于圖( 2)中藍紫色標識的下部區域,中點算法沿著y 方向反家用制氧機十大品牌向步進, y 每次減 1,求 x 的值。先來討論上部區域橢圓弧的生成,如圖(3)所示:圖( 3)中點畫橢圓算法對上部區域處理示意圖假設當前位置是 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 的中點在橢圓內, 這時可取 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、機十大品牌計算出 di 的增量是 b2(2xi + 3)。同理,若 di >= 0,表示像素點 P1 和 P2 的中點在橢圓外,這時應當取 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 ,只需在上一次計算出的判別式上增加一個增量即可。接下來繼續討論下部區域橢圓弧的生成,如圖(4)所示:圖( 4)中點畫橢圓算法對下部區域處理示意圖假設當前位置是 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家用制氧機十大品牌若 di < 0,表示像素點 P1 和 P2 的中點在橢圓內, 這時可取 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的中點在橢圓外,這時應當取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)上部區域生成算法的循環終止條件是: 2b22 ,下部區域的循(x + 1) >= 2a (y0.5)環終止條件是 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 );家用制氧機十大品牌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() 函數利用橢圓的三個對稱性,一次完成四個對稱點的繪制,因為簡單,此處就不再列出代碼。家用制氧機十大品牌2、Bresenham 算法中點畫橢圓法中,計算判
13、別式 d 使用了浮點運算,影響了橢圓的生成效率。如果能將判別式規約到整數運算, 則可以簡化計算, 提高效率。 于是人們針對中點畫橢圓法進行了多種改進,提出了很多種中點生成橢圓的整數型算法,Bresenham橢圓生成算法就是其中之一。在生成橢圓上部區域時,以x 軸為步進方向,如圖( 5-a)所示:圖( 5)Bresenham橢圓生成算法判別式x 每步進一個單位, 就需要在判斷 y 保持不變還是也步進減 1,bresenham算法定義判別式為:D = d1 d2家用制氧機十大品牌如果 D < 0,則取 P1 為下一個點,否則,取 P2 為下一個點。采用判別式 D,避免了中點算法因 y-0.5
14、 而引入的浮點運算,使得判別式規約為全整數運算,算法效率得到了很大的提升。根據橢圓方程,可以計算出d1 和 d2 分別是:d1 = a2(yi 2 y2)d2 = a2(y2 yi+1 2)以 (0, b)作為橢圓上部區域的起點,將其代入判別式D 可以得到如下遞推關系:Di+1 = Di + 2b2(2xi + 3)(Di < 0)Di+1 = Di + 2b2(2xi + 3) 4a2(yi - 1)(Di >= 0)D0 = 2b2 2a2b + a2在生成橢圓下部區域時,以 y 軸為步進方向,如圖( 5-b)所示,y 每步進減一個單位,就需要在判斷 x 保持不變還是步進加一個
15、單位,對于下部區域,計算出 d1 和 d2 分別是:d1 = b2(xi+12 x2)d2 = b2(x2 xi 2)以 (xp p 作為橢圓下部區域的起點,將其代入判別式D可以得到如下遞推關系:, y )家用制氧機十大品牌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根據以上分析, Bresenham橢圓生成算法的實現就比較簡單了: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家用制氧機十大品牌86d= sqb*( x * x+ x )+ sqa*( y * y- y )- sqa* sqb ;87 while (
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設計施工公司管理制度
- 診所檔案信息管理制度
- 診所陽性患者管理制度
- 財富中心薪酬管理制度
- 賬戶交易權限管理制度
- 貨架安裝安全管理制度
- 貨車進出小區管理制度
- 2025年中國個人交通工具行業市場全景分析及前景機遇研判報告
- 景區賠償協議書范本
- 初中古詩文賞析:從名篇到實踐
- 2024年上海市中考英語試卷及答案
- 急救知識科普完整版課件
- 浙江省杭州市錢塘區2022年小升初語文試卷【含答案】
- 2024浙江交投高速公路運營管理限公司招聘6人高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- MOOC 微課設計與制作-愛課程 中國大學慕課答案
- 糖尿病急性并發癥的搶救課件
- 康復科常見應急預案
- MOOC 大學生創新創業教育-云南大學 中國大學慕課答案
- 妊娠合并原發性醛固酮增多癥的護理查房
- 女性領導的培養和使用
- 中醫生活起居護理-疏仁麗
評論
0/150
提交評論