查看“变换矩阵”的源代码
←
变换矩阵
跳转到导航
跳转到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
'''变换矩阵'''是[[数学]][[线性代数]]中的一个概念。 在[[线性代数]]中,[[线性变换]]能够用[[矩阵]]表示。如果''T''是一个把'''R'''<sup>''n''</sup>映射到'''R'''<sup>''m''</sup>的线性变换,且''x''是一个具有''n''个元素的[[列向量]],那么 :<math>T( \vec x ) = \mathbf{A} \vec x</math> 我们把''m''×''n''的矩阵'''A''',称为'''''T''的变换矩阵'''。 ==应用== 任意线性变换都可以用矩阵表示为易于计算的一致形式<ref>{{cite book|authors=Gentle, James E.|chapter=Matrix Transformations and Factorizations|title=Matrix Algebra: Theory, Computations, and Applications in Statistics|publisher=Springer|year=2007|isbn=9780387708737|url=http://books.google.com/books?id=PDjIV0iWa2cC&pg=PA172}}</ref>,并且多个变换也可以很容易地通过矩阵的相乘连接在一起。 线性变换不是唯一可以用矩阵表示的变换。'''R'''<sup>''n''</sup>维的[[仿射变换]]与[[透视投影]]都可以用[[齐次坐标]]表示为'''RP'''<sup>''n''+1</sup>维(即''n''+1维的[[真实投影空间]])的线性变换。因此,在[[三维计算机图形学]]中大量使用着4x4的矩阵变换。 ==寻找变换矩阵== 如果已经有一个函数型的线性变换<math>T (x)</math>,那么通过''T''对[[标准基]]每个向量进行简单变换,然后将结果插入矩阵的列中,这样很容易就可以确定变换矩阵'''A''',即 :<math>\mathbf{A} = \begin{pmatrix} T( \vec e_1)& T(\vec e_2 ) & \cdots & T( \vec e_n ) \end{pmatrix}</math> 例如,函数<math>T (x) = 5x</math>是线性变换,通过上面的过程得到(假设''n'' = 2) :<math>T( \vec x ) = 5 \vec x = \begin{pmatrix} 5 && 0 \\ 0 && 5 \end{pmatrix} \vec x</math> ==在二维图形中的应用示例== 最为常用的几何变换都是线性变换,这包括旋转、缩放、切变、反射以及正投影。在二维空间中,线性变换可以用2×2的变换矩阵表示。 ===旋转=== 绕原点逆时针[[旋转]] θ 度角的变换公式是 <math>x' = x \cos \theta -y \sin \theta</math> 与 <math>y' = x \sin \theta + y \cos \theta</math>,用矩阵表示为: :<math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos \theta & -\sin\theta \\ \sin \theta & \cos \theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> ===缩放=== [[缩放]](反矩陣)公式为 <math>x' = s_x \cdot x</math> 与 <math>y' = s_y \cdot y</math>,用矩阵表示为: :<math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} s_x & 0 \\ 0 & s_y \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> ===切变=== [[切变]]有两种可能的形式: 平行于 ''x'' 轴的切变为 <math>x' = x + ky</math> 与 <math>y' = y</math>,矩阵表示为: :<math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} 1 & k \\ 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> 平行于 ''y'' 轴的切变为 <math>x' = x</math> 与 <math>y' = y + kx</math>,矩阵表示为: :<math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} 1 & 0 \\ k & 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> ===反射=== 为了沿经过原点的直线反射向量,假设(''u<sub>x</sub>'', ''u<sub>y</sub>'')为直线方向的[[单位向量]]。变换矩阵为: :<math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} 2 u_x^2 - 1 & 2 u_x u_y \\ 2 u_x u_y & 2 u_y^2 - 1 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> 不经过原点的直线的反射是仿射变换,而不是线性变换。 若一座標(x, y)沿直線 <math>y = (\tan \theta) \cdot x</math> 進行反射,則其影像(x', y')可用以下公式求得: <math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} \cos 2\theta & \sin 2\theta \\ \sin 2\theta & -\cos 2\theta \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> ===正投影=== 为了将向量正投影到一条经过原点的直线,假设(''u<sub>x</sub>'', ''u<sub>y</sub>'')是直线方向的[[单位向量]],变换矩阵为: :<math> \begin{pmatrix} x' \\ y' \end{pmatrix} = \begin{pmatrix} u_x^2 & u_x u_y \\ u_x u_y & u_y^2 \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} </math> 跟反射一样,正投影到一条不经过原点的直线的变换是仿射变换,而不是线性变换。 [[平行投影]]也是线性变换,也可以用矩阵表示。但是[[透视投影]]不是线性变换,必须用齐次坐标表示。 ==组合变换与逆变换== 用矩阵表示线性变换的一个主要动力就是可以很容易地进行组合变换以及逆变换。 组合可以通过[[矩阵乘法]]来完成。如果'''A'''与'''B'''是两个线性变换,那么对向量''x''先进行'''A'''变换,然后进行'''B'''变换的过程为: :<math>\mathbf{B}(\mathbf{A} \vec x ) =(\mathbf{BA}) \vec x</math> 换句话说,'''先'''A'''后'''B变换的组合等同于两个矩阵乘积的变换。需要注意的是先'''A'''后'''B'''表示为'''BA'''而不是'''AB'''。 能够通过两个矩阵相乘将两个变换组合在一起这样的能力就使得可以通过[[逆矩阵]]进行变换的逆变换。'''A''' <sup>-1</sup>表示'''A'''的逆变换。 变换矩阵并不都是可逆的,但通常都可以进行直观的解释。在上一节中,几乎所有的变换都是可逆的。只要<math>s_x</math>与<math>s_y</math>都不为零,那么缩放变换也是可逆的。另外,正投影永远是不可逆的。 ==其它类型的变换== ===仿射变换=== 为了表示[[仿射变换]],需要使用[[齐次坐标]],即用三维向量(''x'', ''y'', 1)表示二维向量,对于高维来说也是如此。按照这种方法,就可以用矩阵乘法表示变换。<math>x' = x + t_x</math>; <math>y' = y + t_y</math>变为 :<math> \begin{pmatrix} x' \\ y' \\ 1 \end{pmatrix} = \begin{pmatrix} 1 & 0 & t_x \\ 0 & 1 & t_y \\ 0 & 0 & 1 \end{pmatrix} \begin{pmatrix} x \\ y \\ 1 \end{pmatrix} </math> 在矩阵中增加一列与一行,除右下角的元素为1外其它部分填充为0,通过这种方法,所有的线性变换都可以转换为仿射变换。例如,上面的旋转矩阵变为 :<math>\begin{pmatrix} \cos \theta & - \sin \theta & 0 \\ \sin \theta & \cos \theta & 0 \\ 0 & 0 & 1 \end{pmatrix}</math> 通过这种方法,使用与前面一样的矩阵乘积可以将各种变换无缝地集成到一起。 当使用仿射变换时,齐次坐标向量''w''从来不变,这样可以把它当作为1。但是,透视投影中并不是这样。 ===透视投影=== [[三维计算机图形学]]中另外一种重要的变换是[[透视投影]]。与平行投影沿着平行线将物体投影到图像平面上不同,透视投影按照从投影中心这一点发出的直线将物体投影到图像平面。这就意味着距离投影中心越远投影越小,距离越近投影越大。 最简单的透视投影将投影中心作为坐标原点,''z'' = 1作为图像平面,这样投影变换为<math>x' = x / z</math>; <math>y' = y / z</math>,用齐次坐标表示为: :<math> \begin{pmatrix} x_c \\ y_c \\ z_c \\ w_c \end{pmatrix} = \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 1 & 0 \end{pmatrix} \begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix} </math> (这个乘法的计算结果是<math>(x_c, y_c, z_c, w_c)</math> = <math>(x, y, z, z)</math>。) 在进行乘法计算之后,通常齐次元素''w<sub>c</sub>''并不为1,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以''w<sub>c</sub>'': :<math> \begin{pmatrix} x' \\ y' \\ z' \end{pmatrix} = \begin{pmatrix} x_c / w_c \\ y_c / w_c \\ z_c / w_c \end{pmatrix} </math> 更加复杂的透视投影可以是与旋转、缩放、平移、切变等组合在一起对图像进行变换。 ==参考资料== {{reflist}} ==参见== [[三维投影]] ==外部連結== *{{En}}[http://www.idomaths.com/linear_transformation.php 线性变换求解器] [[Category:计算机图形学|B]] [[Category:矩陣|B]] [[Category:線性代數|B]]
本页使用的模板:
Template:Cite book
(
查看源代码
)
Template:En
(
查看源代码
)
Template:Reflist
(
查看源代码
)
返回
变换矩阵
。
导航菜单
个人工具
登录
命名空间
页面
讨论
不转换
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息