計算機(jī)圖形學(xué),直線,圓,二維變換_第1頁
計算機(jī)圖形學(xué),直線,圓,二維變換_第2頁
計算機(jī)圖形學(xué),直線,圓,二維變換_第3頁
計算機(jī)圖形學(xué),直線,圓,二維變換_第4頁
計算機(jī)圖形學(xué),直線,圓,二維變換_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、.實驗一、直線的生成實驗?zāi)康模?、 掌握DDA直線畫法、中點畫線法和Bresenham畫線法2、 掌握VC+簡單程序設(shè)計方法實驗內(nèi)容:根據(jù)提供的程序框架,修改部分代碼,完成畫一條直線的功能(中點畫線法或者Bresenham畫線法任選一),只要求實現(xiàn)在第一象限內(nèi)的直線。實驗步驟和方法:首先啟動Visual C+ 6.0(注意,其它版本程序無法正確編譯),文件(file)打開工作空間(open workspace)。打開 實驗12用基本圖形生成基本圖形生成.dsw。在fileview窗口,source file下,雙擊 直線生成view.cpp,或者classview窗口下,cmyview類下相應(yīng)

2、的函數(shù),按注釋改寫下列函數(shù):void CMyView:OnDdaline() (此為DDA生成直線)void CMyView:OnBresenhamline()(此為Bresenham畫直線)void CMYView:OnMidPointLine()(此為中點畫線法)程序代碼說明:1、直線的兩個端點,由對話框輸入,給定程序已經(jīng)完成輸入代碼。2、SetPixel的用法:COLORREF SetPixel(int x, int y, COLORREF crColor);/x,y為坐標(biāo)點。COLORREF SetPixel(POINT point, COLORREF crColor);/point為

3、坐標(biāo)點。3、 本實驗事先提供DDA話直線的函數(shù)示范(紅色部分是重點,其它部分可以不看)中點畫直線函數(shù)和BresenHam畫直線函數(shù)由同學(xué)們參照dda直線的示例函數(shù)自己完成。/以下為DDA畫直線的源程序float x,y,dx,dy,k;dx=(float)(xb-xa);dy=(float)(yb-ya);k=dy/dx;x=xa;y=ya;if(abs(k)1)for (x=xa;xSetPixel(x, int(y+0.5),COLOR);y=y+k;if(abs(k)=1)for(y=ya;ySetPixel(int(x+0.5),y,COLOR);x=x+1/k;/DDA畫直線結(jié)束/以

4、下為中點畫直線的源程序float a,b,d1,d2,d,x,y; a=ya-yb,b=xb-xa,d=2*a+b; d1=2*a,d2=2*(a+b); x=xa,y=ya; pdc-SetPixel(x,y,COLOR); while(xxb) if(dSetPixel(x,y,COLOR); /中點畫直線結(jié)束/以下為Bresenham畫直線的源程序int i,s1,s2,interchange;float f,x,y,deltax,deltay,temp;x=xa;y=ya;deltax=abs(xb-xa);deltay=abs(yb-ya);if(xb-xa=0) s1=1;else

5、 s1=-1;if(yb-ya=0) s2=1;else s2=-1;if(deltaydeltax) temp=deltax;deltax=deltay;deltay=temp;interchange=1;else interchange=0;f=2*deltay-deltax;pdc-SetPixel(x,y,COLOR);for(i=1;i=0)if(interchange=1) x+=s1;else y+=s2;pdc-SetPixel(x,y,COLOR);f=f-2*deltax;else if(interchange=1) y+=s2;else x+=s1;f=f+2*delta

6、y;/Bresenham畫直線結(jié)束;.實驗二、圓的生成(中點和Bresenham法)實驗?zāi)康模?、 掌握bresenham畫圓的算法。2、 掌握VC+簡單程序設(shè)計方法實驗內(nèi)容:根據(jù)提供的程序框架,修改部分代碼,用Bresenham和中點畫圓法畫一段圓弧或者畫圓。實驗步驟和方法:同實驗一,修改下列函數(shù):void CMyView:OnBresenhamCircle()void CMyView:OnMidpointCircle()程序代碼說明:1、圓的圓心為原點,半徑為給定參數(shù),由函數(shù)編寫時給定,不要求人機(jī)交換。/以下請同學(xué)們自己編寫畫圓函數(shù)int x,y;int c=0;float d;x=0;y

7、=radius;d=1.25-radius;pdc-SetPixel(x0+x),(y0+y),c);pdc-SetPixel(x0-x),(y0+y),c);pdc-SetPixel(x0+x),(y0-y),c);pdc-SetPixel(x0-x),(y0-y),c);pdc-SetPixel(x0+y),(y0+x),c);pdc-SetPixel(x0-y),(y0+x),c);pdc-SetPixel(x0+y),(y0-x),c);pdc-SetPixel(x0-y),(y0-x),c);while (x=y)if (dSetPixel(x0+x),(y0+y),c);pdc-S

