- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二维图形的几何变换
XX大学计算机科学与技术学院
计算机科学与技术系上机实验报告
课程名称:计算机图形学班级: 实验日期:2012-04-05姓名: 学号: 指导教师: 实验序号:3实验成绩:一、实验名称
二维图形的几何变换二、实验目的及要求
目的:
掌握二维图形的基本几何变换:位置改变(平移、旋转)
要求:
1. 实现二维图形的集合变换。
2. 书写实验报告。
三、实验环境
Win 7
Visual Studio 2010实验原理
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).
在二维平面上任何复杂的变换都可以通过上述基本变换的组合来实现.级合方式在计算机上主要体现在矩阵的乘法运算,即将各个简单变换的矩阵逆序相乘,就可以得到一个总的变换矩阵.利用这个总的变换矩阵就可以对图形进行复合变换.
实验步骤及算法描述
题目:
1.设有一三角形ABC,其中三个顶点为A(5,10),B(1,2),C(8,5),如三角形的顶点A不变,将AB和AC边缩小一倍后,求缩小后的三角形对于直线-2x+4y+3=0的对称变换后的结果图。
2.将一四边形以原点为中心,以15°为间隔旋转
实验步骤及算法描述:
依据算法、步骤编写源程序;
编辑源程序并进行调试;
进行运行测试,并结合情况进行调整;
对运行结果进行保存与分析;
打印源程序或把源程序以文件的形式提交;
按格式书写实验报告。
六、调试过程及实验结果
程序运行截图:
画三角形
以A为顶点,各边缩小一半
关于X轴对称
七、总结
通过这次实验,我对于图形的二位变换过程有了更深刻的认识,同时对于各种图形的生成算法和思想也有了很好的理解,但是在程序的执行过程中遇到了很多的问题,但是最终都还是解决了,还有就是粗心大意,通过这次实验,我对图形学又有了更深的认识和了解。八、附录
核心代码:
class CMyDlg : public CDialog
{
public:
double xy[4][2];
void Point();//图形顶点
void duichen();对称变换
}
BOOL CMyDlg::OnInitDialog()
{
// TODO: Add extra initialization here
//顶点A
xy[0][0]=60;
xy[0][1]=100;
//顶点B
xy[1][0]=10;
xy[1][1]=20;
//顶点C
xy[2][0]=80;
xy[2][1]=50;
//顶点D
xy[3][0]=120;
xy[3][1]=100; }
void CMyDlg::OnPaint()
{
CWnd* pWnd=GetDlgItem(IDC_STATIC);
CDC* pDC=pWnd-GetDC();
pDC-SetViewportOrg(200,160);
pDC-MoveTo(0,-150);//控制纵向坐标
pDC-LineTo(0,200);
pDC-MoveTo(-200,0);//控制横向坐标
pDC-LineTo(180,0);
}
void CMyDlg::OnRadio1()
{
// TODO: Add your control notification handler code here
step=1;
}
void CMyDlg::OnRadio2()
{
// TODO: Add your control notification handler code here
step=2;
}
void CMyDlg::OnCreate()
{
// TODO: Add
文档评论(0)