图形学第四篇图形变换文档格式.docx
- 文档编号:13920305
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:55
- 大小:552.92KB
图形学第四篇图形变换文档格式.docx
《图形学第四篇图形变换文档格式.docx》由会员分享,可在线阅读,更多相关《图形学第四篇图形变换文档格式.docx(55页珍藏版)》请在冰豆网上搜索。
(3)两个向量的叉乘运算
(4)向量的长度
二、矩阵及矩阵运算
由
个数
排成矩形表:
或简记成
或
,称为一个
行
列的矩阵,简称
矩阵,
叫做第
行第
列元素。
当
时,
叫做
阶方针,此时元素
称为主对角线元素。
只有一行的矩阵
称为行向量,只有一列的矩阵
称为列向量。
有关矩阵的运算有
(1)数乘矩阵
用标量
乘
的每一个元素而得的矩阵称为
与
的乘积,记为:
(2)矩阵的加法运算
设有两个
矩阵
,将它们对应元素相加而得到的矩阵称为
的和,记为
+
(3)矩阵的乘法运算
设有矩阵
,则此二矩阵相乘的积为矩阵
:
可见,只有
的列数等于
的行数的时候,
才有意义。
矩阵运算有如下基本性质
(1)数乘矩阵适合分配律和结合律
(2)矩阵加法适合结合律
(3)矩阵乘法对加法适合分配律
(4)矩阵乘法不适合交换律,因为当两个矩阵
能够相乘时,
却未必能够相乘,即使
都是方阵,
也未必相等。
在图形变换中还有用到如下的概念:
(1)零矩阵及其运算
矩阵的所有元素均为零的矩阵称为零矩阵。
一个
列的零矩阵记为
,对于任意的矩阵
都与下式成立:
(2)单位矩阵
在一个方阵中,如果其主对角线元素全是1,而其余元素都是0,则称这样的矩阵为单位矩阵,记为
。
对任意矩阵
,有下式成立:
(3)逆矩阵
对于方阵
,若存在矩阵
,使得
,则称
是可逆的,
称为
的逆,记为
(4)转置矩阵
将
的行、列互换而得到的
矩阵,称为
的转置矩阵,记为
矩阵的转置有如下的性质:
三、齐次坐标
齐次坐标表示法就是用
维的向量表示一个
维向量。
维空间中的点具有
个坐标分量
,并且是唯一的,用齐次坐标表示为
,是不唯一的。
使用齐次坐标还可以表示无穷远点,规定当
时为无穷远点。
▪4.2二维图形的几何变换
本节将讲解如何对二维图形进行几何变换,包括平移变换、比例变换、旋转变换、对称变换和错切变换。
1、平移变换
平移变换是将平面上的一点
沿平行于
轴的方向平移
,沿平行于
后变成点
则有
图4.2平移变换
程序的功能如下。
首先,在屏幕上显示一个默认的矩形,然后根据用户选择的不同操作对此矩形进行平移,平移操作是随着鼠标的移动而移动的。
程序步骤:
1)首先,建立一个MFC单文档工程,起名为“Ch4_2DTrans_2DTrans”。
单击Workspace中的ClassView标签,双击CCh4_2DTrans_2DTransView,在CCh4_2DTrans_2DTransView类的定义之前定义一个枚举类型,代码如下:
2)在CCh4_2DTransView类的定义中添加如下成员变量:
3)右键单击CCh4_2DTransView,选择AddMemberFunction,在弹出的对话框中,FunctionType设为void,FunctionDeclaration设为ClearScreen(),单击确定。
4)单击CCh4_2DTransView左侧的+号,双击ClearScreen函数,在ClearScreen函数中添加如下代码:
5)右键单击CCh4_2DTransView,选择AddMemberFunction,在弹出的对话框中,FunctionType设为void,FunctionDeclaration设为DrawRect(),单击确定。
6)单击CCh4_2DTransView左侧的+号,双击DrawRect函数,在DrawRect函数中添加如下代码:
7)双击构造函数CCh4_2DTransView(),在其中添加如下代码:
8)单击Workspace中的ResourceViewView标签中的Menu左边的“+”号,双击其子项:
IDR_MAINFRAME。
9)建立名称为【二维图形变换】的菜单,并建立【平移】子菜单。
ID号设为:
IDT_TRANSLATE。
如图
10)右键单击【平移】子菜单,选择ClassWizzard选项。
在弹出的对话框中选择:
ObjectIDs:
IDT_TRANSLATE,Classname:
CCh4_2DTransView,Messages:
COMMAND,单击AddFunction按钮,在弹出的为函数命名的对话框中单击OK,单击EditCode按钮。
11)在函数OnTranslate()中添加代码:
12)按组合键Ctrl+W,调出ClassWizzard对话框,选择ObjectIDs:
CCh4_2DTransView,Classname:
CCh4_2DTransView,在Messages列表中双击WM_LBUTTONDOWN,WM_LBUTTONUP,WM_MOUSEMOVE,WM_RBUTTONDOWN,WM_RBUTTONUP,单击EditCode按钮。
13)分别在OnLButtonDown(UINTnFlags,CPointpoint)、OnLButtonUp(UINTnFlags,CPointpoint)、OnMouseMove(UINTnFlags,CPointpoint)、OnRButtonDown(UINTnFlags,CPointpoint)、OnRButtonUp(UINTnFlags,CPointpoint)函数中添加如下代码(黑体部分是添加的代码):
voidCCh4_2DTrans_TranslateView:
:
OnLButtonUp(UINTnFlags,CPointpoint)
{
//TODO:
Addyourmessagehandlercodehereand/orcalldefault
m_bLBDown=FALSE;
m_prevPoint=point;
CView:
OnLButtonUp(nFlags,point);
}
OnRButtonDown(UINTnFlags,CPointpoint)
m_bRBDown=TRUE;
OnRButtonDown(nFlags,point);
OnRButtonUp(UINTnFlags,CPointpoint)
m_bRBDown=FALSE;
OnRButtonUp(nFlags,point);
OnMouseMove(UINTnFlags,CPointpoint)
Intdelta;
switch(m_type_transform)
{
caseTRF_TRANSLATE:
if(m_bLBDown)
{
ClearScreen();
delta=point.x-m_prevPoint.x;
m_prevPoint=point;
m_LT+=CPoint(delta*(int)m_xStep,0);
m_LB+=CPoint(delta*(int)m_xStep,0);
m_RT+=CPoint(delta*(int)m_xStep,0);
m_RB+=CPoint(delta*(int)m_xStep,0);
DrawRect();
}
if(m_bRBDown)
delta=point.y-m_prevPoint.y;
m_LT+=CPoint(0,delta*(int)m_yStep);
m_LB+=CPoint(0,delta*(int)m_yStep);
m_RT+=CPoint(0,delta*(int)m_yStep);
m_RB+=CPoint(0,delta*(int)m_yStep);
break;
caseTRF_NONE:
}
OnMouseMove(nFlags,point);
至此,代码部分结束。
编译,运行,点击菜单项中的【平移】命令,出现如图所示矩形。
图4.3平移代码运行结果
图中的矩形可以用鼠标进行平移,具体来说,鼠标的左键控制矩形左右平移,用鼠标右键控制矩形上下平移。
2、比例变换
比例变换是相对于原点,将平面上一点
沿
轴方向乘以常数
,沿
后,变成点
,则有
可见,如果
,则为恒等变换,图形不变,如果
,则图形被放大了,如果
则图形被缩小了。
如果
,则图形在
轴和
轴方向被缩放的倍数不一样。
为了实现上述的功能,我们在前面代码的基础上继续添加代码。
要求,可以令矩形根据用户输入的参数而放大和缩小。
1)在枚举类型Type_Transform添加TRF_SCALE
2)单击Workspace中的ResourceView标签中的Menu左边的“+”号,双击其子项:
3)在【二维图形变换】菜单的子
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形学 第四 图形 变换