计算机图形学实验报告实验4.docx

上传人:b****3 文档编号:10493318 上传时间:2023-05-26 格式:DOCX 页数:11 大小:412.53KB
下载 相关 举报
计算机图形学实验报告实验4.docx_第1页
第1页 / 共11页
计算机图形学实验报告实验4.docx_第2页
第2页 / 共11页
计算机图形学实验报告实验4.docx_第3页
第3页 / 共11页
计算机图形学实验报告实验4.docx_第4页
第4页 / 共11页
计算机图形学实验报告实验4.docx_第5页
第5页 / 共11页
计算机图形学实验报告实验4.docx_第6页
第6页 / 共11页
计算机图形学实验报告实验4.docx_第7页
第7页 / 共11页
计算机图形学实验报告实验4.docx_第8页
第8页 / 共11页
计算机图形学实验报告实验4.docx_第9页
第9页 / 共11页
计算机图形学实验报告实验4.docx_第10页
第10页 / 共11页
计算机图形学实验报告实验4.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

计算机图形学实验报告实验4.docx

《计算机图形学实验报告实验4.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告实验4.docx(11页珍藏版)》请在冰点文库上搜索。

计算机图形学实验报告实验4.docx

计算机图形学实验报告实验4

贵州大学实验报告

学院:

计算机科学与信息学院专业:

计算机科学与技术班级:

10级计科101班

姓名

吴晨

学号

1008060248

实验组

实验时间

2013-6-10

指导教师

吴云

成绩

实验项目名称

实验四二维图形的几何变换

实验目的

掌握二维图形的基本几何变换:

位置改变(平移、旋转)和变形(缩放、错切,反射、投影等)以及复合变换。

实验要求

1、书写实验报告:

(1)给出算法描述,包括理论、算法和数据结构;

(2)根据算法和数据结构:

编制源程序;

(3)给出实验数据和结果

(4)编制源程序;

2、对于一些较为重要的算法,可以适当给出代码

实验原理

一、标准齐次坐标(x,y,1)二维变换的矩阵表示

1、平移变换

2、旋转变换

3、放缩变换

平移变换只改变图形的位置,不改变图形的大小。

旋转变换不改变图形的形状

放缩变换引起图形形状的变化

4、复合变换结果与变换的顺序有关(矩阵乘法不可交换)

5、对称变换

关于x轴的对称变换:

 

关于y轴的对称变换:

 

实验环境

硬件平台:

PC

软件:

VisualC++6.0

实验步骤

1.掌握算法原理;

2.依据算法,编写源程序并进行调试;

3.对运行结果进行保存与分析;

4.把源程序以文件的形式提交;

按格式书写实验报告。

实验内容

1.设有一三角形ABC,其中三个顶点为A(5,10),B(1,2),C(8,5),如三角形的顶点A不变,将AB和AC边缩小一倍后,求缩小后的三角形对于直线-2x+4y+3=0的对称变换后的结果图。

2.将一四边形以原点为中心,以15°为间隔旋转。

实验结果

1、执行后选择所需绘制的图形形如下

2、绘制三角形,根据要求画出如下的三角形

3.改变边的大小,对称转换得到如下的结果

4.绘制四边形,以中点为中心

5、15°为间隔旋转得到如下的结果

实验总结

通过这次实验,我对二维图形的基本几何变换(平移、旋转、缩放、错切、反射、投影)和复合变换的理解更加深入了,在对图形进行复合变换时,将几个基本几何变换矩阵按一定顺序相乘便能得到一个复合矩阵,这个复合矩阵能够决定变换后图形的最终位置、形状和大小的信息。

在产生复合矩阵时,因为矩阵乘法并不满足交换律,所以如果基本几何变换矩阵相乘的顺序不同,可能会得到不同的复合矩阵,也就生成了不同的最终变换图形。

部分

源代码

voidCTestView:

:

ClearMatrix(doubleA[3][3])//清除变换矩阵

{

for(inti=0;i<3;i++)

{

for(intj=0;j<3;j++)

A[i][j]=0;

}

}

voidCTestView:

:

OnMENUChoose()//菜单函数

