坐标变换(缩放,平移,旋转,剪切,镜像)

缩放变换

缩放为将坐标按一定比例缩放,
[ x ′ y ′ z ′ ] = [ x s 0 0 0 y s 0 0 0 z s ] [ x y z ] \begin{bmatrix} x'\\y' \\z'\end{bmatrix}=\begin{bmatrix} x_{s} & 0 &0 \\ 0& y_{s}&0 \\ 0& 0&z_{s}\end{bmatrix}\begin{bmatrix} x\\y \\z\end{bmatrix} xyz=xs000ys000zsxyz
其中 x s x_{s} xs y s y_{s} ys z s z_{s} zs为缩放的比例

镜像变换

要将坐标点进行镜像,只需左乘镜像矩阵

  • x轴镜像矩阵
    M x = [ 1 0 0 0 − 1 0 0 0 − 1 ] M_x = \begin{bmatrix} 1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & -1 \end{bmatrix} Mx=100010001
  • y轴镜像矩阵
    M y = [ − 1 0 0 0 1 0 0 0 − 1 ] M_y = \begin{bmatrix} -1 & 0 & 0 \\ 0 & 1 & 0 \\ 0 & 0 & -1 \end{bmatrix} My=100010001
  • z轴镜像矩阵
    M z = [ − 1 0 0 0 − 1 0 0 0 1 ] M_z = \begin{bmatrix} -1 & 0 & 0 \\ 0 & -1 & 0 \\ 0 & 0 & 1 \end{bmatrix} Mz=100010001

旋转变换

三维的旋转可以看成是原始坐标左乘对应轴的旋转矩阵
顺逆时针旋转的矩阵互为转置矩阵和逆矩阵,所有他们是正交阵

  • 坐标系不动,点逆时针旋转的旋转矩阵
    R x ( θ ) = [ 1 0 0 0 cos ⁡ ( θ ) − sin ⁡ ( θ ) 0 sin ⁡ ( θ ) cos ⁡ ( θ ) ] \mathbf{R}_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(\theta) & -\sin(\theta) \\ 0 & \sin(\theta) & \cos(\theta) \end{bmatrix} Rx(θ)=1000cos(θ)sin(θ)0sin(θ)cos(θ)
    R y ( θ ) = [ cos ⁡ ( θ ) 0 sin ⁡ ( θ ) 0 1 0 − sin ⁡ ( θ ) 0 cos ⁡ ( θ ) ] \mathbf{R}_y(\theta) = \begin{bmatrix} \cos(\theta) & 0 & \sin(\theta) \\ 0 & 1 & 0 \\ -\sin(\theta) & 0 & \cos(\theta) \end{bmatrix} Ry(θ)=cos(θ)0sin(θ)010sin(θ)0cos(θ)
    R z ( θ ) = [ cos ⁡ ( θ ) − sin ⁡ ( θ ) 0 sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 1 ] \mathbf{R}_z(\theta) = \begin{bmatrix} \cos(\theta) & -\sin(\theta) & 0 \\ \sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)=cos(θ)sin(θ)0sin(θ)cos(θ)0001

  • 目标点不动,坐标系逆时针旋转的旋转矩阵(==坐标点或者说是顺时针旋转的矩阵)
    R x ( θ ) = [ 1 0 0 0 cos ⁡ ( θ ) sin ⁡ ( θ ) 0 − sin ⁡ ( θ ) cos ⁡ ( θ ) ] R_x(\theta) = \begin{bmatrix} 1 & 0 & 0 \\ 0 & \cos(\theta) & \sin(\theta) \\ 0 & -\sin(\theta) & \cos(\theta) \end{bmatrix} Rx(θ)=1000cos(θ)sin(θ)0sin(θ)cos(θ)
    R y ( θ ) = [ cos ⁡ ( θ ) 0 − sin ⁡ ( θ ) 0 1 0 sin ⁡ ( θ ) 0 cos ⁡ ( θ ) ] R_y(\theta) = \begin{bmatrix} \cos(\theta) & 0 & -\sin(\theta) \\ 0 & 1 & 0 \\ \sin(\theta) & 0 & \cos(\theta) \end{bmatrix} Ry(θ)=cos(θ)0sin(θ)010sin(θ)0cos(θ)
    R z ( θ ) = [ cos ⁡ ( θ ) sin ⁡ ( θ ) 0 − sin ⁡ ( θ ) cos ⁡ ( θ ) 0 0 0 1 ] R_z(\theta) = \begin{bmatrix} \cos(\theta) & \sin(\theta) & 0 \\ -\sin(\theta) & \cos(\theta) & 0 \\ 0 & 0 & 1 \end{bmatrix} Rz(θ)=cos(θ)sin(θ)0sin(θ)cos(θ)0001

  • 三维坐标点绕任意坐标轴旋转可以表示为
    [ x ′ y ′ z ′ ] = R x ( θ ) R y ( θ ) R z ( θ ) [ x y z ] \begin{bmatrix} x'\\y' \\z'\end{bmatrix}={R}_x(\theta){R}_y(\theta){R}_z(\theta)\begin{bmatrix} x\\y \\z\end{bmatrix} xyz=Rx(θ)Ry(θ)Rz(θ)xyz

