您的位置:首页 > 其它

“生动”讲解——矩阵的空间变换

2015-04-26 15:09 330 查看


“生动”讲解——矩阵的空间变换

转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持!

几何图形的矩阵表示:



我们把每个顶点坐标看成一个行向量,采用齐次坐标法,即每个顶点坐标增加一个相同的分量1作为矩阵的一行,这样就可以用矩阵表示图形了。如:

点A(1,-1),增加一个分量1,将其作为一个矩阵的行向量A=[1−11];

以此类推,所以这个图形可以用矩阵来表示,即:

P=⎛⎝⎜⎜⎜131−2−113−21111⎞⎠⎟⎟⎟

平移变换:

如果平移向量是(a, b),点(x, y)平移后的点为(x+a, y+b)。

如下图所示:



平移变换矩阵:

平移变换矩阵为:⎡⎣⎢10a01b001⎤⎦⎥;

矩阵中的ab表示平移向量(a,b)。

例子:

图形矩阵乘以平移向量的矩阵就可以得出平移后的图形矩阵。例如:

点A(x,y),则点A的矩阵为[xy1];当点A的矩阵乘以平移变换矩阵可以得到平移后点的矩阵为:

[xy1 ]⎡⎣⎢10a01b001⎤⎦⎥=[x+ay+b1];

缩放变换:

缩放中心是坐标原点,点(x,y)缩放到点(my,ny),m、n是缩放因子。

如下图所示:



缩放变换矩阵:

缩放变换矩阵为:⎡⎣⎢m000n0001⎤⎦⎥;

矩阵中的m和n分别是x轴和y轴方向的缩放因子。

例子:

图形矩阵乘以缩放因子矩阵就可以得出缩放后的图形矩阵。例如:

点A(x,y),则点A的矩阵为[xy1];当点A的矩阵乘以缩放变换矩阵可以得到缩放后点的矩阵为:

[xy1 ]⎡⎣⎢m000n0001⎤⎦⎥=[mxny1];

旋转变换:

旋转中心是坐标原点。旋转角度是β。

如下图所示:



旋转变换矩阵:

旋转变换矩阵为:⎡⎣⎢cosθ−sinθ0sinθcosθ0001⎤⎦⎥;

矩阵中的θ是图形绕坐标原点逆时针旋转的角度。

例子:

图形矩阵乘以旋转角度矩阵就可以得出旋转后的图形矩阵。例如:

点A(x,y),则点A的矩阵为[xy1];当点A的矩阵乘以旋转变换矩阵可以得到旋转后点的矩阵为:

[xy1 ]⎡⎣⎢cosθ−sinθ0sinθcosθ0001⎤⎦⎥=[xcosθ−ysinθxsinθ+ycosθ1];

对称变换:

图形关于X轴的对称变换:



图形关于Y轴的对称变换:



图形关于原点的对称变换:



对称变换矩阵:

关于X轴对称变换矩阵为:⎡⎣⎢1000−10001⎤⎦⎥;

关于Y轴对称变换矩阵为:⎡⎣⎢−100010001⎤⎦⎥;

关于原点对称变换矩阵为:⎡⎣⎢−1000−10001⎤⎦⎥;

例子:

图形矩阵乘以对称变换矩阵就可以得出对称变换后的图形矩阵。例如:

点A(x,y),则点A的矩阵为[xy1];当点A的矩阵乘以对称变换矩阵可以得到旋转后点的矩阵为:

关于X轴对称变换:[xy1 ]⎡⎣⎢1000−10001⎤⎦⎥=[x−y1];

关于Y轴对称变换:[xy1 ]⎡⎣⎢−100010001⎤⎦⎥=[−xy1];

关于原点对称变换:[xy1 ]⎡⎣⎢−1000−10001⎤⎦⎥=[−x−y1];

错切变换:

图形关于X轴方向的错切变换,各点的纵坐标不变:



图形关于Y轴方向的错切变换,各点的横坐标不变:



错切变换矩阵:

关于X轴错切变换矩阵为:⎡⎣⎢1c0010001⎤⎦⎥;

关于Y轴错切变换矩阵为:⎡⎣⎢100c10001⎤⎦⎥;

c是错切变换因子。

例子:

图形矩阵乘以对称变换矩阵就可以得出错切变换后的图形矩阵。例如:

