3D坐标系中 点 的 平移、旋转和缩放 | 您所在的位置:网站首页 › 三维坐标系旋转变换 › 3D坐标系中 点 的 平移、旋转和缩放 |
基础概念
矩阵
一个m*n矩阵 是 一个m行、n列的矩形数组。 如果一个矩阵只包含单行 或 单列, 这样的矩阵 为 行矩阵或 列矩阵,又叫行向量或列向量 矩阵的乘法: 点空间中的点,我们通常用一个 行向量表示: p = [x, y, z] 坐标系用笛卡尔坐标系表示3D空间,我们按习惯可分为:左手坐标系 和 右手坐标系。如图: 左手坐标系Z轴正方向向里,右手坐标系Z轴正方向向外。在DirectX3D中我们使用左手坐标系。 平移在3D空间中,我们经常需要将一个点 平移到另一个位置。假设空间中的一点P,其用行向量表示为;将其向 x方向平移 dx,向y方向平移 dy,向z方向平移 dz后,得到的一点。 但是在数学计算或游戏编程中,我们都希望可以运用矩阵的乘法来表示点的平移。我们希望有一个公式: , 其中为一个矩阵 为了方便这种矩阵运行,我们引入齐次坐标,即将3D空间中的点P表示为, 其中w为齐次化坐标。 在游戏编程中,我们都用1表示w。这样我们就能得到一个4*4 的平移矩阵: 其中: 这样通过3D空间中的 任意一点 都可以通过 与平移矩阵向乘, 进行平移。 旋转
平移能够通过矩阵乘法来表示,同样,我们也希望3D空间中点的旋转也能用矩阵乘法来表示。 在理解旋转时,我们必须向记住几个高中学习的三角函数公式: 首先强调一个规则:在左手坐标系中,旋转角的正方向为顺时针方向;在右手坐标系中,旋转角的正方向为逆时针方向。 旋转我们可分为绕x轴、y轴、z轴旋转。 以绕z轴旋转为例:当绕z旋转时,其z坐标是不会发生变化的。x坐标和y坐标发生旋转。 由图可得,旋转后的x和y坐标分别可表示为: 其中r为点到坐标原点的距离。很容易化简可得: 按照矩阵乘法,我们
、 其中绕Z轴旋转矩阵 为: 同样的方法,我们可以求得绕x轴 和 绕y轴 的旋转矩阵分别为: 这样,我们就可以通过矩阵的乘法,实现点的任意旋转。 缩放 想要对相对于原点缩放某个点,只需要将x,y,z三个分量分别乘以对应的缩放因子:sx,sy,sz。 同样我们可以用矩阵乘法表示: 其中缩放矩阵为: 总结 有了以上平移、旋转、缩放矩阵后,我们就可以通过矩阵乘法求得点P任意变化后坐标:
|
CopyRight 2018-2019 实验室设备网 版权所有 |