剪切变换

二维剪切
  • x方向剪切
    ![[Pasted image 20240206195543.png]]

[ x ′ y ′ ] = [ 1 a 0 1 ] [ x y ] \begin{bmatrix} x'\\y'\end{bmatrix}=\begin{bmatrix} 1& a\\ 0&1\end{bmatrix}\begin{bmatrix} x\\y\end{bmatrix} [xy]=[10a1][xy]
特点:y值不变,x坐标在最高的点平移了a,最低点没有移动,其余位置为a ∗ * y

  • y方向剪切:
    [ x ′ y ′ ] = [ 1 0 a 1 ] [ x y ] \begin{bmatrix} x'\\y'\end{bmatrix}=\begin{bmatrix} 1& 0\\ a&1\end{bmatrix}\begin{bmatrix} x\\y\end{bmatrix} [xy]=[1a01][xy]
三维剪切

在这里插入图片描述

沿z方向剪切
S z = [ 1 0 0 0 1 0 λ 1 λ 2 1 ] S_z = \begin{bmatrix} 1 & 0 & 0 \\ 0 & 1 & 0 \\ \lambda_{1} & \lambda_{2} & 1 \end{bmatrix} Sz=10λ101λ2001
以z轴剪切为例, λ 1 \lambda _{1} λ1 λ 2 \lambda _{2} λ2 表示剪切因子,剪切因子的值决定了剪切的强度和方向,越大就沿该轴的移动量越多,点坐标左乘该矩阵的效果为x,y坐标不变,z轴坐标产生移动,
**沿y方向剪切
S z = [ 1 0 0 λ 2 1 λ 1 0 0 1 ] S_z = \begin{bmatrix} 1 & 0 & 0 \\ \lambda_{2} & 1 & \lambda_{1} \\ 0 & 0 & 1 \end{bmatrix} Sz=1λ200100λ11
沿z方向剪切
S z = [ 1 λ 1 λ 2 0 1 0 0 0 1 ] S_z = \begin{bmatrix} 1 & \lambda_{1} & \lambda_{2} \\ 0 & 1 & 0 \\ 0 & 0 & 1 \end{bmatrix} Sz=100λ110λ201

### 平移变换

非线性平移

一想到平移,我们首先会想到这种形式也称(仿射变换)
[ x ′ y ′ z ′ ] = [ x y z ] + [ x 0 y 0 z 0 ] \begin{bmatrix} x'\\y' \\z'\end{bmatrix}=\begin{bmatrix} x\\y \\z\end{bmatrix}+\begin{bmatrix} x_{0}\\y_{0} \\z_{0}\end{bmatrix} xyz=xyz+x0y0z0
这样的平移变换当然是可行的,但是前面的变换都是左乘一个矩阵就可以完成,而这样的平移变换会带来矩阵加法运算,。人们总是希望能有一个统一的方法来表示同类事物,希望平移变换也能够像其他变换一样用同样的形式表示,使用起来更加便捷统一。
前辈大牛们经过各种尝试,想出了一个办法,就是引入齐次坐标

齐次坐标

简而言之,齐次坐标就是用N+1维来代表N维坐标
[ x y z ] \begin{bmatrix} x\\y \\z\end{bmatrix} xyz [ x y z 1 ] \begin{bmatrix} x\\y \\z\\1\end{bmatrix} xyz1表示,
向量 [ x y z ] \begin{bmatrix} x\\y \\z\end{bmatrix} xyz [ x y z 0 ] \begin{bmatrix} x\\y \\z\\0\end{bmatrix} xyz0表示,
向量具有平移不变形,任何一个向量平移后表示原来的向量,在向量转为齐次坐标形式的时候,在末尾添加0,就是为了保护这个向量在平移过程中不发生变化。

线性平移

引入齐次坐标以后,仿射变换可以转换为
[ x ′ y ′ z ′ 1 ] = [ 1 0 0 x 0 0 1 0 y 0 0 0 1 z 0 0 0 0 1 ] [ x y z 1 ] \begin{bmatrix} x'\\y' \\z'\\1\end{bmatrix}=\begin{bmatrix} 1 & 0&0 & x_{0}\\ 0& 1&0 & y_{0} \\ 0& 0 &1&z_{0} \\ 0& 0 &0&1\end{bmatrix}\begin{bmatrix} x\\ y\\ z\\1\end{bmatrix} xyz1=100001000010x0y0z01xyz1

逆变换

逆变换就是乘以乘以变换矩阵的 逆矩阵

参考

计算机图形学(三)-图形学中的基本变换(缩放、平移、旋转、剪切、镜像)_剪切变换-CSDN博客
chatGPT

  • 23
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值