点A(x,y),则点A的矩阵为[xy1];当点A的矩阵乘以错切变换矩阵可以得到错切后点的矩阵为:

关于X轴错切变换:[xy1 ]⎡⎣⎢1c0010001⎤⎦⎥=[x+cyy1];

关于Y轴错切变换:[xy1 ]⎡⎣⎢100c10001⎤⎦⎥=[xcx+y1];

组合变换:

顾名思义,组合变换就是上面所介绍的平移变换,缩放变换,旋转变换, 对称变换,错切变换的相互作用之后产生的变换。

通过组合变换可以对图形实现“全方位”“无死角”的改变。

下面由一个例子来介绍一下组合变换:

题目:



如上图所示:

已知点M(3,-1),平面图形的各个顶点分别为A(-1,2)、B(1,4)、C(3,3)、D(1,2)、E(2,1)。

将图形绕M点顺时针旋转90度。 然后再以M点为缩放中心,缩放因子为2进行缩放。最后求新图形的各顶点坐标。

分析:

通过之前的学习,我们知道这是一个旋转变换。

旋转变换矩阵为:⎡⎣⎢cosθ−sinθ0sinθcosθ0001⎤⎦⎥;

(矩阵中的θ是图形绕坐标原点逆时针旋转的角度。)

上面明确说明旋转矩阵是图形绕坐标原点,逆时针旋转的角度。

所以我们需要将M点先平移到坐标原点(最后还需反向平移这个向量)

1. 将M点平移到坐标原点:

平移变换矩阵为:⎡⎣⎢10a01b001⎤⎦⎥;

矩阵中的ab表示平移向量(a,b)。

点M(3,-1),原点O(0,0),所以平移向量为:MO→=(0−3,0−(−1))=(−3,1)

根据平移向量MO→可以求得到平移矩阵为:T平移=⎡⎣⎢10−3011001⎤⎦⎥

平移MO→后为:



2. 将图形绕原点顺时针旋转-90度:

旋转变换矩阵为:⎡⎣⎢cosθ−sinθ0sinθcosθ0001⎤⎦⎥;

(矩阵中的θ是图形绕坐标原点逆时针旋转的角度。)

所以可以求出旋转矩阵为:T旋转=⎡⎣⎢cosθsinθ0−sinθcosθ0001⎤⎦⎥

顺时针旋转-90度后为:



3. 以原点为中心,缩放因子为2缩放图形:

缩放变换矩阵为:⎡⎣⎢m000n0001⎤⎦⎥;

矩阵中的m和n分别是x轴和y轴方向的缩放因子。

所以可以求出旋转矩阵为:T缩放=⎡⎣⎢200020001⎤⎦⎥

缩放后的图形变化为:



4. 将图形反向平移(平移向量为OM,第一步的反向平移):

平移变换矩阵为:⎡⎣⎢10a01b001⎤⎦⎥;

矩阵中的ab表示平移向量(a,b)。

点M(3,-1),原点O(0,0),所以平移向量为:OM→=(3−0,(−1)−0)=(3,−1)

根据平移向量OM→可以求得到平移矩阵为:T平移=⎡⎣⎢10301−1001⎤⎦⎥

平移OM→后为:



结果:

P’= P · T平移·T旋转·T缩放·T平移

=⎛⎝⎜⎜⎜⎜⎜⎜−1033321−1−1−110000⎞⎠⎟⎟⎟⎟⎟⎟⎛⎝⎜10−3011001⎞⎠⎟⎛⎝⎜cosθsinθ0−sinθcosθ0001⎞⎠⎟⎛⎝⎜200020001⎞⎠⎟⎛⎝⎜10301−1001⎞⎠⎟=⎛⎝⎜⎜⎜⎜⎜⎜913119773−13111111⎞⎠⎟⎟⎟⎟⎟⎟



新图形的顶点坐标依次是A′(9,7), B′(13,3), C′(11,-1), D′(9,3), E′(7,1)

最后:

这篇文章中的内容都是我从一个视频中截图来的,费这么大劲主要是为了方便以后回顾和复习。

原视频地址如下:http://v.baidu.com/watch/8701412763189445726.html

另外推荐两位大神的文章:

矩阵在Android的应用(爱哥):/article/1328791.html

矩阵在Unity中的应用(墨半成霜):/article/1502891.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: