计算机图形学—变换矩阵

三维变换

使用齐次坐标,避免各变换矩阵可能会有不同的维度并且无法相乘。

平移变换

点原位置 P ( x , y , z ) P(x,y,z) P(x,y,z),平移后位置 P ′ ( x + T x , y + T y , z + T z ) P^{'}(x+T_x, y+T_y, z+T_z) P(x+Tx,y+Ty,z+Tz)。由此可得:
P ′ = T P P^{'}=TP P=TP ( x + T x y + T y z + T z 1 ) = [ 1 0 0 T x 0 1 0 T y 0 0 1 T z 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x+T_x \\ y+T_y \\ z + T_z\\ 1 \end{pmatrix} = \begin{bmatrix} 1& 0 & 0 & T_x \\ 0 & 1 & 0 & T_y \\ 0 & 0 & 1 & T_z \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} x+Txy+Tyz+Tz1 = 100001000010TxTyTz1 xyz1

缩放变换

点原位置 P ( x , y , z ) P(x, y, z) P(x,y,z),缩放后位置 P ′ ( x S x , y S y , z S z ) P^{'}(x S_x, yS_y, zS_z) P(xSx,ySy,zSz)。由此可得:
P ′ = S P P^{'}=SP P=SP ( x S x y S y z S z 1 ) = [ S x 0 0 0 0 S y 0 0 0 0 S z 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} xS_x \\ yS_y \\ z S_z\\ 1 \end{pmatrix} = \begin{bmatrix} S_x& 0 & 0 & 0 \\ 0 & S_y & 0 & 0 \\ 0 & 0 & S_z & 0 \\ 0 & 0 & 0 & 1\end{bmatrix} \begin{pmatrix} x \\ y \\ z \\ 1\end{pmatrix} xSxySyzSz1 = Sx0000Sy0000Sz00001 xyz1

缩放还可以用来切换坐标系

旋转变换

  1. x x x轴旋转 θ \theta θ
    ( x y ′ z ′ 1 ) = [ 1 0 0 0 0 cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x \\ y^{'} \\ z^{'} \\1 \end{pmatrix}=\begin{bmatrix} 1& 0 & 0 & 0 \\ 0 & \cos\theta & -\sin\theta & 0 \\ 0 & \sin\theta & \cos\theta & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} xyz1 = 10000cosθsinθ00sinθcosθ00001 xyz1

  2. y y y轴旋转 θ \theta θ
    ( x ′ y z ′ 1 ) = [ cos ⁡ θ 0 sin ⁡ θ 0 0 1 0 0 − sin ⁡ θ 0 cos ⁡ θ 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x^{'} \\ y \\ z^{'} \\1 \end{pmatrix}=\begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \\ 0 & 1 &0 & 0 \\ -\sin\theta & 0 & \cos\theta & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} xyz1 = cosθ0sinθ00100sinθ0cosθ00001 xyz1

  3. z z z轴旋转 θ \theta θ
    ( x ′ y ′ z 1 ) = [ cos ⁡ θ − sin ⁡ θ 0 0 sin ⁡ θ cos ⁡ θ 0 0 0 0 1 0 0 0 0 1 ] ( x y z 1 ) \begin{pmatrix} x^{'} \\ y^{'} \\ z \\1 \end{pmatrix}=\begin{bmatrix} \cos\theta & -\sin\theta & 0 & 0 \\ \sin\theta & \cos\theta &0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1\end{bmatrix}\begin{pmatrix} x \\ y \\ z \\1 \end{pmatrix} xyz1 = cosθsinθ00sinθcosθ0000100001 xyz1

视图变换

已知世界基坐标系 ( e ⃗ x , e ⃗ y , e ⃗ z ) (\vec{e}_x, \vec{e}_y,\vec{e}_z) (e x,e y,e z), 相机坐标系 ( u ⃗ , v ⃗ , n ⃗ ) (\vec{u}, \vec{v}, \vec{n}) (u ,v ,n ) P w = x e ⃗ x + y e ⃗ y + z e ⃗ z P_w=x\vec{e}_x+y\vec{e}_y+z\vec{e}_z Pw=xe x+ye y+ze z。求 P w P_w Pw在相机坐标系的坐标值 P c P_c Pc
P w = x e ⃗ x + y e ⃗ y + z e ⃗ z = [ e ⃗ x e ⃗ y e ⃗ z ] ( x y z ) P_w=x\vec{e}_x+y\vec{e}_y+z\vec{e}_z=\begin{bmatrix} \vec{e}_x & \vec{e}_y & \vec{e}_z\end{bmatrix} \begin{pmatrix} x \\ y \\ z \end{pmatrix} Pw=xe x+ye y+ze z=[e xe ye z] xyz
P c = x ′ u ⃗ + y ′ v ⃗ + z ′ n ⃗ = [ u ⃗ v ⃗ n ⃗ ] ( x ′ y ′ z ′ ) = [ u x e ⃗ x + u y e ⃗ y + u z e ⃗ z v x e ⃗ x + v y e ⃗ y + v z e ⃗ z n x e ⃗ x + n y e ⃗ y + n z e ⃗ z ] ( x ′ y ′ z ′ ) = [ e ⃗ x e ⃗ y e ⃗ z ] [ u x v x n x u y v y n y u z v z n z ] ( x ′ y ′ z ′ ) P_c=x^{'}\vec{u}+y^{'}\vec{v}+z^{'}\vec{n}=\begin{bmatrix} \vec{u} & \vec{v} & \vec{n}\end{bmatrix} \begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix}=\begin{bmatrix} u_x\vec{e}_x+u_y\vec{e}_y+u_z\vec{e}_z &v_x\vec{e}_x+v_y\vec{e}_y+v_z\vec{e}_z& n_x\vec{e}_x+n_y\vec{e}_y+n_z\vec{e}_z\end{bmatrix} \begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix}=\begin{bmatrix} \vec{e}_x & \vec{e}_y & \vec{e}_z\end{bmatrix}\begin{bmatrix} u_x & v_x & n_x \\ u_y & v_y & n_y \\ u_z &v_z & n_z\end{bmatrix}\begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix} Pc=xu +yv +zn =[u v n ] xyz =[uxe x+uye y+uze zvxe x+vye y+vze znxe x+nye y+nze z] xyz =[e xe ye z] uxuyuzvxvyvznxnynz xyz
由此可得:
[ u x v x n x u y v y n y u z v z n z ] ( x ′ y ′ z ′ ) = ( x y z ) \begin{bmatrix} u_x & v_x & n_x \\ u_y & v_y & n_y \\ u_z &v_z & n_z\end{bmatrix}\begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix} = \begin{pmatrix} x \\ y \\ z \end{pmatrix} uxuyuzvxvyvznxnynz xyz = xyz ( x ′ y ′ z ′ ) = [ u x u y u z v x v y v z n x n y n z ] ( x y z ) \begin{pmatrix} x^{'} \\ y^{'} \\ z^{'} \end{pmatrix} = \begin{bmatrix} u_x & u_y & u_z \\ v_x & v_y & v_z \\ n_x &n_y & n_z\end{bmatrix}\begin{pmatrix} x \\ y \\ z \end{pmatrix} xyz = uxvxnxuyvynyuzvznz xyz

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值