3D旋转矩阵的推导

2D中的旋转

假设只绕原点旋转,则可以通过一个参数 θ \theta θ来描述旋转量。
假设逆时针为正方向,下图展示了基向量 p p p, q q q绕原点旋转 θ \theta θ度之后得到的新的基向量 p ′ p' p q ′ q' q,其值为
p ′ = [ cos ⁡ θ , sin ⁡ θ ] q ′ = [ − sin ⁡ θ , cos ⁡ θ ] \begin{aligned} & p' = [\cos \theta, \sin \theta]\\ &q' = [-\sin \theta, \cos \theta] \end{aligned} p=[cosθ,sinθ]q=[sinθ,cosθ]

得到旋转后的基向量的值,就可以构造2D旋转矩阵:
R ( θ ) = [ p ′ q ′ ] = [ cos ⁡ θ sin ⁡ θ − sin ⁡ θ cos ⁡ θ ] \bf R(\theta) = \left[ \begin{matrix} p'\\ q' \end{matrix} \right] = \left[ \begin{matrix} \cos \theta & \sin \theta\\ -\sin \theta & \cos \theta \end{matrix} \right] R(θ)=[pq]=[cosθsinθsinθcosθ]


3D中绕坐标轴的旋转

绕z轴的旋转矩阵

求出旋转后的基向量,可得到绕z轴的旋转矩阵:

R z ( θ ) = [ p ′ q ′ r ′ ] = [ cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ 0 0 0 1 ] \bf R_z(\theta) = \left[ \begin{matrix} p'\\ q'\\ r' \end{matrix} \right] = \left[ \begin{matrix} \cos \theta & \sin \theta & 0\\ -\sin \theta & \cos \theta & 0\\ 0& 0 & 1 \end{matrix} \right] Rz(θ)=pqr=cosθsinθ0sinθcosθ0001

注意:如果删除矩阵的最后一行和最后一列,就会得到上面的2D旋转矩阵。

绕x轴的旋转矩阵

R x ( θ ) = [ p ′ q ′ r ′ ] = [ 1 0 0 0 cos ⁡ θ sin ⁡ θ 0 − sin ⁡ θ cos ⁡ θ ] \bf R_x(\theta) = \left[ \begin{matrix} p'\\ q'\\ r' \end{matrix} \right] = \left[ \begin{matrix} 1& 0 & 0 \\ 0 & \cos \theta & \sin \theta \\ 0 & -\sin \theta & \cos \theta \\ \end{matrix} \right] Rx(θ)=pqr=1000cosθsinθ0sinθcosθ

绕y轴的旋转矩阵

R y ( θ ) = [ p ′ q ′ r ′ ] = [ cos ⁡ θ 0 − sin ⁡ θ 0 1 0 sin ⁡ θ 0 cos ⁡ θ ] \bf R_y(\theta) = \left[ \begin{matrix} p'\\ q'\\ r' \end{matrix} \right] = \left[ \begin{matrix} \cos \theta & 0& -\sin \theta \\ 0& 1 & 0 \\ \sin \theta &0 & \cos \theta \\ \end{matrix} \right] Ry(θ)=pqr=cosθ0sinθ010sinθ0cosθ


参考资料:3D数学基础:图形与游戏开发 p88-p91

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值