計算機圖形學上機實驗實現二維圖形的各種轉換_第1頁
計算機圖形學上機實驗實現二維圖形的各種轉換_第2頁
計算機圖形學上機實驗實現二維圖形的各種轉換_第3頁
計算機圖形學上機實驗實現二維圖形的各種轉換_第4頁
計算機圖形學上機實驗實現二維圖形的各種轉換_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、計算機圖形學上機實驗實現二維圖形的各種轉換部門:xxx時問:xxx整理范文,僅供參考,可下載自行編輯昆明理工大學理學院信息與計算科學專業(yè)操作性實驗報告年級:10級 姓名:劉陳學號:201811101128指導教師:胡杰實驗課程名稱:計算機圖形學程序設計開課實驗室:理學院機房216實驗成績:學風(5觀察能力(15操作能力(30調試能力(50其它總分實驗內容:.實驗/作業(yè)題目:用計算機高級語言VC+6.0實現計算機的基本圖元繪制.實驗/作業(yè)課時:2學時.實驗過程(包括實驗環(huán)境、實驗內容的描述、完成實驗要求的知識或技能:實驗環(huán)境:1)硬件:每人一臺PC機2)軟件:windows OS, VC+6.0

2、或以上版本。實驗內容及步驟:1)在VC+環(huán)境下創(chuàng)建MFCS用程序工程 單文檔)2)編輯菜單資源3)添加菜單命令消息處理函數4)添加成員函數實現繪畫添加二維圖形 各個變換的矩 陣源碼添加消實現繪畫添加二維圖形 各個變換的矩 陣源碼息處理實現對二維圖形的.算法描述、流程圖或操作步驟:在lab3View.h文件中的public 內添加變量:void ClearMatrix(double A33。 / 清除變換矩陣void GetMaxY( 。 /獲得屏幕的最大y值void GetMaxX( 。 / 獲得屏幕的最大x 值void Draw(double D3,int。 / 繪制圖形void Calcu

3、late(double P03,double T3。 / 矩陣相乘 b5E2RGbCAPvoidKeepMatrix(doubleOrig3,doubleDest43 。 / 保留矩陣值p1EanqFDPwvoid Tmove(double Tx,double Ty 。 / 平移變換計算void Tscale(double Sx,double Sy 。 / 比例變換計算void Trotate(double thta 。 / 旋轉變換計算void Treflect(double Fx,double Fy 。 / 對稱變換計算void Treform(double b,double c 。 /

4、錯切變換計算在 lab3View.h 文件中的protected 內添加變量:int MaxX,MaxY。/屏幕x和y的最大坐標double P43 。 / 變換點double TM33 。 / 平移變換矩陣double TS33 。 / 比例變換矩陣double TR33 。 / 旋轉變換矩陣double TF33 。 / 對稱變換矩陣double TC33 。 / 錯切變換矩陣double OSquare43/ 矩形坐標double OSquare43/ 矩形坐標double OTriangle43/ double OTriangle43/ 正三角形坐標double OLine43。 /

5、直線坐標int p3 。在 lab3View.cpp 文件中添加如下頭文件:#define ROUND(a int(a+0.5/ 四舍五入#define PI 3.1415926/ 圓周率#include math.h/ 數學頭文件在 lab3View.cpp 文件中的函數CLab3View:OnDraw(CDC* pDC下添加如下代碼:DXDiTa9E3dGetMaxX(。GetMaxY(。pDC-MoveTo(MaxX/2,0。 / 繪制坐標軸pDC-LineTo(MaxX/2,MaxY。pDC-MoveTo(0,MaxY/2。pDC-LineTo(MaxX,MaxY/2。在 lab3Vi

6、ew.cpp 文件中添加如下的各個消息處理函數及代碼:void CLab3View:GetMaxX(/ 獲得屏幕寬度CRect Rect 。GetClientRect(&RectMaxX=Rect.rightvoid CLab3View:GetMaxY(/ 獲得屏幕高度CRect Rect 。GetClientRect(&Rect 。MaxY=Rect.bottom。void CLab3View:ClearMatrix(double A33/ 清除變換矩陣RTCrpUDGiTfor(int i=0。 ifor(int j=0。 jAij=0。 void CLab3View:OnTriangle

7、( / 菜單函數P00=-100/2。 P01=0 。 P02=1 。 / 繪制等邊三角形5PCzVD7HxAP10=100/2 。 P11=0 。 P12=1 。P20=0 。 P21=100/2*tan(60*PI/180。P22=1 。P30=0 。 P31=0 。 P32=1 。p3=3。KeepMatrix(P,OTriangle 。Draw(P,p3。 InvalidateRect(NULL,FALSE 。 / 重畫窗口void CLab3View:OnSquare(/ 菜單函數P02=1 。 / 繪制矩形P02=1 。 / 繪制矩形P11=100/2 。 P12=1P21=-10

8、0/2 。 P22=1。P31=-100/2P10=100/2P20=100/2P30=-100/2P32=1 。p3=4。KeepMatrix(P,OSquare 。Draw(P,p3。 InvalidateRect(NULL,FALSE 。 / 重畫窗口void CLab3View:OnLine(/ 菜單函數P00=-150/2。 P01=0 。 P02=1 。 / 繪制直線P10=150/2 。 P11=0 。 P12=1 。P20=0 。 P21=0 。 P22=1 。P30=0 。 P31=0 。 P32=1 。p3=2。KeepMatrix(P,OLine 。Draw(P,p3。

9、InvalidateRect(NULL,FALSE 。 / 重畫窗口void CLab3View:Draw(double D3,int n/ 繪制圖形 RedrawWindow(。CClientDC dc(this 。CPen pen,*pOldpen 。pen.CreatePen(PS_SOLID,2,RGB(0,0,0 。pOldpen=dc.SelectObject(&pen 。for(int i=0。 iif(i=0Di1dc.MoveTo(ROUND(MaxX/2+Di0,ROUND(MaxY/2- jLBHrnAILgDi1elsedc.LineTo(ROUND(MaxX/2+Di

10、0,ROUND(MaxY/2-Di1 。 xHAQX74J0Xdc.LineTo(ROUND(MaxX/2+D00,ROUND(MaxY/2-D01 。 LDAYtRyKfEdc.SelectObject(pOldpen 。pen.DeleteObject( 。void CLab3View:Calculate(double P03,double T3/兩個矩陣相乘Zzz6ZB2Ltkdouble Ptemp43。KeepMatrix(P,Ptemp 。for(int i=0。 ifor(int j=0。 jPij=Ptempi0*T0j+Ptempi1*T1j+Ptempi2*T2j。dvzf

11、vkwMI1void CLab3View:OnMENUleft(/ 向左平移Tmove(-10,0 。 void CLab3View:OnMENUright(/ 向右平移Tmove(10,0。 void CLab3View:OnMENUup( / 向上平移Tmove(0,10。 void CLab3View二OnMENUdown( 向下平移Tmove(0,-10。 void CLab3View:OnMENUClockwise(/ 順時針旋轉Trotate(30 。 void CLab3View:OnMENUAnticlockwise(/ 逆時針旋轉Trotate(-30 。 void CLab

12、3View:OnMENUIncrease(/ 放大比例Tscale(2,2 。 void CLab3View:OnMENUDecrease(/ 縮小比例Tscale(0.5,0.5 。 void CLab3View:OnMENUXaxis(/X 軸對稱 TOC o 1-5 h z Treflect(1,-1。void CLab3View:OnMENUYaxis(/Y 軸對稱Treflect(-1,1。void CLab3View:OnMENUorg( / 原點對稱Treflect(-1,-1。void CLab3View:OnMENUXdirectionplus(/X 正向錯切 Treform

13、(0,1 。 void CLab3View:OnMENUXdirectionneg(/X 負向錯切Treform(0,-1 。 void CLab3View:OnMENUITYdirectionplus(/Y 正向錯切Treform(1,0 。 void CLab3View:OnMENUYdirectionneg(/Y 負向錯切Treform(-1,0 。 void CLab3View:OnMENUReset( / 復位if(p3=4 TOC o 1-5 h z KeepMatrix(OSquare,P 。if(p3=3KeepMatrix(OTriangle,P 。if(p3=2KeepMa

14、trix(OLine,P 。Draw(P,p3。void CLab3View:Tmove(double Tx,double Ty/ 平移變換矩陣ClearMatrix(TMRedrawWindow(。TM00=1 。 TM11=1 。 TM20=Tx 。 TM21=Ty 。TM22=1 。 rqyn14ZNXICalculate(P,TM 。AfxGetMainWnd(-SetWindowText( 二維幾何變換平移變換 。Draw(P,p3。void CLab3View:Tscale(double Sx,double Sy/ 比例變換矩陣EmxvxOtOcoClearMatrix(TS 。R

15、edrawWindow(。TS00=Sx 。 TS11=Sy 。 TS22=1 。Calculate(P,TS 。AfxGetMainWnd(-SetWindowText( 二維幾何變換比例變換 。Draw(P,p3。void CLab3View:Trotate(double thta/ 旋轉變換矩陣ClearMatrix(TR 。RedrawWindow(。void CLab3View:Treform(double b,double c/void CLab3View:Treform(double b,double c/錯切變換矩陣TR00=cos(thta*PI/180TR01=sin(th

16、ta*PI/180。 SixE2yXPq5TR10=-sin(thta*PI/180。TR11=cos(thta*PI/180。TR22=1 。 6ewMyirQFLCalculate(P,TR 。AfxGetMainWnd(-SetWindowText( 二維幾何變換旋轉變換 。Draw(P,p3。void CLab3View:Treflect(double Fx,double Fy/ 反射變換矩陣 kavU42VRUsClearMatrix(TF 。RedrawWindow(。TF00=Fx 。 TF11=Fy 。 TF22=1 。Calculate(P,TF 。AfxGetMainWnd

17、(-SetWindowText( 二維幾何變換反射變換 。Draw(P,p3。ClearMatrix(TCRedrawWindow(。TC00=1 。 TC01=b 。TC10=c 。 TC11=1 。TC22=1 。 y6v3ALoS89Calculate(P,TC 。AfxGetMainWnd(-SetWindowText( 二維幾何變換錯切變換 。Draw(P,p3。void CLab3View:KeepMatrix(double Orig3,doubleDest3 M2ub6vSTnPint i,j 。for(i=0 。 ifor(j=0 。 jDestij=Origij 。6實驗數據和實驗結果用屏幕圖形表示,可另加附頁):打開Dubug內lab3.exe點擊菜單欄“繪畫”,在工作區(qū)繪畫,畫好后單擊各個功能選項。結果如下: 初始圖1.平移 左移)平移 上移

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論