資源描述:
《《光柵圖形學(xué)》PPT課件》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)。
1、1光柵圖形學(xué)2本章主要內(nèi)容2.1直線的生成2.2圓的生成2.3橢圓的生成2.4多邊形掃描轉(zhuǎn)換與區(qū)域填充2.5字符的生成3光柵化掃描轉(zhuǎn)換——確定像素集基本圖形的生成與顯示圖元屬性——顏色、寬度42.1直線光柵化顯示算法①線條應(yīng)該顯得筆直:由連續(xù)點(diǎn)組成的直線要顯示在離散網(wǎng)格的平面上,一定會(huì)有不經(jīng)過(guò)網(wǎng)格的點(diǎn)。在這種情況下,必須選擇靠近直線的網(wǎng)格點(diǎn)來(lái)逼近這條直線。繪制直線的要求理想的繪制5②繪制直線的要求◎直線端點(diǎn)位置應(yīng)該準(zhǔn)確:畫(huà)出的線段如果不準(zhǔn)確,往往會(huì)使兩條線之間不能很好的鑲接◎直線濃度應(yīng)該均勻:線段的濃度與單
2、位線段中所顯示的點(diǎn)數(shù)成正比。要保持線段的灰度均勻端點(diǎn)應(yīng)該等距分布。要取得均勻的線段灰度,應(yīng)該保持每單位長(zhǎng)度的點(diǎn)數(shù)是個(gè)常數(shù)6直線的掃描轉(zhuǎn)換:確定最佳逼近于該直線的一組像素,并且按掃描線順序,對(duì)這些像素進(jìn)行寫(xiě)操作。三個(gè)常用算法:數(shù)值微分法(DDA)中點(diǎn)畫(huà)線法Bresenham算法。直線的微分方程:直線的方程:7直線的方程:直線增量的方程:1.數(shù)值微分法(DDA)柵格交點(diǎn)表示像素點(diǎn)位置已知過(guò)端點(diǎn)Ps(xs,ys),Pe(xe,ye)的直線段L:y=kx+b,直線斜率為:①基本思想:當(dāng)△x=1時(shí)算法的實(shí)質(zhì)是:每一步
3、的x,y值是用前一個(gè)的值加上一個(gè)增量獲得的;為了在顯示器上顯示,需要對(duì)其作取整處理。計(jì)算yi+1=yi+k?x當(dāng)?x=1;yi+1=yi+k◎即:當(dāng)x每遞增1,y遞增k(即直線斜率);注意上述分析的算法僅適用于?k?≤1的情形。在這種情況下,x每增加1,y最多增加1?!虍?dāng)?k??1時(shí),y每增加1,x增加1/k。②算法分析增量算法:在一個(gè)迭代算法中,如果每一步的x、y值是用前一步的值加上一個(gè)增量來(lái)獲得,則稱為增量算法。DDA算法特點(diǎn)這種方法直觀,但效率太低,因?yàn)槊恳徊叫枰淮胃↑c(diǎn)乘法和一次舍入運(yùn)算,不利于用硬
4、件實(shí)現(xiàn)。③算法實(shí)現(xiàn)voidCMyView::OnDdaline(){CDC*pDC=GetDC();//獲得設(shè)備指針intx0=100,y0=100,x1=300,y1=200,c=RGB(255,0,0);//定義直線兩端點(diǎn)和直線顏色(紅色)floatx,y,i;floatdx,dy,k;dx=(float)(x1-x0);dy=(float)(y1-y0);k=dy/dx;y=y0;x=x0;if(abs(k)<1){for(;x<=x1;x++){pDC->SetPixel(x,int(y+0.5),
5、c);y=y+k;}}if(abs(k)>=1){for(;y<=y1;y++){pDC->SetPixel(int(x+0.5),y,c);x=x+1/k;}}ReleaseDC(pDC);//釋放設(shè)備指針}例1:畫(huà)直線段P0(0,0)--P1(5,2)xy+0.5int(y+0.5)00+0.5010.4+0.5020.8+0.5131.2+0.5141.6+0.5252.0+0.52優(yōu)點(diǎn):在同一坐標(biāo)上,不可能連續(xù)停留兩次。缺點(diǎn):在此算法中,y、k必須是float,且每一步都必須對(duì)y進(jìn)行舍入取整,不利于
6、硬件實(shí)現(xiàn)。算法特點(diǎn):◎非整數(shù)端點(diǎn)的修正③任意方向直線的算法分析◎
7、k
8、≤1,
9、xe-xs
10、≥
11、ye-ys
12、,則:◎
13、k
14、>1,
15、xe-xs
16、<
17、ye-ys
18、,則:2.中點(diǎn)畫(huà)線法①原理:假定直線斜率019、xs,ys),終點(diǎn)為Pe(xe,ye)的直線方程為:F(x,y)=ax+by+c=0,其中a=ys-ye,b=xe-xs,c=xsye-xeys,則:∴欲判斷M點(diǎn)是在Q點(diǎn)上方還是在Q點(diǎn)下方,只需把M代入F(x,y),并檢查它的符號(hào)。16構(gòu)造判別式:d=F(M)=F(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c當(dāng)d<0,M在直線(Q點(diǎn))下方,取上方Pu;當(dāng)d>0,M在直線(Q點(diǎn))上方,取下方Pd;當(dāng)d=0,選Pu或Pd均可,約定取Pd;能否采用增量算法呢?17◎若d?0;取Pd;則再取下一
20、個(gè)像素的判別式為:d1=F(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c=a(xi+1)+b(yi+0.5)+c+a=d+a;增量為a18◎若d<0;取Pu;則再取下一個(gè)像素的判別式為:d2=F(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c=a(xi+1)+b(yi+0.5)+c+a+b=d+a+b;增量為a+b19◎確定判斷式初值:設(shè):畫(huà)線從(x0,y0)開(kāi)始,d的初值d