RB软工网141孙景乾07104117.docx
- 文档编号:9441331
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:18
- 大小:106.69KB
RB软工网141孙景乾07104117.docx
《RB软工网141孙景乾07104117.docx》由会员分享,可在线阅读,更多相关《RB软工网141孙景乾07104117.docx(18页珍藏版)》请在冰豆网上搜索。
RB软工网141孙景乾07104117
计算机图形学报告
课题名称:
二维图形变换
专业:
网络软件开发
班级:
RB软工网141
学号:
201407104117
学生姓名:
孙景乾
指导教师:
杜俊俐
2016年6月18日
目录
第一章概述3
第二章系统设计与实现4
2.1系统框架总体设计4
2.2平移功能设计与实现4
2.2.1理论基础4
2.2.2程序设计5
2.2.3运行结果与截图5
2.3旋转功能设计与实现7
2.3.1理论基础7
2.3.2程序设计8
2.3.3运行结果与截图8
2.4比例变换功能设计与实现10
2.4.1理论基础10
2.4.2程序设计10
2.4.3运行结果与截图11
2.5错切功能设计与实现12
2.5.1理论基础12
2.5.2程序设计13
2.5.3运行结果与截图13
2.6对称功能设计与实现15
2.6.1理论基础15
2.6.2程序设计16
2.6.3运行结果与截图16
第三章总结19
第一章概述
计算机图形学(ComputerGraphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。
二维变换:
二维指长和宽,即平面。
二维几何变换就是平面几何的几种变换。
如平移,旋转,翻折等的变换。
系统功能:
1)平移;
2)旋转;
3)比例;
4)错切;
5)对称
第二章系统设计与实现
2.1系统框架总体设计
系统框架如下图所示,有平移、旋转、缩放、错切、对称、复原等功能。
2.2平移功能设计与实现
2.2.1理论基础
平移是不穿生变形而移动物体的变换,物体的每一个点移动相同的一个坐标。
原三角形到平移后的三角形满足P'=P+T的形式,T为平移变换矩阵。
所以满足下面的关系式:
平移变换如下:
(TYPEx,TYPEy);
二个函数参数就是目标分别沿二个轴向平移的偏移量。
这个函数表示用于这二个偏移量生成的矩阵乘以当前矩阵
2.2.2程序设计
voidCCase9View:
:
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);
}
2.2.3运行结果与截图
原图:
沿X轴平移:
沿Y轴平移:
2.3旋转功能设计与实现
2.3.1理论基础
二维旋转变换是将物体沿xy平面内的圆弧路径重定位的过程。
为了实现旋转,需要先指定旋转的角度θ和物体选绕旋转的旋转点,并以逆时针方向旋转为正角度,对应图元点的坐标值满足关系式:
x'=xcosθ-ysinθ
y'=xsinθ+ycosθ
将该方程组用矩阵形式表示成:
P'=P·R,R为旋转变换矩阵,其中
满足矩阵。
旋转变换函数如下:
(TYPE angle, TYPE x, TYPE y);
函数中第一个参数是表示目标沿从点(x, y)到原点的方向逆时针旋转的角度,二个参数是旋转的方向点坐标。
这个函数表示用这三个参数生成的矩阵乘以当前矩阵。
2.3.2程序设计
voidCCase9View:
:
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);
}
2.3.3运行结果与截图
原图:
旋转变换后:
2.4比例变换功能设计与实现
2.4.1理论基础
它改变显示图形的比例。
新图形p'的每个图元点的坐标值是原图形p中每个图元点的坐标值分别乘以比例常数Sx和Sy,所以对应点之间的坐标值满足关系式:
x'=x·Sx
y'=y·Sy
将方程写成矩阵的形式表示成:
P'=P·S,S为比例变换的变换矩阵,其中
满足矩阵
比例变换函数如下:
(TYPE x, TYPE y);
二个函数参数值就是目标分别沿二个轴向缩放的比例因子。
这个函数表示用这二个比例因子生成的矩形乘以当前矩阵。
这个函数能完成沿相应的轴对目标进行拉伸、压缩和反射三项功能。
以参数x为例,若当x大于1.0时,表示沿x轴方向拉伸目标;若x小于1.0时,表示沿x轴方向收缩目标;若x=-1.0表示沿x轴反射目标。
2.4.2程序设计
voidCCase9View:
:
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);
}
2.4.3运行结果与截图
原图:
等比例放大:
等比例缩小:
2.5错切功能设计与实现
2.5.1理论基础
错切会使物体形状发生变化的变换,经过错切的物体好像是由已经相互滑动的内部夹层组成,错切变换是将左边点p(x,y)沿x轴和y轴发生不等量的变换,得到p'(x',y')的过程。
沿X轴错切:
x'=x+△x
y'=y
矩阵如图所示:
其中SHx=△x。
沿Y轴错切与沿x轴错切相反,保持x轴不变,y轴改变。
x'=x
y'=△y+y
实现图像错切变换时,必须考虑图像将目标像素点坐标变为源相点坐标时小数部分对像素值的影响,由于错切以后图像会在宽或者高上比原图像大,多出来的这些背景像素默认填充颜色为黑色。
根据目标像素计算源像素的公式可以根据上面的数学公式运算以后分别求的x1,y1的值。
2.5.2程序设计
voidCCase9View:
:
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);
}
2.5.3运行结果与截图
原图:
沿X轴正向错切:
沿Y轴正方向错切:
2.6对称功能设计与实现
2.6.1理论基础
二维反射变换的形式为:
x'=axxx+axyy+bx
y'=ayxx+ayyy+by
变换的坐标x'和y'都是原始坐标x和y的线性函数。
参数aij和bk是由变换类型确定的常数。
反射射变换具有平行线转换成平行线和有限点映射到有限点的一般特性。
2.6.2程序设计
voidCCase9View:
:
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);
}
2.6.3运行结果与截图
原图:
沿x轴对称:
沿y轴对称:
沿原点对称:
第3章总结
计算机图形学技术是随着计算机技术在图形学处理领域中的应用而发展起来的,是伴随着电子计算机及外围设备的发展而产生和发展起来的,它是计算机应用学科的一个重要分支。
在设计过程中,运用到了书本上所学的知识,比如说图形的平移、旋转、对称、错切、比例变换等,通过本次课程设计,对图形学的知识有了更深的了解,了解到在图形模式下各个点坐标能确定的图形的位置和大小。
在设计时,刚开始对整体位置坐标很盲目,不知道该从那里开始计算,后来通过同学的提示及老师的讲解,最后成功的计算了出来.在编译及运行代码时也出现了很多的错误,比如说图形不能初始化,填充时打不到自己想要的结果等,通过自己细心的检查及改正,最终能够运行成功并显示在屏幕上,这次的课程设计不仅让我丰富了计算机图形学的理论知识而且还学到了很到书本以外的知识,让我学会无论干任何事都应沉着,冷静,善于思考,善于发现,善于改正。
在以后的学习中我会更加细心,更加努力,学好理论知识的同时也要注重实践。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- RB 软工网 141 孙景乾 07104117
![提示](https://static.bdocx.com/images/bang_tan.gif)