【Computer Graphics】计算机图形学之基础变换矩阵


   变换矩阵 (Transformation Marices)在图形学中的重要性不用多说,一切物体的 缩放旋转位移,都可以通过变换矩阵作用得到。同时在 投影 (projection) 变换的时候也有很多应用,本文将会介绍一些简要的变换矩阵。

  我们将如下式所示的简单矩阵乘法定义为对向量 ( x , y ) T (x,y)^T (x,y)T的线性变换。
[ a 11 a 12 a 21 a 22 ] [ x y ] = [ a 11 x + a 12 y a 21 x + a 22 y ] \begin{bmatrix} {a_{11}}&{a_{12}}\\ {a_{21}}&{a_{22}}\\ \end{bmatrix} \begin{bmatrix} {x}\\ {y}\\ \end{bmatrix} = \begin{bmatrix} {a_{11}x}+{a_{12}y}\\ {a_{21}x}+{a_{22}y}\\ \end{bmatrix} [a11a21a12a22][xy]=[a11x+a12ya21x+a22y]

一、缩放变换(scaling)

  缩放变换是一种沿着坐标轴作用的变换,定义如下:
s c a l e ( s x , s y ) = [ s x 0 0 s y ] scale(s_x,s_y) = \begin{bmatrix} {s_x}&{0}\\ {0}&{s_y}\\ \end{bmatrix} scale(sx,sy)=[sx00sy]

  该矩阵对带有笛卡尔分量的向量进行了变化,将所有的点变为 ( s x x , s y y ) T (s_xx,s_yy)^T (sxx,syy)T
[ s x 0 0 s y ] [ x y ] = [ s x x s y y ] . \begin{bmatrix} {s_x}&{0}\\ {0}&{s_y}\\ \end{bmatrix} \begin{bmatrix} { x}\\ { y}\\ \end{bmatrix} = \begin{bmatrix} { s_xx}\\ { s_yy}\\ \end{bmatrix}. [sx00sy][xy]=[sxxsyy].

示例1:均匀缩放
在这里插入图片描述
  上图为将 x x x y y y 均匀缩小2倍的矩阵,轴对齐的缩放矩阵具有比例,每个对角线元素的变化,而非对角线元素的变化为零。

示例2:非均匀缩放
在这里插入图片描述
  此例将原图在水平方向上减半,在垂直方向上增加三倍。缩放矩阵是对角的,且为不相等元素。此时,时钟的方形轮廓变成了矩形,而圆形的面变成了矩形一个椭圆。

二、反射变换(Reflection)

  反射变换是一种基础的线性变换,我们可以通过上诉的缩放变换来反射任意坐标轴上的向量。
关于 y y y 轴反射可通过将所有 x x x 坐标乘以 − 1 -1 1 来实现:
r e f l e c t − y = [ − 1 0 0 1 ] reflect-y= \begin{bmatrix} {-1}&{0}\\ {0}&{1}\\ \end{bmatrix} reflecty=[1001]在这里插入图片描述

关于 x x x 轴反射可通过将所有 y y y 坐标乘以 − 1 -1 1 来实现:
r e f l e c t − x = [ 1 0 0 − 1 ] . reflect-x= \begin{bmatrix} {1}&{0}\\ {0}&{-1}\\ \end{bmatrix}. reflectx=[1001].在这里插入图片描述

三、剪切变换(Shearing)

  剪切变换直观理解就是把物体一边固定,然后拉另外一边。水平和垂直剪切矩阵定义如下:
s h e a r − x ( s ) = [ 1 s 0 1 ] , s h e a r − y ( s ) = [ 1 0 s 1 ] . shear - x(s) = \begin{bmatrix} {1}&{s}\\ {0}&{1}\\ \end{bmatrix},shear - y(s) = \begin{bmatrix} {1}&{0}\\ {s}&{1}\\ \end{bmatrix}. shearx(s)=[10s1]sheary(s)=[1s01].
s h e a r − x ( s ) shear - x(s) shearx(s) s h e a r − y ( s ) shear - y(s) sheary(s)分别对应了向"拉伸"x轴,和"拉伸"y轴。

示例1:水平剪切的转换
在这里插入图片描述
变换矩阵为:
s h e a r − x ( s ) = [ 1 1 0 1 ] . shear - x(s) = \begin{bmatrix} {1}&{1}\\ {0}&{1}\\ \end{bmatrix}. shearx(s)=[1011].

示例2:垂直剪切的转换
在这里插入图片描述
剪切矩阵使 y y y 轴点按其横坐标的比例向上移动变换矩阵为:
s h e a r − y ( s ) = [ 1 0 1 1 ] . shear - y(s) = \begin{bmatrix} {1}&{0}\\ {1}&{1}\\ \end{bmatrix}. sheary(s)=[1101].

  在这两种情况下,被剪切的时钟的方形轮廓变成了一个平行四边形,被剪切的钟的圆形表面变成了椭圆形。

  另一种考虑剪切的方法是只考虑垂直方向或水平方向的旋转轴。沿垂直轴顺时针旋转角度为 φ \varphi φ剪切矩阵为:
[ 1 t a n φ 0 1 ] . \begin{bmatrix} {1}&{tan\varphi}\\ {0}&{1}\\ \end{bmatrix}. [10tanφ1].
同理,沿水平轴逆时针倾斜角度为 φ \varphi φ剪切矩阵为:
[ 1 0 t a n φ 1 ] . \begin{bmatrix} {1} & {0}\\ {tan\varphi} & {1} \\ \end{bmatrix}. [1tanφ01].

四、旋转变换(Rotation)

在这里插入图片描述
  假设需要让向量 a a a 逆时针旋转一个角度 ϕ \phi ϕ ,从而得到向量 b b b。若向量 a a a x x x 轴的夹角为 α \alpha α ,则向量 a a a 的长度为 r = x α 2 + y α 2 r = \sqrt{x_\alpha^2 + y_\alpha^2} r=xα2+yα2 ,且
{ x α = r c o s α y α = r s i n α \begin{cases} x_\alpha &= rcos\alpha \\ y_\alpha &= rsin\alpha \\ \end{cases} {xαyα=rcosα=rsinα
  由于向量 b b b 是向量 a a a 经过旋转得到的,故其长度同样为 r r r ,此时向量 b b b x x x 轴夹角为 ( α + ϕ ) (\alpha +\phi) (α+ϕ)。使用三角变换得到:
x b = r c o s ( α + ϕ ) = r c o s α c o s ϕ − r s i n α s i n ϕ y b = r s i n ( α + ϕ ) = r s i n α c o s ϕ + r c o s α s i n ϕ x_b = rcos(\alpha+\phi) = rcos\alpha cos\phi - rsin\alpha sin\phi\\ y_b = rsin(\alpha+\phi) = rsin\alpha cos\phi + rcos\alpha sin\phi xb=rcos(α+ϕ)=rcosαcosϕrsinαsinϕyb=rsin(α+ϕ)=rsinαcosϕ+rcosαsinϕ
已知 x α = r c o s α x_\alpha = rcos\alpha xα=rcosα y α = r s i n α y_\alpha = rsin\alpha yα=rsinα,则向量 b b b 的坐标可改写为:
x b = x a c o s ϕ − y a s i n ϕ y b = x a s i n ϕ + y a c o s ϕ x_b = x_a cos\phi - y_a sin\phi\\ y_b = x_a sin\phi+y_a cos\phi xb=xacosϕyasinϕyb=xasinϕ+yacosϕ

  我们希望仅用一个变换矩阵表示将向量 a a a 旋转到向量 b b b ,根据上式,可写出该旋转变换矩阵为:
r o t a t e ( ϕ ) = [ c o s ϕ − s i n ϕ s i n ϕ c o s ϕ ] . rotate(\phi) = \begin{bmatrix} {cos\phi}&{-sin\phi}\\ {sin\phi}&{cos\phi}\\ \end{bmatrix}. rotate(ϕ)=[cosϕsinϕsinϕcosϕ].

旋转变换方程可写为:
[ x b y b ] = [ c o s ϕ − s i n ϕ s i n ϕ c o s ϕ ] [ x a y a ] . \begin{bmatrix} {x_b}\\ {y_b}\\ \end{bmatrix}= \begin{bmatrix} {cos\phi}&{-sin\phi}\\ {sin\phi}&{cos\phi}\\ \end{bmatrix} \begin{bmatrix} { x_a}\\ { y_a}\\ \end{bmatrix}. [xbyb]=[cosϕsinϕsinϕcosϕ][xaya].

示例:将原图逆时针旋转45°原点为旋转中心
在这里插入图片描述
[ c o s π 4 − s i n π 4 s i n π 4 c o s π 4 ] = [ 0.707 − 0.707 0.707 0.707 ] \begin{bmatrix} {cos \frac{\pi}{4}}&{-sin\frac{\pi}{4}}\\ {sin\frac{\pi}{4}}&{cos\frac{\pi}{4}}\\ \end{bmatrix}= \begin{bmatrix} {0.707}&{-0.707}\\ {0.707}&{0.707}\\ \end{bmatrix} [cos4πsin4πsin4πcos4π]=[0.7070.7070.7070.707]

五、平移变换(Translation)

  为了通过 变换矩阵实现图像的平移(Translation)操作,我们引入一维新的坐标,称之为齐次坐标。使 ( x , y ) T (x,y)^T (x,y)T -> ( x , y , 1 ) T (x,y,1)^T (x,y,1)T
  最后一维为1时, ( x , y , 1 ) T (x,y,1)^T (x,y,1)T 表示一个二维坐标点, 最后一维为0时, ( x , y , 0 ) T (x,y,0)^T (x,y,0)T 表示一个二维向量。

  此时即可用一个变换矩阵表示线性变换,且实现图像平移:
[ x ′ y ′ 1 ] = [ m 11 m 12 x t m 21 m 22 y t 0 0 1 ] [ x y 1 ] = [ m 11 x + m 12 y + x t m 21 x + m 22 y + y t 1 ] \begin{bmatrix} {x'}\\ {y'}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {m_{11}}&{m_{12}}&{x_t}\\ {m_{21}}&{m_{22}}&{y_t}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} { x}\\ { y}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {m_{11}x+m_{12}y+{x_t}}\\ {m_{21}x+m_{22}y+{y_t}}\\ {1}\\ \end{bmatrix} xy1=m11m210m12m220xtyt1xy1=m11x+m12y+xtm21x+m22y+yt1

注意:
[ x y ω ] \begin{bmatrix} { x}\\ { y}\\ {\omega}\\ \end{bmatrix} xyω的二维坐标点是 [ x / ω y / ω 1 ] \begin{bmatrix} { x/\omega}\\ { y/\omega}\\ {1}\\ \end{bmatrix} x/ωy/ω1

绕任意坐标轴旋转

在这里插入图片描述

参考
[1] Fundamentals of Computer Graphics 4th

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值