qidao123.com技术社区-IT企服评测·应用市场

标题: 大连理工大学选修课——图形学:第五章 二维变换及二维观察 [打印本页]

作者: 十念    时间: 2025-5-5 15:57
标题: 大连理工大学选修课——图形学:第五章 二维变换及二维观察
第五章 二维变换及二维观察

二维变换

基本几何变换

图形的几何变换是指对图形的几何信息颠末平移、比例、旋转等变换后产生新的图形。
基本几何变换都是相对于坐标原点和坐标轴进行的几何变换。
平移变换
推导:
                                                    x                               ′                                      =                            x                            +                                       T                               x                                                          y                               ′                                      =                            y                            +                                       T                               y                                            x'=x+T_x\\ y'=y+T_y                     x′=x+Tx​y′=y+Ty​
矩阵形式
                                         [                                       x                               ′                                                          y                               ′                                      ]                            =                            [                            x                                     y                            ]                            ⋅                                       [                                                                                                     S                                              x                                                                                                            0                                                                                                                   0                                                                                                             S                                              y                                                                                                ]                                            [x'\quad y']=[x\quad y]\cdot \begin{bmatrix} S_x & 0\\ 0 & S_y \end{bmatrix}                     [x′y′]=[xy]⋅[Sx​0​0Sy​​]
比例变换
比例变换是指对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。
推导(极坐标):
                                         x                            =                            r                            cos                            ⁡                            α                                     y                            =                            r                            sin                            ⁡                            α                                                x                               ′                                      =                            r                            cos                            ⁡                            (                            α                            +                            θ                            )                            =                            x                            cos                            ⁡                            θ                            −                            y                            sin                            ⁡                            θ                                                y                               ′                                      =                            r                            sin                            ⁡                            (                            α                            +                            θ                            )                            =                            x                            sin                            ⁡                            θ                            +                            y                            cos                            ⁡                            θ                                  x=r\cos\alpha\qquad y=r\sin\alpha\\ x'=r\cos(\alpha+\theta)=x\cos\theta-y\sin\theta\\ y'=r\sin(\alpha+\theta)=x\sin\theta+y\cos\theta                     x=rcosαy=rsinαx′=rcos(α+θ)=xcosθ−ysinθy′=rsin(α+θ)=xsinθ+ycosθ
矩阵:逆时针旋转                                   θ                              \theta                  θ角
                                         [                                       x                               ′                                                          y                               ′                                      ]                            =                            [                            x                                     y                            ]                            ⋅                                       [                                                                                                     cos                                              ⁡                                              θ                                                                                                                            sin                                              ⁡                                              θ                                                                                                                                                  −                                              sin                                              ⁡                                              θ                                                                                                                            cos                                              ⁡                                              θ                                                                                                ]                                            [x'\quad y']=[x\quad y]\cdot \begin{bmatrix} \cos\theta & \sin\theta\\ -\sin\theta & \cos\theta \end{bmatrix}                     [x′y′]=[xy]⋅[cosθ−sinθ​sinθcosθ​]
平移、缩放、旋变化换的矩阵表示:
                                                    P                               ′                                      =                            P                            ⋅                                       T                               1                                      +                                       T                               2                                            P'=P\cdot T_1+T_2                     P′=P⋅T1​+T2​
其中Sx和Sy称为比例系数。
规范化齐次坐标

齐次坐标表示就是用                                   n                         +                         1                              n+1                  n+1维向量表示一个                                   n                              n                  n维向量
                                         (                            x                            ,                            y                            )                            ←                            (                            x                            ,                            y                            ,                            1                            )                                  (x,y)\leftarrow(x,y,1)                     (x,y)←(x,y,1)
