3D数学基础——矩阵变换

本文详细介绍了3D空间中向量的矩阵变换,包括缩放、旋转和平移。通过矩阵运算,阐述了如何使用3×3和4×4矩阵实现向量的比例变换、围绕坐标轴的旋转以及在三维空间中的平移。还提到了齐次坐标的运用以及平移矩阵的简化形式。此外,文章提供了进一步阅读的扩展资源。
摘要由CSDN通过智能技术生成

3D数学基础——矩阵变换

0. 前提假设与符号定义

向量与矩阵

假设向量 k k k右向量 h h h变换得到:

  • 设向量 h = [ x , y , z ] T h=[x,y,z]^{T} h=[x,y,z]T
  • 设向量 k = [ u , v , w ] T k=[u,v,w]^{T} k=[u,v,w]T
  • 3维矩阵 M 3 × 3 = [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] M_{3×3}=\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix} M3×3=m11m21m31m12m22m32m13m23m33
  • 4维矩阵 M 4 × 4 = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 m 41 m 42 m 43 m 44 ] M_{4×4}=\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14}\\ m_{21} & m_{22} & m_{23} & m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ m_{41} & m_{42} & m_{43} & m_{44} \end{bmatrix} M4×4=m11m21m31m41m12m22m32m42m13m23m33m43m14m24m34m44
  • 单位矩阵 E E E

缩放

  • 缩放矩阵 M s c a l a r M_{scalar} Mscalar
  • 缩放因子 s s s

旋转

  • 旋转矩阵 M r o t a t e M_{rotate} Mrotate
  • 旋转角 θ \theta θ

平移

  • 平移矩阵 M t r a n s M_{trans} Mtrans
  • 平移向量 t t t

1. 缩放

令:

k = M 3 × 3 h = [ m 11 m 12 m 13 m 21 m 22 m 23 m 31 m 32 m 33 ] [ x y z ] = [ m 11 x + m 12 y + m 13 m 21 x + m 22 y + m 23 z m 31 x + m 32 y + m 33 z ] = [ u v w ] ( 1 ) k=M_{3×3}h=\begin{bmatrix} m_{11} & m_{12} & m_{13} \\ m_{21} & m_{22} & m_{23} \\ m_{31} & m_{32} & m_{33} \end{bmatrix}\begin{bmatrix} x \\ y \\ z \end{bmatrix}=\begin{bmatrix} m_{11}x+ m_{12}y + m_{13} \\m_{21}x + m_{22}y + m_{23}z \\ m_{31}x + m_{32}y + m_{33}z \end{bmatrix} = \begin{bmatrix} u \\ v \\ w \end{bmatrix} \qquad \qquad \qquad \qquad (1) k=M3×3h=m11m21m31m12m22m32m13m23m33xyz=m11x+m12y+m13m21x+m22y+m23zm31x+m32y+m33z=uvw(1)

如果要使 u u u x x x v v v y y y w w w z z z对应成比例,那么可以得到一组特殊的解:

