版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工程施工合同當(dāng)中的質(zhì)量檢驗標(biāo)準(zhǔn)約定
- 《薄層層析柱層析》課件
- 2025年臨汾貨物運輸駕駛員從業(yè)資格考試系統(tǒng)
- 2025年漢中道路貨運駕駛員從業(yè)資格證考試
- 《行政許可范圍制度》課件
- 住宅小區(qū)施工備案委托協(xié)議
- 排水系統(tǒng)工程合同協(xié)議書范本
- 長期購銷合同變更問題
- 花卉園藝設(shè)備租賃合同
- 舞臺表演音響租賃合同范本
- 《富馬酸盧帕他定口崩片關(guān)鍵質(zhì)量屬性與標(biāo)準(zhǔn)研究》
- 走近非遺 課件 2024-2025學(xué)年湘美版(2024)初中美術(shù)七年級上冊
- 新生兒壞死性小腸結(jié)腸炎臨床診療指南解讀 課件
- 網(wǎng)絡(luò)數(shù)據(jù)安全管理條例
- 2024版2024年【人教版】二年級上冊《道德與法治》全冊教案
- 2024年浙江省單獨招生文化考試語文試卷(含答案詳解)
- 山東省泰安市2024屆高三上學(xué)期期末數(shù)學(xué)試題(含答案解析)
- 少兒編程獲獎?wù)n件
- 2024年《風(fēng)力發(fā)電原理》基礎(chǔ)技能及理論知識考試題庫與答案
- 軟件開發(fā)項目監(jiān)理細(xì)則
- (必會)軍隊文職(藥學(xué))近年考試真題題庫(含答案解析)
評論
0/150
提交評論