版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验三二维图形变换一、实验任务1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换;2. 实现图形变换的交互式操作:缩放、旋转、对称变换等;二、实验内容1. 放大缩小变换放大缩小变换公式为:x =x.S x , y =y.S y ; 其中S x ,S y 分别为x,y 方向的放缩比例系数。变换矩阵表达式为:x y (1S x =S y =1.5;等比例放大(2S x =S y =0.5;等比例缩小2. 对称变换包括以x 轴对称、y 轴对称和原点O 对称三种。由于屏幕坐标只有第一象限,我们可以将原点平移到(500,240处。在第一象限画出一个三角形,然后分别求出三个对称图形。3. 旋转变换
2、将图形上的点(x ,y 旋转角度,得到新的坐标(x ,y 为:x =xcos -ysin , y =xsin +ycos ; x y 4.三、设计思路1. 通过二维几何变换的数学模型,编写缩放、旋转、对称变换;2. 以(500,240为原点建立图形变换的参考坐标系;3. 通过键盘按键控制图形的缩放、旋转、对称变换;4. 变换图形设定为以Pt0(540,220、Pt1(670,130、Pt2(560,120为顶点的三角形。步骤:1.建立Trans工程文件;2.利用Resource View设计菜单,如图所示; 3.在CTransView视图类中添加消息映射函数; 4.添加自定义的成员变量:CPo
3、int Pt3;/三角形定点数组float dAngle;/每一次旋转的角度在视图类CPP文件的构造函数中初始化成员变量Pt0.x = 540; Pt0.y = 220;Pt1.x = 670; Pt1.y = 130;Pt2.x = 560; Pt2.y = 120;dAngle = 0;5.在视图类的OnDraw(函数中加入下列代码,实现视图绘图。void CTransView:OnDraw(CDC* pDCCTransDoc* pDoc = GetDocument(;ASSERT_VALID(pDoc;/ TODO: add draw code for native data here/
4、绘出以以(540,220、(670,130、(560,120为顶点的三角形。pDC->MoveTo(Pt0;pDC->LineTo(Pt1;pDC->LineTo(Pt2;pDC->LineTo(Pt0;/绘出以(500,240为原点的坐标轴pDC->MoveTo(100,240;pDC->LineTo(900,240;pDC->MoveTo(500,5;pDC->LineTo(500,400;pDC->TextOut(900,235,"x轴"pDC->TextOut(500,400,"y轴"/
5、控制信息pDC->TextOut(15,10,"对称变换:键盘方向键"pDC->TextOut(15,28,"缩放变换:Z键缩小;X键放大"pDC->TextOut(15,46,"旋转变换:键盘R键"6.添加预编译常量#define PI 3.14159267.分别编写步骤3中向视图类中添加消息映射函数,程序如下:void CTransView:OnTransformRotate(/ TODO: Add your command handler code herefloat dRadiusAngle = 30.0 *
6、 PI /180.0;for(int i=0; i<3; i+Pti.x = Pti.x * cos(dRadiusAngle - Pti.y * sin(dRadiusAngle;Pti.y = Pti.x * sin(dRadiusAngle + Pti.y * cos(dRadiusAngle;RedrawWindow(;/实现图形旋转void CTransView:OnTransformScale(/ TODO: Add your command handler code herefloat dScaleX = 2.0;float dScaleY = 0.5;for(int i=
7、0; i<3; i+Pti.x *= dScaleX;Pti.y *= dScaleY;RedrawWindow(;/实现图形缩放void CTransView:OnTransformSymmetry(/ TODO: Add your command handler code herefor(int i=0; i<3; i+Pti.x += Pti.x;Pti.y += Pti.y;RedrawWindow(;/实现图形对称8.添加成员函数实现键盘交互式控制图形变换函数及代码如下:void CTransView:OnKeyDown(UINT nChar, UINT nRepCnt,
8、 UINT nFlags/ TODO: Add your message handler code here and/or call default int i=0;CPoint TmpPt = Pt0;switch (nCharcase VK_UP: /上for(i=0; i<3; i+Pti.y =240-(Pti.y-240;break;case VK_DOWN: /下for(i=0; i<3; i+Pti.y =240-(Pti.y-240;break;case VK_LEFT: /左for(i=0; i<3; i+Pti.x =500-(Pti.x-500;brea
9、k;case VK_RIGHT: /右for(i=0; i<3; i+Pti.x =500-(Pti.x-500;break;case 0X5A: /Z的ASCII码Pt1 = Pt1 - Pt0;Pt2 = Pt2 - Pt0;Pt0.x = Pt0.y = 0;for(i=1; i<3; i+Pti.x *= 0.5;Pti.y *= 0.5;Pt0 = TmpPt;Pt1 = Pt1 + Pt0;Pt2 = Pt2 + Pt0;break;case 0X58: /X的ASCII码Pt1 = Pt1 - Pt0;Pt2 = Pt2 - Pt0;Pt0.x = Pt0.y = 0
10、;for(i=1; i<3; i+Pti.x *= 2.0;Pti.y *= 2.0;Pt0 = TmpPt;Pt1 = Pt1 + Pt0;Pt2 = Pt2 + Pt0;break;case 0X52 : /R的ASCII码dAngle = -1.0;/每一次逆时针旋转一度float dRadiusAngle = dAngle * PI /180.0;Pt1 = Pt1 - Pt0;Pt2 = Pt2 - Pt0;Pt0.x = Pt0.y = 0;for(int i=1; i<3; i+ /由于CPoint的x和y坐标值都为正值,所以如果计算出是负值来时,就直接赋0Pti.x = (floatPti.x * cos(dRadiusAngle - (floatPti.y * sin(dRadiusAngle;Pti.y = (floatPti.x * sin(dRadiusAngle + (floatPti.y * cos(dRadiusAngle;Pt0 = TmpPt;Pt1 = Pt1 + Pt0; Pt2 = Pt2 + P
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年医疗健康数据共享合同
- 厂房签约合同范例
- 安防员工合同模板
- 智慧零售管理系统研发及应用服务合同
- 农村建路工程合同模板
- 专用货车司机雇佣合同范例
- 2024年体育场馆智能化升级改造合同
- 兼职前台合同范例
- 地库木工合同模板
- 公租房临时合同范例
- 第四章第1节 陆地与海洋第1课时教学设计-2024-2025学年商务星球版七年级上册地理
- 社保知识竞赛考试题及答案
- 九上道德与法治期中复习提纲(知识梳理)(全册)
- 1-4单元期中提升卷(试题)-2024-2025学年五年级上册数学人教版
- 2024版中国血脂管理指南
- 生物化学第二章核酸的结构和功能
- 【仁爱】七上地理知识点总结
- 第四单元达标练习(单元练习)2024-2025学年统编版语文一年级上册
- 期中综合测试 2024-2025学年牛津译林版八年级英语上册
- 2025届山东省部分地区高三语文上学期期初试题汇编:写作专题
- TCECA-G 0304-2024 数字化碳管理平台 总体框架
评论
0/150
提交评论