当前位置:   article > 正文

【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 ]

[a11a12a21a22]
[xy]
=
[a11x+a12ya21x+a22y]
[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) =

[sx00sy]
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 ] .

[sx00sy]
[xy]
=
[sxxsyy]
. [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=

[1001]
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=

[1001]
. 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) =

[1s01]
,shear - y(s) =
[10s1]
. 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) =

[1101]
. shearx(s)=[1011].

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

[1011]
. sheary(s)=[1101].

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

  另一种考虑剪切的方法是只考虑垂直方向或水平方向的旋转轴。沿垂直轴顺时针旋转角度为 φ \varphi φ剪切矩阵为:
[ 1 t a n φ 0 1 ] .

[1tanφ01]
. [10tanφ1].
同理,沿水平轴逆时针倾斜角度为 φ \varphi φ剪切矩阵为:
[ 1 0 t a n φ 1 ] .
[10tanφ1]
.
[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 α

{xα=rcosαyα=rsinα
{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) =

[cosϕsinϕsinϕcosϕ]
. 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 ] .

[xbyb]
=
[cosϕsinϕsinϕcosϕ]
[xaya]
. [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 ]

[cosπ4sinπ4sinπ4cosπ4]
=
[0.7070.7070.7070.707]
[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 ]

[xy1]
=
[m11m12xtm21m22yt001]
[xy1]
=
[m11x+m12y+xtm21x+m22y+yt1]
xy1=m11m210m12m220xtyt1xy1=m11x+m12y+xtm21x+m22y+yt1

注意:
[ x y ω ]

[xyω]
xyω的二维坐标点是 [ x / ω y / ω 1 ]
[x/ωy/ω1]
x/ωy/ω1

绕任意坐标轴旋转

在这里插入图片描述

参考
[1] Fundamentals of Computer Graphics 4th

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/110866
推荐阅读
相关标签
  

闽ICP备14008679号