隨著社會(huì)一步步向前發(fā)展,報(bào)告不再是罕見(jiàn)的東西,多數(shù)報(bào)告都是在事情做完或發(fā)生后撰寫(xiě)的。那么我們?cè)撊绾螌?xiě)一篇較為完美的報(bào)告呢?下面是小編帶來(lái)的優(yōu)秀報(bào)告范文,希望大家能夠喜歡!
計(jì)算機(jī)繪圖實(shí)驗(yàn)報(bào)告總結(jié)篇一
計(jì)信學(xué)院 專(zhuān)業(yè):
計(jì)科 班級(jí):
計(jì)科 101 姓名 羅琳 學(xué)號(hào) 1008060016 實(shí)驗(yàn)組 實(shí)驗(yàn)時(shí)間 2013-3-27 指導(dǎo)教師 吳云 成績(jī) 實(shí)驗(yàn)項(xiàng)目名稱(chēng) 直線生成算法 實(shí)驗(yàn)?zāi)康?通過(guò)本實(shí)驗(yàn),了解并掌握在光柵顯示系統(tǒng)中直線的生成和顯示算法,熟悉相關(guān)開(kāi)發(fā)平臺(tái)。為后繼實(shí)驗(yàn)打下基礎(chǔ)。
實(shí)驗(yàn)要求 實(shí)現(xiàn) dda 畫(huà)線算法,中點(diǎn)畫(huà)線算法和 bresenham 畫(huà)線算法,并比較 實(shí)驗(yàn)原理 數(shù)值微分法(dda-digital differential analyzer)算法原理:
設(shè)直線兩端點(diǎn)為:p1(x1,y1)及 p0(x0,y0), 則直線斜率為:
直線方程為:
當(dāng) | k |<=1,x 每增加 1,y 最多增加 1(或增加小于 1)。
當(dāng) | k |>1 ,y 每增加 1,x 最多增加 1(或增加小于 1)。
0 10 1x xy yxyk??????b kx yi i? ?? ?? ?1 1111| | 1i i i ii ii iy kx b k x x b kx b k xy y k xlet xy y k k? ???? ? ? ?? ? ? ? ? ?? ? ?? ?? ? ?y i x i y i +1 x i +1 ? ?11111| | 1i iii iy y b b yxk k k k klet yx x kk????? ? ? ? ?? ?? ? ?
算法分析:
:
復(fù)雜度:加法+取整 優(yōu)點(diǎn):避免了 y=kx+b 方程中的浮點(diǎn)乘法,比直接用點(diǎn)斜式畫(huà)線快。
缺點(diǎn):需浮點(diǎn)數(shù)加法及取整運(yùn)算,不利于硬件實(shí)現(xiàn)。
中點(diǎn)畫(huà)線法 算法原理:
設(shè) 0
中點(diǎn)算法用整數(shù)加法及比較代替了dda 中的浮點(diǎn)數(shù)加法及取整運(yùn)算,效率大大提高。假設(shè)直線的起點(diǎn)、終點(diǎn)分別為:(x 0 ,y 0),(x 1 ,y 1),直線將二維空間劃分為三個(gè)區(qū)域: 直線方程: f(x,y)=ax+by+c=0 其中: a=-(y1-y0),b=(x1-x0),c=-b(x1-x0)如 f(x,y)=0, 則(x,y)在直線上 如 f(x,y)<0, 則(x,y)在直線下方 如 f(x,y)>0, 則(x,y)在直線上方 因此,可將中點(diǎn) m 的坐標(biāo)(xp+1,yp+0.5)代入直線方程,并判斷其符號(hào)即可確定象素點(diǎn)的選取。
定義決策變量: d= f(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c 如果 d>0,則m在理想直線上方,選正右方p2點(diǎn); 如果 d<0,則 m 在理想直線下方,選右上方 p1 點(diǎn); 如果 d=0,則 m 在理想直線上,選 p1/ p2 點(diǎn)。
由于 d 是 xi 和 yi 的線性函數(shù),可采用增量計(jì)算提高運(yùn)算效率。
1.如由 pi 點(diǎn)確定在是正右方 p2 點(diǎn)(d>0).,則新的中點(diǎn) m 僅在 x 方向加 1,新的 d 值為: d new =f(xi+2,yi+0.5)=a(xi+2)+b(yi+0.5)+c 而 d old =f(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c y x f(x,y)=0f(x,y)>0f(x,y)<0(x1,y1)(x0,y0)x pi=(xi, yi)m q p1 p2 y
d new =d old +a= d old-dy 2.如由 pi 點(diǎn)確定是右上方 p1 點(diǎn)(d<0),則新的中點(diǎn) m 在 x 和 y 方向都增加 1,新的 d 值為 d new =f(xi+2,yi+1.5)=a(xi+2)+b(yi+1.5)+c 而 d old =f(xi+1,yi+0.5)=a(xi+1)+b(yi+0.5)+c d new =d old +a+b= d old-dy+dx 在每一步中,根據(jù)前一次第二迭中計(jì)算出的 d 值的符號(hào),在正右方和右上方的兩個(gè)點(diǎn)中進(jìn)行選擇。d 的初始值: d0=f(x0+1,y0+0.5)=f(x0,y0)+a+b/2=a+b/2=-dy+dx/2 f(x0,y0)=0,(x0,y0)在直線上。
為了消除 d 的分?jǐn)?shù),重新定義 f(x,y)=2(ax+by+c)則每一步需要計(jì)算的 d new 是簡(jiǎn)單的整數(shù)加法 dy=y1-y0,dx=x1-x0 d0=-2dy+dx d new =d old-2*dy,當(dāng) d old >=0 d new =d old-2(dy-dx),當(dāng) d old <0 bresenham 畫(huà)線算法 :
算法原理:
與 dda 算法相 似,bresenham 畫(huà)線算法也要在每列象素中找到與理想直線最逼近的象素點(diǎn)。
根 據(jù) 直 線的斜率來(lái)確定變量在 x 或 y 方向遞增一個(gè)單位。另一個(gè)方向 y 或 x 的增量為 0 或 1,它取決于實(shí)際直線與最接近網(wǎng)格點(diǎn)位置的距離。這一距離稱(chēng)為誤差。算法的巧妙構(gòu)思,使每次只需檢查誤差項(xiàng)(增量)的符號(hào)即可。
定義決策變量:
d = d+k(0
void clinedlg::onradioplus()//缺省選擇 { // todo: add your control notification handler code here algorithm=0;//算法選擇 } void clinedlg::onradio(){
// todo: add your control notification handler code here algorithm=2;} void clinedlg::onradio1(){ // todo: add your control notification handler code here algorithm=1;} void clinedlg::onlinedraw(){ // todo: add your control notification handler code here cwnd* pwnd=getdlgitem(idc_static);cdc* pcontroldc=pwnd->getdc();pwnd->invalidate();pwnd->updatewindow();pcontroldc->setviewportorg(0,0);pcontroldc->moveto(0,0);pcontroldc->lineto(0,335);pcontroldc->moveto(0,0);pcontroldc->lineto(400,0);int i,j;for(i=0;i<=400;i+=10)for(j=0;j<=335;j++)pcontroldc->setpixel(i,j,rgb(200,200,200));for(i=0;i<=335;i+=10)for(j=0;j<=400;j++)pcontroldc->setpixel(j,i,rgb(200,200,200));int x1,y1,x0,y0;updatedata(true);
x1=m_x1;x0=m_x0;y1=m_y1;y0=m_y0;switch(algorithm){ case 0: { int a,b,d1,d2,d,x,y;float dy,dx,m;dx=float(x1-x0);dy=float(y1-y0);m=dy/dx;if(m<=1){ a=y0-y1;b=x1-x0;d=2*a+b;d1=2*a;d2=2*(a+b);x=x0;y=y0;pcontroldc->setpixel(x,y,rgb(0,255,0));while(x
x++;e=e+2*dy;if(e>=0){y++;e=e-2*dx;} } } else { dx=y1-y0;dy=x1-x0;e=-dy;x=y0;y=x0;for(i=0;i<=dx;i++){ pcontroldc->setpixel(y,x,rgb(255,0,0));x++;e=e+2*dy;if(e>=0){y++;e=e-2*dx;} } } break;} } } void clinedlg::ondelete(){ // todo: add your control notification handler code here invalidate();//清除作圖區(qū)的線 }
實(shí)驗(yàn)結(jié)果 畫(huà)線結(jié)果為:
2.中點(diǎn)畫(huà)線結(jié)果為:
ham 畫(huà)線結(jié)果為:
4.點(diǎn)擊清除結(jié)果為:
實(shí)驗(yàn)總結(jié) 通過(guò)實(shí)驗(yàn)更加熟悉 mfc 的運(yùn)用,對(duì) dda、中點(diǎn)算法和 bresenham 算法原理有了更加清楚的了解。它們各自有自己的特點(diǎn),bresenham 算法不用計(jì)算斜率,所以不做除法;dda 算法是浮點(diǎn)數(shù)運(yùn)算,不易硬件實(shí)現(xiàn);中點(diǎn)畫(huà)線法只有整數(shù)運(yùn)算,不含乘除法。因?yàn)榛A(chǔ)知識(shí)不扎實(shí),實(shí)驗(yàn)過(guò)程中遇到不少問(wèn)題。明白要多動(dòng)手實(shí)踐才能學(xué)好。
指導(dǎo)教師意見(jiàn) 簽名:
年 月 日
計(jì)算機(jī)圖形學(xué)實(shí)驗(yàn)報(bào)告(范文)實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)一圖形學(xué)實(shí)驗(yàn)三計(jì)算機(jī)導(dǎo)論實(shí)驗(yàn)二實(shí)驗(yàn)報(bào)告(范文)計(jì)算機(jī)導(dǎo)論實(shí)驗(yàn)二實(shí)驗(yàn)報(bào)告(范文)