计算机图形学实验报告实验六.docx
- 文档编号:28040791
- 上传时间:2023-07-07
- 格式:DOCX
- 页数:10
- 大小:106.64KB
计算机图形学实验报告实验六.docx
《计算机图形学实验报告实验六.docx》由会员分享,可在线阅读,更多相关《计算机图形学实验报告实验六.docx(10页珍藏版)》请在冰豆网上搜索。
计算机图形学实验报告实验六
贵州大学实验报告
学院:
计算机科学与信息学院专业:
计科班级:
计科101
姓名
徐艳
学号
1008060042
实验序号
实验六
实验时间
2011-5-13
指导教师
吴云
成绩
实验项目名称
图形的基本变换
实验目的
1.通过实验加深对知识的理解,并知道在生活哪些方面需要应用到这些知识。
2.熟练掌握图形变换(缩放、旋转、平移等)的基本原理;
3.通过编程,学习在VC环境下MFC完成用简单图形的绘制。
实验要求
实现基本图形的变换。
实验原理
1.平移变换
平移变换将一点P沿直线路径从一个坐标集团移动到另一个坐标位置的一个重定位过程。
如果点p1(x1,y1.z1)是由点p(x,y,z)在x轴,y轴和z轴分别移动tx,ty,tz距离得到的,则这两点坐标间的关系为
X1=x+tx,y1=y+ty,z1=z+tz
该式的矢量形式为:
p1=p+T
其中,p1,p,T分别定义为发下向量:
P1=[x1,y1,z1]p=[x,y,z]T=[tx,ty,tz]
2.二维图形变换主要是基于齐次坐标方程,通过一些简单的矩阵运算来实现:
二维齐次坐标变换的矩阵形式是:
矩阵的每个元素都有特殊含义.基中
可以对图形进行缩放,旋转,对称,错切等变换;
是对图形进行平移变换;
的对图形作投影变换;
则是对图形整体进行缩放变换.
例如:
将一个图形在X方向中平移tx个单位,在Y方向平移ty个单位.其实现过程如下:
其中:
x1,y1是变换后的坐标,x,y是变换前的坐标,通过上述变换,(x,y)被平移了P(tx,ty).
在二维平面上任何复杂的变换都可以通过上述基本变换的组合来实现.级合方式在计算机上主要体现在矩阵的乘法运算,即将各个简单变换的矩阵逆序相乘,就可以得到一个总的变换矩阵.利用这个总的变换矩阵就可以对图形进行复合变换.
实验环境
微型计算机、VC++6.0开发环境.
实验步骤
voidCMy2DView:
:
OnDraw(CDC*pDC)
{CMy2DDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
GetMaxX();
GetMaxY();
pDC->MoveTo(MaxX/2,0);
pDC->LineTo(MaxX/2,MaxY);
pDC->MoveTo(0,MaxY/2);
pDC->LineTo(MaxX,MaxY/2);
}voidCMy2DView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{//TODO:
addcleanupafterprinting
}
#ifdef_DEBUG
voidCMy2DView:
:
AssertValid()const
{CView:
:
AssertValid();}
voidCMy2DView:
:
Dump(CDumpContext&dc)const
{CView:
:
Dump(dc);}
CMy2DDoc*CMy2DView:
:
GetDocument()//non-debugversionisinline
{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMy2DDoc)));
return(CMy2DDoc*)m_pDocument;
}
#endif//_DEBUG
voidCMy2DView:
:
ClearMatrix(doubleA[][3])
{for(inti=0;i<3;i++)
{for(intj=0;j<3;j++)
A[i][j]=0;}}
voidCMy2DView:
:
GetMaxY()
{CRectRect;
GetClientRect(&Rect);
MaxX=Rect.right;}
voidCMy2DView:
:
GetMaxX()
{CRectRect;
GetClientRect(&Rect);
MaxY=Rect.bottom;}
voidCMy2DView:
:
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();} voidCMy2DView: : 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];} voidCMy2DView: : 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];} voidCMy2DView: : 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); Draw(P,ntype);} voidCMy2DView: : Tscale(doubleSx,doubleSy) {ClearMatrix(TS); RedrawWindow(); TS[0][0]=Sx; TS[1][1]=Sy; TS[2][2]=1; Calculate(P,TS); Draw(P,ntype);} voidCMy2DView: : 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); Draw(P,ntype);} voidCMy2DView: : Treflect(doubleFx,doubleFy) {ClearMatrix(TF); RedrawWindow(); TF[0][0]=Fx; TF[1][1]=Fy; TF[2][2]=1; Calculate(P,TF); Draw(P,ntype);} voidCMy2DView: : 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); Draw(P,ntype);} 实验内容 通过自定义一个简单的形体,如正方形,三角形,等,实现一些简单的变换,例如: 平移,旋转,对称等 实验结果 选择基本图形: 矩形如下图: 将矩形向上平移: 顺时针旋转45°: 关于原点对称: 实验总结 能过这次实验: 在做实验的过程中我了解了计算机图形学的基本原理,其实说得简单点就是计算机图形学(ComputerGraphics,简称CG),狭义上是一种研究基于物理定律、经验方法以及认知原理,使用各种数学算法处理二维或三维图形数据,生成可视数据表现的科学。 它是计算机科学的一个分支领域与应用方向,主要关注数字合成与操作视觉的图形内容。 广义上来看,计算机图形学不仅包含了从三维图形建模、绘制到动画的过程,同时也包括了对二维矢量图形以及图像视频融合处理的研究。 指导教师意见 签名: 年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 实验 报告