三维物体的空间变换
三维物体的空间变换
我们之前讲过二维图形的几何变换,为了将所有变换统一形式,我们引入了齐次坐标的概念。
通过齐次坐标,线性和非线性操作我们都可以整合在一个变换矩阵内,这不仅对二维图形有效,对三维物体也如此。
齐次变换矩阵
三维变换和二维变换的齐次变换矩阵相似性很高,我们在这里只做介绍,不做推导。
平移变换矩阵
这部分和二维变换是完全一样的,只不过多了一个维度
比例变换矩阵
当
反射变换矩阵
反射变换将物体关于某个坐标平面做镜像,本质上是把垂直于该平面的坐标分量取反。
关于
关于
关于
关于原点对称(三个分量同时取反):
错切变换矩阵
错切变换让物体的某个坐标分量随另一个坐标分量发生线性偏移,物体被“斜拉”但体积不变。
沿
沿
沿
旋转变换矩阵
三维旋转变换其实也可以看做二维旋转,比如绕x轴旋转,就可以看作在y-z平面上旋转,忽略x相关的值。
这样,我们可以根据二维旋转的变换矩阵写出三维旋转的变换矩阵。
绕x轴旋转:
绕y轴旋转:
绕z轴旋转:
但是我们发现,绕y轴旋转的矩阵格式和其他的不一样,下面我解释一下原因:
在三维空间中,标准的右手系满足一个循环顺序:
对于绕
如果你在写
对于绕坐标轴旋转,我们已经有了具体公式,但是如果是绕空间中任意轴旋转,如何写旋转矩阵呢?
方法1:普通旋转公式的叠加
我们可以将旋转轴平移到原点,再旋转到与某个坐标轴重合,然后执行旋转操作,最后逆变换回去。将这几步的变换矩阵乘起来就得到了完整的旋转矩阵。
方法2:罗德里格斯公式(Rodrigues’ Rotation Formula)
它可以直接给出绕任意过原点轴旋转的矩阵,无需拆解为多步复合变换。下面我们详细推导。
罗德里格斯公式的推导
问题:给定一根过原点、方向为单位向量
核心思路:将
第一步:分解
平行分量就是
垂直分量:
第二步:在垂直平面内建立正交基
用叉积构造:
由于
第三步:在垂直平面内做二维旋转
在
第四步:组合结果
旋转后的向量 = 不变的平行分量 + 在垂直平面内旋转后的垂直分量:
代入
这就是罗德里格斯旋转公式的向量形式:
矩阵形式
将叉积
则有
代入罗德里格斯公式:
(注:第一项的
因此旋转矩阵为:
展开成完整的
验证:退化到绕 轴
令
正是
具体例子
例:将向量
是 轴和 轴的角平分线方向。直观上, 绕这根斜轴旋转 应该会偏离 轴,转向 和 之间的某个方向。
已知
逐项计算:
代入公式:
验证长度:
总结
| 变换类型 | 自由度 | 说明 |
|---|---|---|
| 平移 | 3 | 矩阵最后一列前三个元素 |
| 缩放 | 3 | 对角线前三个元素 |
| 反射 | 3 | 关于坐标平面的镜像 |
| 错切 | 6 | |
| 绕坐标轴旋转 | 3 | |
| 绕任意轴旋转 | 4 | 罗德里格斯公式,轴方向(3) + 角度(1) |
三维空间中的所有基本变换都可以用
这次的插图来自画师 ばなこ武丸
图片地址:https://www.pixiv.net/artworks/144860848