三维仿射变换矩阵

三维仿射变换矩阵

三维仿射变换矩阵有 3 × 4 、 4 × 4 3\times4、4\times4 3×4、4×4两种写法,都是施加到三维点的齐次式上, 4 × 4 4\times4 4×4的仿射变换矩阵是在 3 × 4 3\times4 3×4的矩阵后追加一行 ( 0 , 0 , 0 , 1 ) (0,0,0,1) (0,0,0,1),便于通过连续左乘计算组合变换矩阵,这里只对平移、缩放、旋转三种变换展开分析,剪切、反射这两种变换暂不展开,并且对旋转变换会做比较细致的分析。

平移变换

平移量为 ( a , b , c ) (a,b,c) (a,b,c)的平移变换矩阵是:

1 0 0 a 0 1 0 b 0 0 1 c \] \\begin{bmatrix} 1 \& 0 \& 0 \& a\\\\ 0 \& 1 \& 0 \& b\\\\ 0 \& 0 \& 1 \& c \\end{bmatrix} 100010001abc ## 缩放变换   点 ( x , y , z ) (x,y,z) (x,y,z)变成 ( a x , b y , c z ) (ax,by,cz) (ax,by,cz)的缩放矩阵是 \[ a 0 0 0 0 b 0 0 0 0 c 0 \] \\begin{bmatrix} a \& 0 \& 0 \& 0\\\\ 0 \& b \& 0 \& 0\\\\ 0 \& 0 \& c \& 0 \\end{bmatrix} a000b000c000 ## 旋转变换 ### 绕x、y、z单个轴旋转的变换   三维点绕 x x x轴逆时针旋转 α \\alpha α角的旋转变换矩阵为: R x ( α ) = \[ 1 0 0 0 0 cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 \] R_x(\\alpha) = \\begin{bmatrix} 1 \& 0 \& 0 \& 0\\\\ 0 \& \\cos\\alpha \& -\\sin\\alpha \& 0\\\\ 0 \& \\sin\\alpha \& \\cos\\alpha \& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} Rx(α)= 10000cosαsinα00−sinαcosα00001   三维点绕 y y y轴逆时针旋转 β \\beta β角的旋转变换矩阵为: R y ( β ) = \[ cos ⁡ β 0 sin ⁡ β 0 0 1 0 0 − sin ⁡ β 0 cos ⁡ β 0 0 0 0 1 \] R_y(\\beta) = \\begin{bmatrix} \\cos\\beta \& 0 \& \\sin\\beta \& 0\\\\ 0 \& 1 \& 0 \& 0\\\\ -\\sin\\beta \& 0 \& \\cos\\beta\& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} Ry(β)= cosβ0−sinβ00100sinβ0cosβ00001   三维点绕 z z z轴逆时针旋转 γ \\gamma γ角的旋转变换矩阵为: R z ( γ ) = \[ cos ⁡ γ − sin ⁡ γ 0 0 sin ⁡ γ cos ⁡ γ 0 0 0 0 1 0 0 0 0 1 \] R_z(\\gamma) = \\begin{bmatrix} \\cos\\gamma \& -\\sin\\gamma \& 0 \& 0\\\\ \\sin\\gamma \& \\cos\\gamma \& 0 \& 0\\\\ 0 \& 0 \& 1 \& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} Rz(γ)= cosγsinγ00−sinγcosγ0000100001   因此,三维点先绕 x x x轴逆时针旋转 α \\alpha α角,再绕 y y y轴逆时针旋转 β \\beta β角,最后绕 z z z轴逆时针旋转 γ \\gamma γ角的旋转变换矩阵为(**注意顺序重要** ): R z ( γ ) R y ( β ) R x ( α ) = \[ cos ⁡ γ − sin ⁡ γ 0 0 sin ⁡ γ cos ⁡ γ 0 0 0 0 1 0 0 0 0 1 \] \[ cos ⁡ β 0 sin ⁡ β 0 0 1 0 0 − sin ⁡ β 0 cos ⁡ β 0 0 0 0 1 \] \[ 1 0 0 0 0 cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 \] = \[ cos ⁡ β cos ⁡ γ sin ⁡ α sin ⁡ β cos ⁡ γ − sin ⁡ γ cos ⁡ α sin ⁡ β cos ⁡ α cos ⁡ γ + sin ⁡ α sin ⁡ γ 0 cos ⁡ β sin ⁡ γ sin ⁡ α sin ⁡ β sin ⁡ γ + cos ⁡ α cos ⁡ γ sin ⁡ γ sin ⁡ β cos ⁡ α − sin ⁡ α cos ⁡ γ 0 − sin ⁡ β sin ⁡ α cos ⁡ β cos ⁡ α cos ⁡ β 0 0 0 0 1 \] \\begin{matrix}R_z(\\gamma) R_y(\\beta)R_x(\\alpha) = \\begin{bmatrix} \\cos\\gamma \& -\\sin\\gamma \& 0 \& 0\\\\ \\sin\\gamma \& \\cos\\gamma \& 0 \& 0\\\\ 0 \& 0 \& 1 \& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} \\begin{bmatrix} \\cos\\beta \& 0 \& \\sin\\beta \& 0\\\\ 0 \& 1 \& 0 \& 0\\\\ -\\sin\\beta \& 0 \& \\cos\\beta\& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} \\begin{bmatrix} 1 \& 0 \& 0 \& 0\\\\ 0 \& \\cos\\alpha \& -\\sin\\alpha \& 0\\\\ 0 \& \\sin\\alpha \& \\cos\\alpha \& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} \\\\ = \\begin{bmatrix} \\cos\\beta\\cos\\gamma \& \\sin\\alpha\\sin\\beta\\cos\\gamma−\\sin\\gamma\\cos\\alpha \& \\sin\\beta\\cos\\alpha\\cos\\gamma+\\sin\\alpha\\sin\\gamma \& 0\\\\ \\cos\\beta\\sin\\gamma \& \\sin\\alpha\\sin\\beta\\sin\\gamma+\\cos\\alpha\\cos\\gamma \& \\sin\\gamma\\sin\\beta\\cos\\alpha−\\sin\\alpha\\cos\\gamma \& 0\\\\ -\\sin\\beta \& \\sin\\alpha\\cos\\beta \& \\cos\\alpha\\cos\\beta \& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix}\\end{matrix} Rz(γ)Ry(β)Rx(α)= cosγsinγ00−sinγcosγ0000100001 cosβ0−sinβ00100sinβ0cosβ00001 10000cosαsinα00−sinαcosα00001 = cosβcosγcosβsinγ−sinβ0sinαsinβcosγ−sinγcosαsinαsinβsinγ+cosαcosγsinαcosβ0sinβcosαcosγ+sinαsinγsinγsinβcosα−sinαcosγcosαcosβ00001   详细推导可参考这篇[博客](https://blog.csdn.net/shenquanyue/article/details/103262512) ### 绕任意轴旋转   绕点 ( x 0 , y 0 , z 0 ) (x_0,y_0,z_0) (x0,y0,z0)且单位法向量为 ( a , b , c ) (a,b,c) (a,b,c)的轴旋转的变换矩阵为: \[ cos ⁡ θ + a 2 ( 1 − cos ⁡ θ ) a b ( 1 − cos ⁡ θ ) − c sin ⁡ θ a c ( 1 − cos ⁡ θ ) + b sin ⁡ θ ( ( 1 − a 2 ) x 0 − a ( b y 0 + c z 0 ) ) ( 1 − cos ⁡ θ ) + ( c y 0 − b z 0 ) sin ⁡ θ a b ( 1 − cos ⁡ θ ) + c sin ⁡ θ cos ⁡ θ + b 2 ( 1 − cos ⁡ θ ) b c ( 1 − c o s θ ) − a sin ⁡ θ ( ( 1 − b 2 ) y 0 − b ( a x 0 + c z 0 ) ) ( 1 − cos ⁡ θ ) + ( a z 0 − c x 0 ) sin ⁡ θ a c ( 1 − cos ⁡ θ ) − b sin ⁡ θ b c ( 1 − cos ⁡ θ ) + a sin ⁡ θ cos ⁡ θ + c 2 ( 1 − cos ⁡ θ ) ( ( 1 − c 2 ) z 0 − c ( a x 0 + b y 0 ) ) ( 1 − cos ⁡ θ ) + ( b x 0 − a y 0 ) sin ⁡ θ 0 0 0 1 \] \\begin{bmatrix} \\cos\\theta + a\^2(1-\\cos\\theta) \& ab(1-\\cos\\theta)-c\\sin\\theta \& ac(1-\\cos\\theta)+b\\sin\\theta \& ((1-a\^2)x_0-a(by_0+cz_0))(1-\\cos\\theta)+(cy_0-bz_0)\\sin\\theta \\\\ ab(1-\\cos\\theta)+c\\sin\\theta \& \\cos\\theta+b\^2(1-\\cos\\theta) \& bc(1-cos\\theta)-a\\sin\\theta \& ((1-b\^2)y_0-b(ax_0+cz_0))(1-\\cos\\theta)+(az_0-cx_0)\\sin\\theta \\\\ ac(1-\\cos\\theta)-b\\sin\\theta \& bc(1-\\cos\\theta)+a\\sin\\theta \& \\cos\\theta+c\^2(1-\\cos\\theta) \& ((1-c\^2)z_0-c(ax_0+by_0))(1-\\cos\\theta)+(bx_0-ay_0)\\sin\\theta \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} cosθ+a2(1−cosθ)ab(1−cosθ)+csinθac(1−cosθ)−bsinθ0ab(1−cosθ)−csinθcosθ+b2(1−cosθ)bc(1−cosθ)+asinθ0ac(1−cosθ)+bsinθbc(1−cosθ)−asinθcosθ+c2(1−cosθ)0((1−a2)x0−a(by0+cz0))(1−cosθ)+(cy0−bz0)sinθ((1−b2)y0−b(ax0+cz0))(1−cosθ)+(az0−cx0)sinθ((1−c2)z0−c(ax0+by0))(1−cosθ)+(bx0−ay0)sinθ1   特别地,绕原点且单位法向量为 ( a , b , c ) (a,b,c) (a,b,c)的轴旋转的变换矩阵为: \[ cos ⁡ θ + a 2 ( 1 − cos ⁡ θ ) a b ( 1 − cos ⁡ θ ) − c sin ⁡ θ a c ( 1 − cos ⁡ θ ) + b sin ⁡ θ 0 a b ( 1 − cos ⁡ θ ) + c sin ⁡ θ cos ⁡ θ + b 2 ( 1 − cos ⁡ θ ) b c ( 1 − c o s θ ) − a sin ⁡ θ 0 a c ( 1 − cos ⁡ θ ) − b sin ⁡ θ b c ( 1 − cos ⁡ θ ) + a sin ⁡ θ cos ⁡ θ + c 2 ( 1 − cos ⁡ θ ) 0 0 0 0 1 \] \\begin{bmatrix} \\cos\\theta + a\^2(1-\\cos\\theta) \& ab(1-\\cos\\theta)-c\\sin\\theta \& ac(1-\\cos\\theta)+b\\sin\\theta \& 0 \\\\ ab(1-\\cos\\theta)+c\\sin\\theta \& \\cos\\theta+b\^2(1-\\cos\\theta) \& bc(1-cos\\theta)-a\\sin\\theta \& 0 \\\\ ac(1-\\cos\\theta)-b\\sin\\theta \& bc(1-\\cos\\theta)+a\\sin\\theta \& \\cos\\theta+c\^2(1-\\cos\\theta) \& 0 \\\\ 0 \& 0 \& 0 \& 1 \\end{bmatrix} cosθ+a2(1−cosθ)ab(1−cosθ)+csinθac(1−cosθ)−bsinθ0ab(1−cosθ)−csinθcosθ+b2(1−cosθ)bc(1−cosθ)+asinθ0ac(1−cosθ)+bsinθbc(1−cosθ)−asinθcosθ+c2(1−cosθ)00001   详细推导可参考这篇[博客](https://blog.csdn.net/u013407012/article/details/103721902)

相关推荐
汉克老师3 天前
GESP2023年12月认证C++二级( 第三部分编程题(2) 小杨的H字矩阵)
c++·算法·矩阵·循环结构·gesp二级·gesp2级
AI科技星3 天前
物理世界的几何建构:论统一场论的本体论革命与概念生成
人工智能·opencv·线性代数·算法·矩阵
没有bug.的程序员3 天前
订单系统重构史诗:从单体巨兽到微服务矩阵的演进、数据一致性内核与分布式事务
java·微服务·矩阵·重构·分布式事务·数据一致性·订单系统
super_lzb3 天前
【线性代数】矩阵第一讲:矩阵与矩阵的运算
线性代数·矩阵·考研数学·矩阵的计算
newbiai3 天前
TikTok矩阵账号引流怎么解决效率低成本高?
python·线性代数·矩阵
逆境不可逃3 天前
【从零入门23种设计模式08】结构型之组合模式(含电商业务场景)
线性代数·算法·设计模式·职场和发展·矩阵·组合模式
菜鸡儿齐4 天前
leetcode-搜索二维矩阵
算法·leetcode·矩阵
炽烈小老头4 天前
【每天学习一点算法 2026/02/24】矩阵置零
学习·算法·矩阵
有为少年4 天前
Monarch矩阵:从设计直觉到数学推导与实际应用
人工智能·深度学习·学习·线性代数·机器学习·计算机视觉·矩阵
壹通GEO5 天前
AI-GEO内容矩阵:打造永不枯竭的流量池
人工智能·线性代数·矩阵