版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第二講 二維基本圖形生成所謂圖元的生成,是指完成圖元的參數(shù)表示形式(由圖形軟件包的使用者指定)到點(diǎn)陣表示形式(光柵顯示系統(tǒng)刷新時(shí)所需的表示形式)的轉(zhuǎn)換。通常也稱(chēng)掃描轉(zhuǎn)換圖元1 簡(jiǎn)單的二維圖形顯示流程2 直線段的掃描轉(zhuǎn)換3 圓弧的掃描轉(zhuǎn)換4 易畫(huà)曲線的正負(fù)法5 線畫(huà)圖元的屬性控制8/20/20221掃描轉(zhuǎn)換直線段 DDA算法 中點(diǎn)畫(huà)線法 Bresenham算法圓弧、橢圓弧掃描轉(zhuǎn)換 中點(diǎn)算法 Bresenham算法 內(nèi)接多邊形迫近法* 等面積多邊形逼近法*8/20/202221 簡(jiǎn)單的二維圖形顯示流程8/20/20223圖形顯示前需要:掃描轉(zhuǎn)換+裁剪 裁剪 -掃描轉(zhuǎn)換:最常用,節(jié)約計(jì)算時(shí)間。 掃描
2、轉(zhuǎn)換 -裁剪:算法簡(jiǎn)單; 掃描轉(zhuǎn)換到畫(huà)布 -位塊拷貝:算法簡(jiǎn)單,但耗時(shí)耗內(nèi)存。常用于字符顯示。8/20/202242 直線段的掃描轉(zhuǎn)換 目標(biāo):求與直線段充分接近的像素集 兩點(diǎn)假設(shè)直線段的寬度為1直線段的斜率: 像素間均勻網(wǎng)格整型坐標(biāo)系8/20/20225基本圖形點(diǎn)陣轉(zhuǎn)換算法評(píng)價(jià)所顯示圖形的精度算法的時(shí)間和空間復(fù)雜性 兩者沖突,權(quán)衡折衷8/20/20226 描繪線條圖形的要求直線段要顯得筆直線段端點(diǎn)位置要準(zhǔn)確線段的亮度要均勻轉(zhuǎn)換算法速度要快8/20/20227條件:待掃描轉(zhuǎn)換的直線段:斜率:直線方程:直接求交算法:劃分區(qū)間x0,x1:計(jì)算縱坐標(biāo):取整:DDA( digital different
3、ial analyzer)算法8/20/20228復(fù)雜度:乘法+加法+取整DDA算法(增量算法)復(fù)雜度:加法+取整程序8/20/20229DDA畫(huà)線算法程序void LineDDA(int x0,int y0,int x1,int y1,int color) /* 假定x0 x1,-1=k=1 */ int x,y; float dx, dy, k; dx= float(x1-x0); dy= float(y1-y0); k=dy/dx; y=y0; for(x=x0; x 1時(shí),必須把x,y地位互換,y每增加1,x相應(yīng)增加1/k。特點(diǎn)2 在這個(gè)算法中,y與k必須用浮點(diǎn)數(shù)表示,而且每一步都要對(duì)
4、y進(jìn)行四舍五入后取整。這使得它不利于硬件實(shí)現(xiàn) 8/20/202212改進(jìn)算法(增量DDA) 增加斜率判斷并改變循環(huán)參數(shù)8/20/202213DDA畫(huà)線算法程序(改進(jìn))void LineDDA(int x0,int y0,int x1,int y1,int color) int x,y;float dx, dy,k,l,m; dx= float(x1-x0); dy= float(y1-y0); k=dy/dx; if abs(k)1) for(x=x0; x= x1, x+) Setpixel(x, int(y+0.5), color); y+=k; else for(y=y0; y x1怎么
5、辦?8/20/202214DDA直線生成算法的偽語(yǔ)言描述如下: begin if abs(x2x1)abs(y2y1) then lenghtabs(x2x1) else lenghtabs(y2y1) endif x(x2x1)/lenght y(y2y1)/lenght xx1 yy1 k1 while(klenght) putpixel(x,y) xxx yyy kk1 endwhile end8/20/202215DDA直線繪制的C+實(shí)現(xiàn)void DDA直線繪制(HDC hdc) int k; double x1=50,y1=50, x2=300,y2=350; double x,y,
6、deltx,delty,length; if (fabs(x2-x1)=fabs(y2-y1) length=fabs(x2-x1); else length=fabs(y2-y1); deltx=(x2-x1)/length; delty=(y2-y1)/length;x=x1; y=y1; k=1; while(k0; down: F(x, y)0; 直線的正負(fù)劃分性8/20/202219 欲判斷中M在Q點(diǎn)的上方還是下方,只要把M代F(x,y),并判斷它的符號(hào)。 構(gòu)造判別式: d=F(M)=F(xp+1, yp+0.5) =a(xp+1)+b(yp+0.5)+c 當(dāng)d0,M在Q點(diǎn)上方,取P
7、1為下一個(gè)象素; 當(dāng)d=0,選P1或P2均可,約定取P1為下一個(gè)象素8/20/202220問(wèn)題:判斷距直線最近的下一個(gè)象素點(diǎn) 構(gòu)造判別式:d=F(M)=F(Xp+1,Yp+0.5) 由d0,0可判定下一個(gè)象素,PP2P18/20/202221要判定再下一個(gè)象素,分兩種情形考慮: 1)若d0,取正右方象素P1,再下一個(gè)象素判定, 由:d1=F(Xp+2,Yp+0.5)=a(Xp+2)+b(Yp+0.5)+c=d+a,d的增量是a 2)若d0,取右上方象素P2,再下一個(gè)象素,由:d2=F(Xp+2,Yp+1.5)=d+a+b d的增量為a+bP2PP18/20/202222d的初始值 d0=F(X
8、0+1,Y0+0.5)=F(X0,Y0)+a+0.5*b 因(X0,Y0)在直線上,F(xiàn)(X0,Y0)=0,所以,d0=a+0.5*bd的增量都是整數(shù),只有初始值包含小數(shù),可以用2d代替d, 2a改寫(xiě)成a+a。算法中只有整數(shù)變量,不含乘除法,可用硬件實(shí)現(xiàn)。8/20/202223中點(diǎn)算法程序 MidPointLine(x0,y0,x1,y1,color)int x0,y0,x1,y1,color; int a,b,d1,d2,x,y; a = y0-y1; b = x1 x0; d = 2 * a +b; d1 = 2*a; d2 = 2*(a+b); x = x0; y = y0; SetPix
9、el(x,y,color); while (xx1) if (d0) x+; y+; d +=d2; else x+; d +=d1;SetPixel(x,y,color);8/20/202224舉例 用中點(diǎn)畫(huà)線方法掃描轉(zhuǎn)換連接兩點(diǎn)P0(0,0)和P1(5,2)的直線段a=y0-y1=-2; b=x1-x0=5;d0=2*a+b=1; d1=2*a=-4; d2=2*(a+b)=6x y d0 0 11 0 -3 d12 1 3 d23 1 -1 d14 2 5 d25 2 18/20/202225畫(huà)線Bresenham算法 Bresenham算法是計(jì)算機(jī)圖形學(xué)領(lǐng)域使用最廣泛的直線掃描轉(zhuǎn)換算法
10、。該方法類(lèi)似于中點(diǎn)法,由誤差項(xiàng)符號(hào)決定下一個(gè)象素取右邊點(diǎn)還是右上點(diǎn)。 本算法由Bresenham在1965年提出該方法最初是為數(shù)字繪圖儀設(shè)計(jì)的,后來(lái)被廣泛地應(yīng)用于光柵圖形顯示和數(shù)控(NC)加工算法原理如下:過(guò)各行各列象素中心構(gòu)造一組虛擬網(wǎng)格線。按直線從起點(diǎn)到終點(diǎn)的順序計(jì)算直線與各垂直網(wǎng)格線的交點(diǎn),然后確定該列象素中與此交點(diǎn)最近的象素。該算法的巧妙之處在于采用增量計(jì)算,使得對(duì)于每一列,只要檢查一個(gè)誤差項(xiàng)的符號(hào),就可以確定該列的所求象素。 8/20/202226工作原理:根據(jù)直線的斜率在x或y的方向每次都只遞增一個(gè)象素單位,另一個(gè)方向的增量為0或18/20/202227設(shè)直線方程為y=kx+b,其
11、中k=dy/dx。 假設(shè)x列的象素已經(jīng)確定為xi,其行坐標(biāo)為yi。那么下一個(gè)象素的列坐標(biāo)為xi1,而行坐標(biāo)要么不變?yōu)閥i,要么遞增1為yi1。是否增1取決于如圖所示誤差項(xiàng)d的值。因?yàn)橹本€的起始點(diǎn)在象素中心,所以誤差項(xiàng)d的初值d00。X下標(biāo)每增加1,d的值相應(yīng)遞增直線的斜率值k,即ddk。當(dāng)d0.5時(shí),直線與xi1列垂直網(wǎng)格交點(diǎn)最接近于當(dāng)前象素(xi,yi)的右上方象素(xi1,yi1);而當(dāng)d0.5時(shí),更接近于右方象素(xi1,yi)。8/20/202228為方便計(jì)算,令ed0.5,e的初值為0.5,增量為k。當(dāng)e0時(shí),取當(dāng)前象素(xi,yi)的右上方象素(xi1,yi1);而當(dāng)e0時(shí),更接近
12、于右方象素(xi1,yi)。 8/20/202229Bresenham畫(huà)線算法程序void Bresenhamline (int x0,int y0,int x1, int y1,int color) int x, y, dx, dy; float k, e; dx = x1-x0;dy = y1- y0; k=dy/dx; e=-0.5;x=x0;y=y0; for (i=0; i= 0) y+, e=e-1; 8/20/202230舉例:用Bresenham方法掃描轉(zhuǎn)換連接兩點(diǎn)P0(0,0)和P1(5,2)的直線段。x y e0 0 -0.51 0 -0.1 0.3-12 1 -0.73
13、1 -0.3 0.1-14 2 -0.95 2 -0.58/20/202231上述bresenham算法在計(jì)算直線斜率與誤差項(xiàng)時(shí)用到小數(shù)與除法??梢愿挠谜麛?shù)以避免除法。由于算法中只用到誤差項(xiàng)的符號(hào),因此可作如下替換:e=e*2dx改進(jìn)的Bresenham畫(huà)線算法程序:void InterBresenhamline (int x0,int y0,int x1, int y1,int color) dx = x1-x0; dy = y1- y0; e=-dx; x=x0; y=y0; for (i=0; i= 0) y+; e=e-2*dx; 8/20/202232掃描轉(zhuǎn)換圓弧處理對(duì)象:圓心在原點(diǎn)
14、的圓弧圓的八對(duì)稱(chēng)性8/20/202233兩種直接離散方法:離散點(diǎn): 離散角度:開(kāi)根,三角函數(shù)運(yùn)算,計(jì)算量大,不可取。 8/20/202234掃描轉(zhuǎn)換圓弧圓弧的正負(fù)劃分性圓弧外的點(diǎn):F(X,Y)0圓弧內(nèi)的點(diǎn):F(X,Y)08/20/202235掃描轉(zhuǎn)換圓弧生成圓弧的中點(diǎn)算法考慮對(duì)象:第二個(gè)八分圓, 第一象限的八分之一圓弧 PP1P28/20/202236問(wèn)題:與直線情形類(lèi)似圓弧的隱函數(shù):F(X,Y)=X2+Y2-R2=0 切線斜率m in -1,0中點(diǎn) M=(Xp+1,Yp-0.5), 當(dāng)F(M)0時(shí),M在圓內(nèi),說(shuō)明P1距離圓弧更近,取P1; 當(dāng)F(M)0時(shí),P取P2P2P1P8/20/2022
15、37構(gòu)造判別式 d=F(M)=F(Xp+1,Yp-0.5)=(Xp+1)2+(Yp-0.5)2-R2 1)若d0,取P1,再下一個(gè)象素的判別式為: d1=F(Xp+2,Yp-0.5)=d+2Xp+3, 沿正右方向,d的增量為2Xp+3; 2)若d0,取P2,再下一個(gè)象素的判別式為: d2=F(Xp+2,Yp-1.5)=d+(2Xp+3)+(-2Yp+2) 沿右下方向,d的增量為2(Xp-Yp)+5d的初始值(在第一個(gè)象素(0,R)處),d0=F(1, R-0.5)=1.25-R算法中有浮點(diǎn)數(shù),用e=d-0.25代替8/20/202238所以:初始化運(yùn)算d0 = 1.25 R 對(duì)應(yīng)于 e 0=
16、1- R判別式 d 0 對(duì)應(yīng)于 e -0.25 又因?yàn)椋篹的初值e0為整數(shù),運(yùn)算過(guò)程中的分量也為整數(shù),故e始終為整數(shù)所以: e -0.25 等價(jià)于 e 0程序如下(完全用整數(shù)實(shí)現(xiàn)):MidpointCircle(r,color)Int r, color; int x,y,d; x = 0; y = r; d = 1-r; putpixcel(x,y,color); while( x y) if (d 0) d += 2*x+3; x+; else d += 2*(x-y)+5; x+ ; y-; putpixcel(x,y,color); 8/20/202239Bresenham畫(huà)圓算法(1/
17、7)順時(shí)針畫(huà)第一四分圓,下一步選擇哪個(gè)點(diǎn)?基本思想:通過(guò)比較像素與圓的距離平方來(lái)避免開(kāi)方運(yùn)算下一像素有3種可能的選擇mH=|(xi+1)2+yi2-R2|mD=|(xi+1)2+(yi-1)2-R2|mV=|xi2 +(yi-1)2-R2 |選擇像素的原則使其與實(shí)際圓弧的距離平方達(dá)到最小(xi,yi)HPiVD(xi+1,yi)(xi,yi-1)(xi+1,yi-1)8/20/202240Bresenham畫(huà)圓算法(2/7)圓弧與點(diǎn)(xi,yi)附近光柵網(wǎng)格的相交關(guān)系有5種右下角像素D (xi,yi)與實(shí)際圓弧的近似程度i=(xi+1)2+(yi-1)2-R2當(dāng)i0時(shí),D在圓外,當(dāng)i=0時(shí),D
18、在圓上,(xi,yi)HPiVD(xi+1,yi)(xi,yi-1)(xi+1,yi-1)8/20/202241Bresenham畫(huà)圓算法(3/7)當(dāng)i0時(shí),D在圓內(nèi),情形,選mH ,mD 中最小者d=mH - mD =|(xi+1)2+yi2-R2| - |(xi+1)2+(yi-1)2-R2| =(xi+1)2+yi2-R2 + (xi+1)2+(yi-1)2-R2 =2 (i+yi)-1若d0,則選D若d=0,則選H情形也適用8/20/202242Bresenham畫(huà)圓算法(4/7)當(dāng)i0時(shí),D在圓外,情形,選mv ,mD 中最小者d=mD - mV =|(xi+1)2+(yi-1)2-
19、R2 | - |xi2+(yi-1)2-R2| =(xi+1)2+(yi-1)2-R2 + xi2+(yi-1)2-R2 =2 (i-xi)-1若d0,則選V若d=0,則選D情形也適用8/20/202243Bresenham畫(huà)圓算法(5/7)當(dāng)i=0時(shí),D在圓上,按d判別,有d0,應(yīng)選D按d判別,有d0,應(yīng)選D8/20/202244Bresenham畫(huà)圓算法(6/7)當(dāng)i0,選D當(dāng)i0時(shí),若d 0,選D 若d0,選V當(dāng)i=0時(shí),選D8/20/202245Bresenham畫(huà)圓算法(7/7)判別式的遞推關(guān)系當(dāng)取H(xi+1,yi)時(shí)i+1=(xi+1+1)2+(yi-1)2-R2= i+2(xi
20、+1)+1當(dāng)取V(xi,yi-1)時(shí)i+1=(xi+1)2+(yi-1-1)2-R2= i-2(yi-1)+1當(dāng)取D(xi+1,yi-1)時(shí)i+1=(xi+1+1)2+(yi-1-1)2-R2= i+2(xi+1)-2(yi-1)+28/20/202246橢圓的掃描轉(zhuǎn)換F(x,y)=b2x2+a2y2-a2b2=0橢圓的對(duì)稱(chēng)性,只考慮第一象限橢圓弧生成,分上下兩部分,以切線斜率為-1的點(diǎn)作為分界點(diǎn)。橢圓上一點(diǎn)處的法向:N(x,y) = (F)x i + (F)y j = 2b2 x i + 2a2 y j8/20/202247在上半部分,法向量的y分量大在下半部分,法向量的x分量大上半部分下半
21、部分法向量?jī)煞至肯嗟萂1M2在當(dāng)前中點(diǎn)處,法向量( 2b2 (Xp+1) ,2a2 (Yp-0.5)的y分量比x分量大,即: b2 (Xp+1) a2 (Yp-0.5), 而在下一中點(diǎn),不等式改變方向,則說(shuō)明橢圓弧從上部分轉(zhuǎn)入下部分8/20/202248橢圓的中點(diǎn)畫(huà)法與圓弧中點(diǎn)算法類(lèi)似:確定一個(gè)象素后,接著在兩個(gè)候選象素的中點(diǎn)計(jì)算一個(gè)判別式的值,由判別式的符號(hào)確定更近的點(diǎn)先討論橢圓弧的上部分(Xp,Yp)中點(diǎn)(Xp+1,Yp-0.5)d1=F(Xp+1,Yp-0.5)= b2(Xp+1)2+a2(Yp-0.5)2-a2b28/20/202249根據(jù)d1的符號(hào)來(lái)決定下一像素是取正右方的那個(gè),還是
22、右上方的那個(gè)。 若d10,中點(diǎn)在橢圓內(nèi),取正右方象素,判別式更新為:d1=F(Xp+2,Yp-0.5)=d1+b2(2Xp+3)d1的增量為b2(2Xp+3)當(dāng)d10,中點(diǎn)在橢圓外,取右下方象素,更新判別式:d1=F(Xp+2,Yp-1.5)=d1+b2(2Xp+3)+a2(-2Yp+2)d1的增量為b2(2Xp+3)+a2(-2Yp+2)8/20/202250d1的初始條件:橢圓弧起點(diǎn)為(0,b),第一個(gè)中點(diǎn)為(1,b-0.5) 初始判別式: d10=F(1,b-0.5)=b*b+a*a(-b+0.25)轉(zhuǎn)入下一部分,下一象素可能是一正下方或右下方,此時(shí)判別式要初始化。d2 = F(Xp+0
23、.5,Yp-1) = b2(Xp+0.5)2+a2(Yp-1)2-a2b2 若d2=0,則d2 = F(Xp+0.5,Yp-2) = d2 + a2(-2Yp+3) 下半部分弧的終止條件為 y = 08/20/202251程序:MidpointEllipe(a,b, color)int a,b,color; int x,y; float d1,d2; x = 0; y = b; d1 = b*b +a*a*(-b+0.25); putpixel(x,y,color); while( b*b*(x+1) a*a*(y-0.5) if (d10) if (d2 0) d2 +=b*b*(2*x+2
24、)+a*a*(-2*y+3); x+; y-; else d2 += a*a*(-2*y+3); y-; putpixel(x,y,color); 8/20/202253用正多邊形近似代替圓, 顯示多邊形的邊可用掃描轉(zhuǎn)換直線段的中點(diǎn)算法來(lái)實(shí)現(xiàn)。生成圓弧的多邊形逼近法? 圓的正內(nèi)接多邊形迫近法? 圓的等面積正多邊形迫近法8/20/202254生成圓弧的多邊形逼近法圓的正內(nèi)接多邊形迫近法原理計(jì)算多邊形各頂點(diǎn)的遞推公式 Xi+1cos a- sin a Xi = Yi +1sin a cosa Yi因?yàn)? a是常數(shù), sin a, cosa只在開(kāi)始時(shí)計(jì)算一次所以,一個(gè)頂點(diǎn)只需4次乘法,共4n次乘法,外加直線段的中點(diǎn)算法的計(jì)算量。8/20/202255問(wèn)題:給定最大逼近誤差(最大
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞務(wù)供應(yīng)授權(quán)收款協(xié)議
- 2024年食堂承包協(xié)議范文
- 2024企業(yè)勞動(dòng)合同書(shū)樣本
- 合作開(kāi)發(fā)房產(chǎn)合同文本
- 2024年商場(chǎng)裝修合同的范本
- 建筑項(xiàng)目勞務(wù)分包合同格式
- 投資股權(quán)合同格式模板
- 個(gè)人股權(quán)出售合同
- 2024合作伙伴協(xié)議范本
- 2024年消防通風(fēng)承包合同協(xié)議書(shū)范本
- 如何開(kāi)展好班前班后會(huì)(趙正勇)
- 內(nèi)蒙古呼和浩特市回民區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期中地理試題
- 照明路燈工程 投標(biāo)文件(技術(shù)方案)
- 2024年斯坦福Agent+AI+論文(英)
- 2024年教師普通話培訓(xùn)心得體會(huì)范文3篇
- 統(tǒng)編版五年級(jí)上冊(cè)語(yǔ)文第六單元《口語(yǔ)交際父母之愛(ài)》公開(kāi)課一等獎(jiǎng)創(chuàng)新教學(xué)設(shè)計(jì)
- 《經(jīng)濟(jì)學(xué)基礎(chǔ)》課件:項(xiàng)目一 揭開(kāi)經(jīng)濟(jì)學(xué)的面紗
- 2024年T8聯(lián)考高三第二次學(xué)業(yè)質(zhì)量語(yǔ)文試題答案講評(píng)課件
- 環(huán)形電流的磁場(chǎng)強(qiáng)度
- 消防科普教育館管理制度及流程
- 磁力泵安全操作及維護(hù)培訓(xùn)課件
評(píng)論
0/150
提交評(píng)論