{ m 12 = m 13 = m 21 = m 23 = m 31 = m 32 = 0 m 11 ≠ 0 m 22 ≠ 0 m 33 ≠ 0 \left\{\begin{array}{ll} m_{12}= m_{13} = m_{21} =m_{23} =m_{31} = m_{32} =0 \\ m_{11} \ne 0 \\ m_{22} \ne 0 \\m_{33} \ne 0\end{array} \right. m12=m13=m21=m23=m31=m32=0m11=0m22=0m33=0

  • 即缩放矩阵为 M s c a l a r = [ m 11 0 0 0 m 22 0 0 0 m 33 ] ( 2 ) M_{scalar}=\begin{bmatrix} m_{11} & 0 & 0 \\ 0 & m_{22} & 0 \\ 0 & 0 & m_{33} \end{bmatrix} \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad \qquad (2) Mscalar=m11000m22000m33(2)

  • 如果 h → k h \to k hk是等比例缩放,即每个坐标对应的缩放尺度一样,那么缩放便可简化为:

k = [ s 0 0 0 s 0 0 0 s ] [ x y z ] = s E h = s h ( 3 ) k=\begin{bmatrix} s & 0 & 0 \\ 0 & s & 0 \\ 0 & 0 & s \end{bmatrix}\begin{bmatrix} x \\ y\\ z\end{bmatrix}=sEh=sh\qquad \qquad \qquad \qquad \qquad \qquad\qquad \qquad \qquad \qquad \qquad (3) k=s000s000sxyz=sEh=sh(3)

2. 旋转

由于刚体变换时纯旋转只需确定一个旋转轴旋转角度即可。

以Z轴为旋转轴,旋转角为 θ \theta θ

  • 由(1)式得:

k = [ u v w ] = [ m 11 x + m 12 y + m 13 m 21 x + m 22 y + m 23 z m 31 x + m 32 y + m 33 z ] k = \begin{bmatrix} u \\ v \\ w \end{bmatrix}=\begin{bmatrix} m_{11}x+ m_{12}y + m_{13} \\m_{21}x + m_{22}y + m_{23} z \\ m_{31}x + m_{32} y + m_{33} z \end{bmatrix} k=uvw=m11x+m12y+m13m21x+m22y+m23zm31x+m32y+m33z

  • 以Z轴旋转,那么Z坐标不变,即旋转发生在oxy平面上 ,可以确定 w = z w=z w=z,因此可以得到矩阵 M 3 × 3 M_{3×3} M3×3的一组解:

{ m 31 = m 32 = 0 m 33 = 1 \left\{\begin{array}{ll} m_{31}= m_{32} =0 \\ m_{33} =1\end{array} \right. {m31=m32=0m33=1

  • 如图所示,向量k由向量h旋转得到的,因此两向量长度相等,假设向量长度为 L L L,其他参数如图:

在这里插入图片描述

几何关系以及三角不等式可知:

{ u = ∣ ∣ O A ∣ ∣ = L c o s ( θ + β ) v = ∣ ∣ k A ∣ ∣ = L s i n ( θ + β ) ( 4 ) \left\{\begin{array}{ll} u=||OA|| =Lcos(\theta + \beta) \\ v =||kA|| =Lsin(\theta + \beta)\end{array} \right.\qquad \qquad \qquad \qquad \qquad \qquad\qquad \qquad \qquad \qquad \qquad \qquad \qquad (4) {u=OA=Lcos(θ+β)v=kA=Lsin(θ+β)(4)

{ x = ∣ ∣ O B ∣ ∣ = L c o s β v = ∣ ∣ h B ∣ ∣ = L s i n β ( 5 ) \left\{\begin{array}{ll} x=||OB|| =Lcos \beta \\ v =||hB|| =Lsin\beta \end{array} \right.\qquad \qquad \qquad \qquad \qquad \qquad\qquad \qquad \qquad\qquad \qquad \qquad \qquad \qquad (5) {x=OB=Lcosβv=hB=Lsinβ(5)

{ s i n ( θ + β ) = c o s θ s i n β + s i n β c o s θ c o s ( θ + β ) = c o s θ c o s β − s i n β s i n θ ( 6 ) \left\{\begin{array}{ll} sin(\theta + \beta)=cos\theta sin\beta + sin\beta cos\theta \\ cos(\theta + \beta) = cos\theta cos\beta - sin\beta sin\theta \end{array} \right.\qquad \qquad \qquad \qquad \qquad \qquad\qquad \qquad \qquad \qquad \qquad (6) {sin(θ+β)=cosθsinβ+sinβcosθcos(θ+β)=cosθcosβsinβsinθ(6)

联立(4)(5)(6)得:

{ u = x c o s θ + y ( − s i n θ ) v = x s i n θ + y c o s θ \left\{\begin{array}{ll} u=xcos\theta + y(-sin\theta) \\ v =xsin\theta + ycos\theta\end{array} \right. {u=xcosθ+y(sinθ)v=xsinθ+ycosθ

由此又可得两组 M 3 × 3 M_{3×3} M3×3的解:

{ m 11 = c o s θ m 12 = − s i n θ m 13 = 0 m 21 = s i n θ m 22 = c o s θ m 23 = 0 \left\{\begin{array}{ll} m_{11}= cos\theta & m_{12} =-sin\theta & m_{13}=0 \\ m_{21}= sin\theta & m_{22} =cos\theta & m_{23}=0\end{array} \right. {m11=cosθm21=sinθm12=sinθm22=cosθm13=0m23=0

  • 综上,最终得到旋转矩阵为 M r o t a t e = [ c o s θ − s i n θ 0 s i n θ c o s θ 0 0 0 1 ] M_{rotate}=\begin{bmatrix} cos\theta & -sin\theta & 0 \\ sin\theta & cos\theta & 0 \\ 0 & 0 & 1 \end{bmatrix} Mrotate=cosθsinθ0sinθcosθ0001

  • 以X轴或者Y轴的推导式类似的;

  • 关于任意轴的旋转请参考Rodrigues’ formula

3. 平移

将向量扩展为齐次坐标,齐次坐标的概念请参考齐次坐标博客

有:

k = [ u v w 1 ] = M 4 × 4 h = [ m 11 m 12 m 13 m 14 m 21 m 22 m 23 m 24 m 31 m 32 m 33 m 34 m 41 m 42 m 43 m 44 ] [ x y z 1 ] = [ m 11 x + m 12 y + m 13 + m 14 m 21 x + m 22 y + m 23 z + m 24 m 31 x + m 32 y + m 33 z + m 34 m 41 x + m 42 y + m 43 z + m 44 ] ( 7 ) k= \begin{bmatrix} u \\ v \\ w \\1\end{bmatrix}=M_{4×4}h=\begin{bmatrix} m_{11} & m_{12} & m_{13} & m_{14}\\ m_{21} & m_{22} & m_{23} & m_{24} \\ m_{31} & m_{32} & m_{33} & m_{34} \\ m_{41} & m_{42} & m_{43} & m_{44} \end{bmatrix}\begin{bmatrix} x \\ y \\ z \\ 1 \end{bmatrix}=\begin{bmatrix} m_{11}x+ m_{12}y + m_{13}+m_{14} \\m_{21}x + m_{22}y + m_{23}z+m_{24} \\ m_{31}x + m_{32}y + m_{33}z+m_{34} \\m_{41}x + m_{42}y + m_{43}z+m_{44} \end{bmatrix} \qquad \qquad \qquad \qquad (7) k=uvw1=M4×4h=m11m21m31m41m12m22m32m42m13m23m33m43m14m24m34m44xyz1=m11x+m12y+m13+m14m21x+m22y+m23z+m24m31x+m32y+m33z+m34m41x+m42y+m43z+m44(7)

  • 假设向量k和h之间只有平移变换,由矩阵的性质可以轻松得到一组解:

[ u v w 1 ] = [ x + m 14 y + m 24 z + m 34 1 ] \begin{bmatrix} u \\ v \\ w \\1\end{bmatrix}=\begin{bmatrix} x+m_{14} \\y+m_{24}\\ z+m_{34} \\1\end{bmatrix} uvw1=x+m14y+m24z+m341

即,平移变换矩阵为:

M t r a n s = [ 1 0 0 m 14 0 1 0 m 24 0 0 1 m 34 0 0 0 1 ] M_{trans}=\begin{bmatrix} 1& 0& 0 & m_{14}\\ 0 & 1 & 0 & m_{24} \\ 0 & 0 & 1 & m_{34} \\ 0 & 0 & 0 & 1 \end{bmatrix} Mtrans=100001000010m14m24m341

  • 观察发现平移矩阵可以简化为向量加法:

令平移向量t为:

t = [ t x t y t z ] = [ m 14 m 24 m 34 ] t=\begin{bmatrix} t_{x} \\ t_{y} \\ t_{z} \end{bmatrix}=\begin{bmatrix} m_{14} \\m_{24} \\ m_{34} \end{bmatrix} t=txtytz=m14m24m34

那么:

h = k + t h=k+t h=k+t

4. 总结

通过上述推导可以发现,矩阵的缩放、旋转、平移变换都可以在齐次坐标下由一个 M 4 × 4 M_{4×4} M4×4变换矩阵来完成,数学推导能加深对公式本身的理解。

要更加深入理解旋转、平移和缩放变换,还可以阅读下面的博客。

5. 扩展阅读

旋转矩阵和平移矩阵的本质

齐次坐标

罗德里格斯公式Rodrigues’ formula

6. 手写版

image-20220324194909276

image-20220324194926887

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值