8、etPixel(x0-x),(y0+y),c);pdc-SetPixel(x0+x),(y0-y),c);pdc-SetPixel(x0-x),(y0-y),c);pdc-SetPixel(x0+y),(y0+x),c);pdc-SetPixel(x0-y),(y0+x),c);pdc-SetPixel(x0+y),(y0-x),c);pdc-SetPixel(x0-y),(y0-x),c);/中點畫圓結(jié)束/以下請同學(xué)們自己編寫畫圓函數(shù)int c=0;int x=0,y=radius,p=3-2*radius;while(xSetPixel(x0+x),(y0+y),c);pdc-SetPix

9、el(x0-x),(y0+y),c);pdc-SetPixel(x0+x),(y0-y),c);pdc-SetPixel(x0-x),(y0-y),c);pdc-SetPixel(x0+y),(y0+x),c);pdc-SetPixel(x0-y),(y0+x),c);pdc-SetPixel(x0+y),(y0-x),c);pdc-SetPixel(x0-y),(y0-x),c);if(pSetPixel(x0+x),(y0+y),c);pdc-SetPixel(x0-x),(y0+y),c);pdc-SetPixel(x0+x),(y0-y),c);pdc-SetPixel(x0-x),(

10、y0-y),c);pdc-SetPixel(x0+y),(y0+x),c);pdc-SetPixel(x0-y),(y0+x),c);pdc-SetPixel(x0+y),(y0-x),c);pdc-SetPixel(x0-y),(y0-x),c);/BresenHam畫圓結(jié)束實驗三、二維圖形的平移實驗?zāi)康模?、 驗證二維圖形的幾何變換矩陣2、 掌握VC+簡單程序設(shè)計實驗內(nèi)容:以一條直線段為例,完成目標(biāo)的平移(縮放等其它變換選做)軟件的結(jié)果:點擊平移,首先會彈出一個對話框要求輸入直線的起點和中點,以及平移的數(shù)值,確定后,原直線和平移后的直線同時顯示。實驗步驟和方法:1、 打開實驗34用/二維變

11、換.dsw2、 改寫二維變換view.cpp里的void CMyView:OnMove()函數(shù)(需要改寫的地方已經(jīng)做了說明)。3、 生成直線的函數(shù)采用VC里的函數(shù)。4、 函數(shù)的主要任務(wù)是計算出平移后的坐標(biāo)。程序代碼說明:繪制一條直線需要兩個函數(shù)。pdc-MoveTo(int x, int y); 將當(dāng)前點移動至(x ,y)坐標(biāo)pdc-LineTo(int x, int y); 從當(dāng)前點繪制一條直線至(x,y)坐標(biāo),并將當(dāng)前點移動至(x,y)。比如,要繪制一條直線,起點(x0, y0),終點(x1, y1):pdc-MoveTo(x0,y0);pdc-LineTo(x1,y1);/此處請同學(xué)們自

12、己編寫,計算出直線兩個端點xa1,ya1,xb1,yb1,直線的平移。xa1=xa+dx;ya1=ya+dy;xb1=xb+dx;yb1=yb+dy;實驗四、二維圖形的旋轉(zhuǎn)實驗?zāi)康模?、 驗證二維圖形的幾何變換矩陣2、 掌握VC+簡單程序設(shè)計實驗內(nèi)容:以一個三角形為例,完成二維圖形繞任一點旋轉(zhuǎn)。軟件的結(jié)果:點擊平移,首先會彈出一個對話框要求輸入三角形的三個頂點,以及要繞著旋轉(zhuǎn)的點和旋轉(zhuǎn)角度,確定后,原圖形和變換后的圖形同時顯示。實驗步驟和方法:1、 打開二維變換.dsw2、 改寫二維變換view.cpp里的void CMyView:OnRotate()函數(shù)(需要改寫的地方我已經(jīng)做了說明)。3、

13、 生成直線的函數(shù)采用VC里的函數(shù)。4、 函數(shù)的主要任務(wù)是計算出變換后的坐標(biāo)。程序代碼說明:繪制一條直線需要兩個函數(shù)。pdc-MoveTo(int x, int y); 將當(dāng)前點移動至(x ,y)坐標(biāo)pdc-LineTo(int x, int y); 從當(dāng)前點繪制一條直線至(x,y)坐標(biāo),并將當(dāng)前點移動至(x,y)。比如,要繪制一條直線,起點(x0, y0),終點(x1, y1):pdc-MoveTo(x0,y0);pdc-LineTo(x1,y1);/此處請同學(xué)們自己編寫,計算出變換后的三角形的三個端點xa1,ya1,xb1,yb1,xc1,yc1,三角形的旋轉(zhuǎn)。 xa1=(xa-x)*cos

14、(angle)-(ya-y)*sin(angle)+x;ya1=(xa-x)*sin(angle)+(ya-y)*cos(angle)+y;xb1=(xb-x)*cos(angle)-(yb-y)*sin(angle)+x;yb1=(xb-x)*sin(angle)+(yb-y)*cos(angle)+y;xc1=(xc-x)*cos(angle)-(yc-y)*sin(angle)+x;yc1=(xc-x)*sin(angle)+(yc-y)*cos(angle)+y;實驗五、Bezier曲線的生成實驗?zāi)康模?、 掌握曲線的參數(shù)化表示方法2、 掌握Bezier曲線的生成算法實驗內(nèi)容:給定四個或者四個以

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論