- 5
- 0
- 约4.61千字
- 约 6页
- 2016-09-09 发布于山西
- 举报
二维图形变换
宁夏师范学院数学与计算机科学学院
《》实验报告
实验序号: 实验项目名称:
学 号 姓 名 专业、班 实验地点 指导教师 时 间 2014 一、实验目的
1、通过二维几何变换的数学模型,编写缩放、旋转、对称变换;
2、实现图形变换的交互式操作:缩放、旋转、对称变换等;
二、实验内容与步骤x’=x.Sx, y’=y.Sy; 其中Sx, Sy分别为x,y方向的放缩比例系数。
变换矩阵表达式为:
[x’ y’ 1]=[x y 1]
可通过下面不同的比例系数来显示程序运行结果。
(1)Sx=Sy= 1.5;Sx=Sy= 0.5;O对称三种。由于屏幕坐标只有第一象限,我们可以将
原点平移到(500,240)(x,y)θ角度,得到新的坐标(x’,y’)为:
x’=xcosθ-ysinθ, y’=xsinθ+ycosθ;
变换矩阵表示为:
[x’ y’ 1]=[x y 1]
三、实验步骤
1、通过二维几何变换的数学模型,编写缩放、旋转、对称变换;
2、以(500,240)为原点建立图形变换的参考坐标系;
3、通过键盘按键控制图形的缩放、旋转、对称变换;
4、变换图形设定为以Pt[0](540,220)、Pt[1](670,130)、Pt[2](560,120)为顶点的三角形。
步骤:
建立Trans工程文件;
利用Resource View设计菜单,如图所示;
菜单
菜单项
ID值
图形变换(T)
缩放(Z)
ID_TRANSFORM_SCALE
T)
旋转(R)
ID_TRANSFORM_ROTATE
T)
对称(S)
ID_TRANSFORM_SYMMETRY
消息
函数
ID_TRA
SFORM_SCALE
COMMAND
OnFigureCirle
ID_TRANSFORM_ROTATE
COMMAND
OnFigureEllipse
ID_TRANSFORM_SYMMETRY
COMMAND
OnTransformSymmetry
5、添加自定义的成员变量:
CPoint Pt[3]; //三角形定点数组
float dAngle; 角度
Pt[0].x = 540; Pt[0].y = 220;
Pt[1].x = 670; Pt[1].y = 130;
Pt[2].x = 560; Pt[2].y = 120;
dAngle = 0;
6、在视图类的OnDraw()函数中加入下列代码,实现视图绘图。
void CTransView::OnDraw(CDC* pDC)
{
CTransDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
//绘出以以(540,220)、(670,130)、(560,120)为顶点的三角形
pDC-MoveTo(Pt[0]);
pDC-LineTo(Pt[1]);
pDC-LineTo(Pt[2]);
pDC-LineTo(Pt[0]);
//绘出以(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轴);
//控制信息
pDC-TextOut(15,10,对称变换:键盘方向键);
pDC-TextOut(15,28,缩放变换:Z键缩小;X键放大);
pDC-TextOut(15,46,旋转变换:键盘R键);
}
7、添加预编译常量
#define PI 3.1415926
8、分别编写步骤3中向视图类中添加消息映射函数,程序如下:
void CTransView::OnTransformRotate()
{
// TODO: Add your command handler code here
float dRadiusAngle = 30.0 * PI /180.0;
for(int i=0; i3; i++)
{
Pt[i].x = Pt[i].x * cos(dRadiusAngle) - Pt[i].y * sin(dRadiusAngle
原创力文档

文档评论(0)