{

//TODO:

Addyourcommandhandlercodehere

Picdlgdlg;

if(dlg.DoModal()==IDOK)

{

if(dlg.m_Square==TRUE)//绘制矩形

{

P[0][0]=-dlg.m_Slength/2;P[0][1]=dlg.m_Swidth/2;P[0][2]=1;

P[1][0]=dlg.m_Slength/2;P[1][1]=dlg.m_Swidth/2;P[1][2]=1;

P[2][0]=dlg.m_Slength/2;P[2][1]=-dlg.m_Swidth/2;P[2][2]=1;

P[3][0]=-dlg.m_Slength/2;P[3][1]=-dlg.m_Swidth/2;P[3][2]=1;

ntype=4;

KeepOriginalMatrix(P,OSquare);

Draw(P,ntype);

}

if(dlg.m_Triangle==TRUE)//绘制等边三角形

{

P[0][0]=-dlg.m_Tlength/2;P[0][1]=0;P[0][2]=1;

P[1][0]=dlg.m_Tlength/2;P[1][1]=0;P[1][2]=1;

P[2][0]=0;P[2][1]=dlg.m_Tlength/2*tan(60*PI/180);P[2][2]=1;

P[3][0]=0;P[3][1]=0;P[3][2]=1;

ntype=3;

KeepOriginalMatrix(P,OTriangle);

Draw(P,ntype);

}

if(dlg.m_Line==TRUE)//绘制直线

{

P[0][0]=-dlg.m_Llength/2;P[0][1]=0;P[0][2]=1;

P[1][0]=dlg.m_Llength/2;P[1][1]=0;P[1][2]=1;

P[2][0]=0;P[2][1]=0;P[2][2]=1;

P[3][0]=0;P[3][1]=0;P[3][2]=1;

ntype=2;

KeepOriginalMatrix(P,OLine);

Draw(P,ntype);

}

}

InvalidateRect(NULL,FALSE);//重画窗口

}

voidCTestView:

:

Draw(doubleD[][3],intn)//绘制原始图形

{

RedrawWindow();

CClientDCdc(this);

CPenpen,*pOldpen;

pen.CreatePen(PS_SOLID,3,RGB(0,0,255));

pOldpen=dc.SelectObject(&pen);

for(inti=0;i

{

if(i==0)

dc.MoveTo(ROUND(MaxX/2+D[i][0]),ROUND(MaxY/2-D[i][1]));

else

dc.LineTo(ROUND(MaxX/2+D[i][0]),ROUND(MaxY/2-D[i][1]));

}

dc.LineTo(ROUND(MaxX/2+D[0][0]),ROUND(MaxY/2-D[0][1]));

dc.SelectObject(pOldpen);

pen.DeleteObject();

}

voidCTestView:

:

Calculate(doubleP0[][3],doubleT[][3])//两个矩阵相乘

{

doublePtemp[4][3];

KeepOriginalMatrix(P,Ptemp);

for(inti=0;i<4;i++)

for(intj=0;j<3;j++)

P[i][j]=Ptemp[i][0]*T[0][j]+Ptemp[i][1]*T[1][j]+Ptemp[i][2]*T[2][j];

}

voidCTestView:

:

Tmove(doubleTx,doubleTy)//平移变换矩阵

{

ClearMatrix(TM);

RedrawWindow();

TM[0][0]=1;

TM[1][1]=1;

TM[2][0]=Tx;

TM[2][1]=Ty;

TM[2][2]=1;

Calculate(P,TM);

AfxGetMainWnd()->SetWindowText("二维基本几何变换-平移变换");

Draw(P,ntype);

}

voidCTestView:

:

Tscale(doubleSx,doubleSy)//比例变换矩阵

{

ClearMatrix(TS);

RedrawWindow();

TS[0][0]=Sx;

TS[1][1]=Sy;

TS[2][2]=1;

Calculate(P,TS);

AfxGetMainWnd()->SetWindowText("二维基本几何变换-比例变换");

Draw(P,ntype);

}

voidCTestView:

:

Trotate(doublethta)//旋转变换矩阵

{

ClearMatrix(TR);

RedrawWindow();

TR[0][0]=cos(thta*PI/180);

TR[0][1]=sin(thta*PI/180);

TR[1][0]=-sin(thta*PI/180);

TR[1][1]=cos(thta*PI/180);

TR[2][2]=1;

Calculate(P,TR);

AfxGetMainWnd()->SetWindowText("二维基本几何变换-旋转变换");

Draw(P,ntype);

}

voidCTestView:

:

Treflect(doubleFx,doubleFy)//反射变换矩阵

{

ClearMatrix(TF);

RedrawWindow();

TF[0][0]=Fx;

TF[1][1]=Fy;

TF[2][2]=1;

Calculate(P,TF);

AfxGetMainWnd()->SetWindowText("二维基本几何变换-反射变换");

Draw(P,ntype);

}

voidCTestView:

:

Treform(doubleb,doublec)//错切变换矩阵

{

ClearMatrix(TC);

RedrawWindow();

TC[0][0]=1;

TC[0][1]=b;

TC[1][0]=c;

TC[1][1]=1;

TC[2][2]=1;

Calculate(P,TC);

AfxGetMainWnd()->SetWindowText("二维基本几何变换-错切变换");

Draw(P,ntype);

}

voidCTestView:

:

KeepOriginalMatrix(doubleOrig[][3],doubleDest[][3])//保留矩阵

{

inti,j;

for(i=0;i<4;i++)

for(j=0;j<3;j++)

Dest[i][j]=Orig[i][j];

}

指导教师意见

 

签名:

年月日

注:

可根据教学需要对以上栏目进行增减。

表格内容可根据内容扩充。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2