4x4齐次坐标 (摘自《3D数学基础:图形与游戏开发》)
为了理解标准3D坐标是怎样扩展到4D坐标的,让我们先看一下2D中的齐次坐标,它的形式为(x, y, w)。想象在3D中w=1处的标准2D平面,实际的2D点(x,y)用齐次坐标表示为(x,y,1),对于那些不在w=1平面上的点,则次它们投影到w=1平面上。所以齐次坐标(x,y,w)映射的实际2D点为(x/w, y/w)。
因此,给定一个2D点(x,y),齐次空间中有无数多个点与之对应。所有点的形式都为(kx, ky, k), k != 0。这些点构成一条穿过齐次原点的直线。
当w=0除,除法未定义。因此不存在实际的2D点。然而,可以将2D齐次点(x,y,0)解释为“位于无穷远的点”,它描述了一个方向而不是一个位置。
4D坐标的基本思想相同。实际的3D点能被认为是在4D中w=1“平面”上。4D点形式为(x,y,z,w),将4D点投影到这个“平面”上得到相应的实际3D点(x/w, y/w, z/w)。w=0时,4D点表示“无限远点“,它描述了一个方向而不是一个位置。
叉乘运算
Result = a x b = |a| * |b| sin0
左手坐标系,将拇指朝向a的方向,食指指向b的方向,则中指指向为方向为叉乘结果的方向
右手坐标系,当右手的四指从a以不超过180度的转角转向b时,竖起的大拇指指向是c的方向。
矩阵
平移矩阵
T(p) = | 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 0 |
| px py pz 1 |
旋旋矩阵
无
绽放矩阵
S(p) = | px 0 0 0 |
| 0 py 0 0 |
| 0 0 pz 0 |
| 0 0 0 1 |
四元数
包含一个标量分量和一个三维向量分量,四元数Q可以记作:
Q = [w, (x,y,z)]
在3D数学中使用单位四元数来表示旋转,对于三维空间中旋转抽为n,旋转角度为a的旋转,如果用四元数表示,四个分量分别为:
w = cos( a/2 )
x = sin( a/2 ) cos (bx)
y = sin( a/2 ) cos (by)
z = sin( a/2 ) cos (bz);
其中cos(bx)、cos (by) 、cos (bz)分别为旋转轴的x,y,z分量
- | 欧拉角 | 矩阵 | 四元数 |
---|---|---|---|
旋转一个位置点 | 不支持 | 支持 | 不支持 |
增量旋转 | 不支持 | 支持,速度慢 | 支持,速度快 |
平滑插值 | 支持 | 基本不支持 | 支持 |
内存占用 | 3个数值 | 16个数值 | 4个数值 |
表达是否唯一 | 无数种组合 | 唯一 | 互为负的两种表示 |
可能会遇到的问题 | 万向锁 | 矩阵蠕变 | 误差累积导致非法 |