计算机图形学中的矩阵变化

1. 二维矩阵线性变换

从二维矩阵变化开始谈起
缩放矩阵( S c a l e M a t r i x Scale Matrix ScaleMatrix)
[ x ′ y ′ ] = [ s 0 0 s ] [ x y ] \left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right]=\left[\begin{array}{ll}s & 0 \\ 0 & s\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right] [xy]=[s00s][xy]
切变矩阵( S h e a r M a t r i x Shear Matrix ShearMatrix)
[ x ′ y ′ ] = [ 1 a 0 1 ] [ x y ] \left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right]=\left[\begin{array}{ll}1 & a \\ 0 & 1\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right] [xy]=[10a1][xy]
旋转矩阵( R o t a t i o n M a t r i x Rotation Matrix RotationMatrix)
R θ = [ cos ⁡ θ − sin ⁡ θ sin ⁡ θ cos ⁡ θ ] \mathbf{R}_{\theta}=\left[\begin{array}{cc}\cos \theta & -\sin \theta \\ \sin \theta & \cos \theta\end{array}\right] Rθ=[cosθsinθsinθcosθ]
以上变换都能写成这种形式
x ′ = a x + b y y ′ = c x + d y [ x ′ y ′ ] = [ a b c d ] [ x y ] x ′ = M x \begin{aligned} x^{\prime} &=a x+b y \\ y^{\prime} &=c x+d y \\\left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right] &=\left[\begin{array}{ll}a & b \\ c & d\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right] \\ \mathbf{x}^{\prime} &=\mathbf{M} \mathbf{x} \end{aligned} xy[xy]x=ax+by=cx+dy=[acbd][xy]=Mx
称为线性变换

2. 二维矩阵平移变换

这边需要考虑为什么要引入齐次坐标,答案是因为平移变换,目的很明确想要统一坐标转换矩阵
平移矩阵表现形式为
[ x ′ y ′ ] = [ a b c d ] [ x y ] + [ t x t y ] \left[\begin{array}{l}x^{\prime} \\ y^{\prime}\end{array}\right]=\left[\begin{array}{ll}a & b \\ c & d\end{array}\right]\left[\begin{array}{l}x \\ y\end{array}\right]+\left[\begin{array}{c}t_{x} \\ t_{y}\end{array}\right] [xy]=[acbd][xy]+[txty]
在做平移矩阵变换时二维矩阵没办法直接满足,平移矩阵前半部分表示为线性变换,后半部分表示为平移变换。

3. 其次坐标表示下的二维变换

为了统一变换,使用齐次坐标,得到平移矩阵为:
( x ′ y ′ w ′ ) = ( 1 0 t x 0 1 t y 0 0 1 ) ⋅ ( x y 1 ) = ( x + t x y + t y 1 ) \left(\begin{array}{c}x^{\prime} \\ y^{\prime} \\ w^{\prime}\end{array}\right)=\left(\begin{array}{ccc}1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1\end{array}\right) \cdot\left(\begin{array}{l}x \\ y \\ 1\end{array}\right)=\left(\begin{array}{c}x+t_{x} \\ y+t_{y} \\ 1\end{array}\right) xyw=100010txty1xy1=x+txy+ty1
在统一一个名词仿射变换(affine)=线性变换+平移变换,使用齐次坐标仿射变换均可以用如下矩阵表示
( x ′ y ′ 1 ) = ( a b t x c d t y 0 0 1 ) ⋅ ( x y 1 ) \left(\begin{array}{l}x^{\prime} \\ y^{\prime} \\ 1\end{array}\right)=\left(\begin{array}{ccc}a & b & t_{x} \\ c & d & t_{y} \\ 0 & 0 & 1\end{array}\right) \cdot\left(\begin{array}{l}x \\ y \\ 1\end{array}\right) xy1=ac0bd0txty1xy1
齐次坐标表示的缩放矩阵
S ( s x , s y ) = ( s x 0 0 0 s y 0 0 0 1 ) \mathbf{S}\left(s_{x}, s_{y}\right)=\left(\begin{array}{ccc}s_{x} & 0 & 0 \\ 0 & s_{y} & 0 \\ 0 & 0 & 1\end{array}\right) S(sx,sy)=sx000sy0001
齐次坐标表示的旋转矩阵
R ( α ) = ( cos ⁡ α − sin ⁡ α 0 sin ⁡ α cos ⁡ α 0 0 0 1 ) \mathbf{R}(\alpha)=\left(\begin{array}{ccc}\cos \alpha & -\sin \alpha & 0 \\ \sin \alpha & \cos \alpha & 0 \\ 0 & 0 & 1\end{array}\right) R(α)=cosαsinα0sinαcosα0001
齐次坐标表示的平移矩阵
T ( t x , t y ) = ( 1 0 t x 0 1 t y 0 0 1 ) \mathbf{T}\left(t_{x}, t_{y}\right)=\left(\begin{array}{ccc}1 & 0 & t_{x} \\ 0 & 1 & t_{y} \\ 0 & 0 & 1\end{array}\right) T(tx,ty)=100010txty1

矩阵的逆变换 M − 1 \mathbf{M}^{-1} M1
请添加图片描述

先旋转(默认绕着原点旋转)然后平移
T ( 1 , 0 ) ⋅ R 45 [ x y 1 ] = [ 1 0 1 0 1 0 0 0 1 ] [ cos ⁡ 4 5 ∘ − sin ⁡ 4 5 ∘ 0 sin ⁡ 4 5 ∘ cos ⁡ 4 5 ∘ 0 0 0 1 ] [ x y 1 ] T_{(1,0)} \cdot R_{45}\left[\begin{array}{l}x \\ y \\ 1\end{array}\right]=\left[\begin{array}{lll}1 & 0 & 1 \\ 0 & 1 & 0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{ccc}\cos 45^{\circ} & -\sin 45^{\circ} & 0 \\ \sin 45^{\circ} & \cos 45^{\circ} & 0 \\ 0 & 0 & 1\end{array}\right]\left[\begin{array}{l}x \\ y \\ 1\end{array}\right] T(1,0)R45xy1=100010101cos45sin450sin45cos450001xy1

4. 其次坐标表示下的三维变换

同理对于三维的 变换可以用4*4的其次坐标来表示:
( x ′ y ′ z ′ 1 ) = ( a b c t x d e f t y g h i t z 0 0 0 1 ) ⋅ ( x y z 1 ) \left(\begin{array}{l}x^{\prime} \\ y^{\prime} \\ z^{\prime} \\ 1\end{array}\right)=\left(\begin{array}{llll}a & b & c & t_{x} \\ d & e & f & t_{y} \\ g & h & i & t_{z} \\ 0 & 0 & 0 & 1\end{array}\right) \cdot\left(\begin{array}{l}x \\ y \\ z \\ 1\end{array}\right) xyz1=adg0beh0cfi0txtytz1xyz1
同样还是线性变换先做(旋转缩放)在进行平移操作

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LV小猪精

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值