平移:
                                         [                                       x                               ′                                                          y                               ′                                               1                            ]                            =                            [                            x                                     y                                     1                            ]                            ⋅                                       [                                                                                     1                                                                                             0                                                                                             0                                                                                                                   0                                                                                             1                                                                                             0                                                                                                                                   T                                              x                                                                                                                            T                                              y                                                                                                            1                                                                                 ]                                            [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0\\T_x& T_y & 1 \end{bmatrix}                     [x′y′1]=[xy1]⋅               ​10Tx​​01Ty​​001​               ​
比例:
                                         [                                       x                               ′                                                          y                               ′                                               1                            ]                            =                            [                            x                                     y                                     1                            ]                            ⋅                                       [                                                                                                     S                                              x                                                                                                            0                                                                                             0                                                                                                                   0                                                                                                             S                                              y                                                                                                            0                                                                                                                   0                                                                                             0                                                                                             1                                                                                 ]                                            [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}S_x & 0 & 0\\ 0 & S_y & 0\\0& 0 & 1 \end{bmatrix}                     [x′y′1]=[xy1]⋅               ​Sx​00​0Sy​0​001​               ​
整体比例变换:
                                         [                                       x                               ′                                                          y                               ′                                               1                            ]                            =                            [                            x                                     y                                     1                            ]                            ⋅                                       [                                                                                     1                                                                                             0                                                                                             0                                                                                                                   0                                                                                             1                                                                                             0                                                                                                                   0                                                                                             0                                                                                             S                                                                                 ]                                            [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot\begin{bmatrix}1 & 0 & 0\\ 0 & 1 & 0\\0& 0 & S \end{bmatrix}                     [x′y′1]=[xy1]⋅               ​100​010​00S​               ​
旋变化换:
                                         [                                       x                               ′                                                          y                               ′                                               1                            ]                            =                            [                            x                                     y                                     1                            ]                            ⋅                                       [                                                                                                     cos                                              ⁡                                              θ                                                                                                                            sin                                              ⁡                                              θ                                                                                                            0                                                                                                                                   −                                              sin                                              ⁡                                              θ                                                                                                                            cos                                              ⁡                                              θ                                                                                                            0                                                                                                                   0                                                                                             0                                                                                             1                                                                                 ]                                            [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} \cos\theta & \sin\theta & 0\\ -\sin\theta & \cos\theta & 0\\ 0& 0 & 1 \end{bmatrix}                     [x′y′1]=[xy1]⋅               ​cosθ−sinθ0​sinθcosθ0​001​               ​
普通变换:
                                                    x                               ′                                      =                                                   a                                  x                                  +                                  c                                  y                                  +                                  l                                                      p                                  x                                  +                                  q                                  y                                  +                                  s                                                                     y                               ′                                      =                                                   b                                  x                                  +                                  d                                  y                                  +                                  m                                                      p                                  x                                  +                                  q                                  y                                  +                                  s                                                       x'=\frac{ax+cy+l}{px+qy+s}\quad y'=\frac{bx+dy+m}{px+qy+s}                     x′=px+qy+sax+cy+l​y′=px+qy+sbx+dy+m​
                                         [                                       x                               ′                                                          y                               ′                                               1                            ]                            =                            [                            x                                     y                                     1                            ]                            ⋅                                       [                                                                                     a                                                                                             b                                                                                             p                                                                                                                   c                                                                                             d                                                                                             q                                                                                                                   l                                                                                             m                                                                                             s                                                                                 ]                                            [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} a & b & p\\ c & d & q\\ l & m & s \end{bmatrix}                     [x′y′1]=[xy1]⋅               ​acl​bdm​pqs​               ​
关于x轴对称
                                         [                                                                              1                                                                                      0                                                                                      0                                                                                                          0                                                                                                     −                                           1                                                                                                    0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} 1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​100​0−10​001​               ​
关于y轴对称
                                         [                                                                                             −                                           1                                                                                                    0                                                                                      0                                                                                                          0                                                                                      1                                                                                      0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} -1 & 0 & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​−100​010​001​               ​
关于原点对称
                                         [                                                                                             −                                           1                                                                                                    0                                                                                      0                                                                                                          0                                                                                                     −                                           1                                                                                                    0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} -1 & 0 & 0\\ 0 & -1 & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​−100​0−10​001​               ​
关于                                   y                         =                         x                              y=x                  y=x轴对称
                                         [                                                                              0                                                                                      1                                                                                      0                                                                                                          1                                                                                      0                                                                                      0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} 0 & 1 & 0\\ 1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​010​100​001​               ​
关于                                   y                         =                         −                         x                              y=-x                  y=−x轴对称
                                         [                                                                              0                                                                                                     −                                           1                                                                                                    0                                                                                                                         −                                           1                                                                                                    0                                                                                      0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} 0 & -1 & 0\\ -1 & 0 & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​0−10​−100​001​               ​
错切变换

错切变换,也称为剪切、错位变换,用于产生弹性物体的变形处理处罚。

其变换矩阵为:
                                         [                                                                              1                                                                                      b                                                                                      0                                                                                                          c                                                                                      1                                                                                      0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} 1 & b & 0\\ c & 1 & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​1c0​b10​001​               ​
二维图形几何变换的盘算
                                         [                                       x                               ′                                                          y                               ′                                               1                            ]                            =                            [                            x                                     y                                     1                            ]                            ⋅                                       [                                                                                     a                                                                                             b                                                                                             p                                                                                                                   c                                                                                             d                                                                                             q                                                                                                                   l                                                                                             m                                                                                             r                                                                                 ]                                            [x'\quad y'\quad 1]=[x\quad y\quad 1]\cdot \begin{bmatrix} a & b & p\\ c & d & q\\ l & m & r \end{bmatrix}                     [x′y′1]=[xy1]⋅               ​acl​bdm​pqr​               ​

复合变换

复合变换具有形式:
                                                    P                               ′                                      =                            P                            ⋅                                       T                               1                                      ⋅                                       T                               2                                      ⋅                                       T                               3                                      ⋯                                       T                               n                                            P'=P\cdot T_1\cdot T_2\cdot T_3\cdots T_n                     P′=P⋅T1​⋅T2​⋅T3​⋯Tn​
二维复合平移:
                                         [                                                                              1                                                                                      0                                                                                      0                                                                                                          0                                                                                      1                                                                                      0                                                                                                                                         T                                                               x                                                 1                                                                          +                                                           T                                                               x                                                 2                                                                                                                                                                  T                                                               y                                                 1                                                                          +                                                           T                                                               y                                                 2                                                                                                                                   1                                                                          ]                                  \begin{bmatrix} 1 & 0 & 0\\ 0 & 1 & 0\\ T_{x1}+T_{x2} & T_{y1}+T_{y2} & 1 \end{bmatrix}                                    ​10Tx1​+Tx2​​01Ty1​+Ty2​​001​               ​
二维复合比例
                                         [                                                                                                             S                                                               x                                                 1                                                                          ⋅                                                           S                                                               x                                                 2                                                                                                                                   0                                                                                      0                                                                                                          0                                                                                                                     S                                                               y                                                 1                                                                          ⋅                                                           S                                                               y                                                 2                                                                                                                                   0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} S_{x1}\cdot S_{x2} & 0 & 0\\ 0 & S_{y1}\cdot S_{y2} & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​Sx1​⋅Sx2​00​0Sy1​⋅Sy2​0​001​               ​
二维复合旋转
                                         [                                                                                             cos                                           ⁡                                           (                                                           θ                                              1                                                          +                                                           θ                                              2                                                          )                                                                                                                   sin                                           ⁡                                           (                                                           θ                                              1                                                          +                                                           θ                                              2                                                          )                                                                                                    0                                                                                                                         −                                           sin                                           ⁡                                           (                                                           θ                                              1                                                          +                                                           θ                                              2                                                          )                                                                                                                   cos                                           ⁡                                           (                                                           θ                                              1                                                          +                                                           θ                                              2                                                          )                                                                                                    0                                                                                                          0                                                                                      0                                                                                      1                                                                          ]                                  \begin{bmatrix} \cos(\theta_1+\theta_2) & \sin(\theta_1+\theta_2) & 0\\ -\sin(\theta_1+\theta_2) &\cos(\theta_1+\theta_2) & 0\\ 0 & 0 & 1 \end{bmatrix}                                    ​cos(θ1​+θ2​)−sin(θ1​+θ2​)0​sin(θ1​+θ2​)cos(θ1​+θ2​)0​001​               ​
相对恣意一点的二维几何变换

相对某个参考点(xF,yF)作二维几何变换,其变换过程为:
光栅变换

直接对帧缓存中象素点进行操作的变换称为光栅变换。
光栅平移变换:

恣意角度的光栅旋变化换:

光栅比例变换:进行地区的映射处理处罚

变换的性子:

二维仿射变换是具有如下形式的二维坐标变换:
                                                    x                               ′                                      =                            a                            x                            +                            b                            y                            +                            m                                                y                               ′                                      =                            c                            x                            +                            d                            y                            +                            n                                  x'=ax+by+m\\ y'=cx+dy+n                     x′=ax+by+my′=cx+dy+n
平移、比例、旋转、错切和反射等变换均是二维仿射变换的特例,反过来,任何常用的二维仿射变换总可以表示为这五种变换的复合。

二维观察

一些界说

窗口:将在用户坐标系中需要进行观察和处理处罚的一个坐标地区。
视区:将窗口映射到显示装备上的坐标(NDC)地区。
观察变换: 为了将窗口内的图形在视区中显示出来,颠末将窗口到视区的变换处理处罚。

观察坐标系: 依据窗口的方向和外形在用户坐标平面中界说的直角坐标系。
规格化装备坐标系:将二维的装备坐标系规格化到(0.0,0.0)到(1.0,1.0)的坐标范围内形成的坐标系。
二维观察流程
引入了观察坐标系和规格化装备坐标系后,观察变换分为如下图所示的几个步骤:
应用程序→图形的用户坐标→观察坐标系→对窗口进行裁剪→视区(依据装备规范化坐标系界说)→装备坐标系→在图形装备上输出
整体缩放结果

用户坐标系到观察坐标系的变换

用户坐标系到观察坐标系的变换分由两个变换步骤合成:


窗口到视区的变换

将窗口内的点(xw,yw)映射到相对应的视区内的点(xv,yv)需进行以下步骤:

裁剪

界说:在观察坐标系下对窗口进行裁剪,即只保留窗口内的那部分图形,去掉窗口外的图形。
已知:

实交点:直线段与窗口矩形边界的交点。
虚交点:处于直线段延长线或窗口边界延长线上的交点。
Cohen-Sutherland 算法

编码:对于任一端点(x,y),根据其坐标所在的地区,赋予一个4位的二进制码D3D2D1D0。
编码规则如下

步骤:

(+)用编码方法实现了对完全可见和不可见直线段的快速接受和拒绝;
(–)求交过程复杂,有冗余盘算,而且包含浮点运算,倒霉于硬件实现。
Liang-Barsky 算法

直线的参数方程:
                                                                                                     x                                        =                                                                                                                                      x                                           1                                                      +                                        u                                        ⋅                                        (                                                       x                                           2                                                      −                                                       x                                           1                                                      )                                                                                                                                                          y                                        =                                                                                                                                      y                                           1                                                      +                                        u                                        ⋅                                        (                                                       y                                           2                                                      −                                                       y                                           1                                                      )                                                                                                    \begin{align} x =& x_1 + u \cdot (x_2 - x_1) \\ y =& y_1 + u \cdot (y_2 - y_1) \end{align}                     x=y=​x1​+u⋅(x2​−x1​)y1​+u⋅(y2​−y1​)​​
对于直线上一点(x,y),若它在窗口内则有:
                                                                                                     w                                        x                                        l                                        <                                        =                                                       x                                           1                                                      +                                        u                                        ⋅                                        (                                                       x                                           2                                                      −                                                       x                                           1                                                      )                                        <                                        =                                        w                                        x                                        r                                                                                                                                                          w                                        x                                        b                                        <                                        =                                                       y                                           1                                                      +                                        u                                        ⋅                                        (                                                       y                                           2                                                      −                                                       y                                           1                                                      )                                        <                                        =                                        w                                        y                                        t                                                                                                    \begin{align} wxl <= x_1 + u\cdot(x_2 - x_1) <= wxr\\ wxb <= y_1 + u\cdot(y_2 - y_1) <= wyt \end{align}                     wxl<=x1​+u⋅(x2​−x1​)<=wxrwxb<=y1​+u⋅(y2​−y1​)<=wyt​​

令:

则有:



算法步骤

多边形裁剪


基本思想:
策略:



Weiler-Atherton多边形裁剪

思想:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4