前言
以三维坐标系为例,应用矩阵变换进行坐标平移、缩放、旋转。
原理
对于坐标变换,需要引入齐次坐标的概念。
齐次坐标是将一个原本是n维的向量用一个n+1维向量来表示。
借用F.S. Hill Jr.的一句话来解释为何要引入齐次坐标,“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”。
其中的几何变换,正是我们需要应用的场景。
这里我们用的是行向量,左乘行变换,右乘列变换。
平移
平移变换的计算,乘一个平移矩阵,可以表示为如下方式:
[xyz1]⋅100x′010y′001z′0001=[x+x′y+y′z+z′1]
原坐标(x, y, z)分别平移x', y', z'后,坐标变为(x+x', y+y', z+z')。
缩放(整体)
缩放变换的计算,乘一个缩放矩阵,可以表示为如下方式:
[xyz1]⋅100001000010000s=[sxsysz1]
原坐标(x, y, z)缩放s倍后,坐标变为(x/s, y/s, z/s)。
旋转(绕坐标轴)
旋转变换的计算,乘一个旋转矩阵,x, y, z坐标轴分别表示为:
绕x轴
[xyz1]⋅10000cosθ−sinθ00sinθcosθ00001=[xy⋅cosθ−z⋅sinθy⋅sinθ+z⋅cosθ1]
绕y轴
[xyz1]⋅cosθ0sinθ00100−sinθ0cosθ00001=[x⋅cosθ+z⋅sinθyz⋅cosθ−x⋅sinθ1]
绕z轴
[xyz1]⋅cosθ−sinθ00sinθcosθ0000100001=[x⋅cosθ−y⋅sinθy⋅cosθ+x⋅sinθz1]
仿真
使用MathLabTool进行三维坐标系仿真