前言

如果你对这篇文章可感兴趣,可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」,查看完整博客分类与对应链接。

文章目录

  • 前言
    • 第五章 二维图形变换
      • 5.1 向量基础
      • 5.2 图形坐标系
      • 5.3 二维图形变换原理
        • 5.3.1 图形变换概述
        • 5.3.2 仿射变换
        • 5.3.3 齐次坐标
      • 5.4 基本几何变换
        • 5.4.1 平移变换
        • 5.4.2 比例变换
        • 5.4.3 对称变换
        • 5.4.4 旋转变换
        • 5.4.5 错切变换
        • 5.4.5 复合变换
        • 5.4.6 坐标系变换
        • 5.4.7 任意参考点的几何变换
      • 5.5 二维变换矩阵
        • 5.5.1 二维变换矩阵概述
        • 5.5.2 二维图形几何变换的计算
      • 5.4 窗口、视图及变换
        • 5.4.1 窗口和视区
        • 5.4.2 观察变换
        • 5.4.3 窗口到视区的变换

第五章 二维图形变换

5.1 向量基础

  • 向量功能

    • 图形学中,处理三维物体,以及绘制对象的形状、位置、方向。有两大基本工具:向量分析、图形变换。
    • 向量:点和方向的实体 (没有位置)
  • 向量的表示
    • 两点之差是一个向量,方向指向被减点。v=Q−Pv=Q-Pv=Q−P
    • nnn 维向量就是一个 nnn 元组
      • w=(w1,w2,…,wn)w=(w_1,w_2,…,w_n)w=(w1​,w2​,…,wn​),w=[w1w2w3]w=\left[ \begin{matrix} w_1\\ w_2\\ w_3\end{matrix} \right]w=⎣⎡​w1​w2​w3​​⎦⎤​
  • 向量基本运算
    • 加减、数乘
    • 归一化
      • 即将向量转变为单位向量,方向不变,长度 =1=1=1
    • 点积
      • $a = (a_1, a_2),b=(b_1,b_2) $
      • a⋅b=a1b1+a2b2=∣a∣∣b∣cos⟨a,b⟩a · b = a_1b_1+a_2b_2 = |a||b|cos\langle a,b\ranglea⋅b=a1​b1​+a2​b2​=∣a∣∣b∣cos⟨a,b⟩,用向量描述新闻,新闻相似,则向量夹角余弦接近于 1
      • a⋅b>0,θ<90°a·b>0,\theta <90°a⋅b>0,θ<90° ; a⋅b=0,θ=90°a·b=0,\theta =90°a⋅b=0,θ=90° ; a⋅b<0,θ>90°a·b<0,\theta >90°a⋅b<0,θ>90° ;
    • 叉积
      • a=(ax,ay,az),b=(bx,by,bz),a×b=∣ijkaxayazbxbybz∣=∣a∣∣b∣sin⟨a,b⟩a=(a_x,a_y,a_z),b=(b_x,b_y,b_z),a \times b = \begin{vmatrix} i & j & k \\ a_x & a_y & a_z \\ b_x & b_y & b_z \end{vmatrix}=|a||b|sin\langle a,b\ranglea=(ax​,ay​,az​),b=(bx​,by​,bz​),a×b=∣∣∣∣∣∣​iax​bx​​jay​by​​kaz​bz​​∣∣∣∣∣∣​=∣a∣∣b∣sin⟨a,b⟩
      • a×ba\times ba×b 和 aaa、bbb 两个向量都正交,因此可以利用叉积求平面的法向量
      • a×ba\times ba×b 的长度等于由 aaa 和 bbb 决定的平行四边形面积
  • 向量线性组合
    • 向量两种特殊线性组合(w=a1v1+a2v2+...+anvnw = a_1v_1 + a_2v_2+...+a_nv_nw=a1​v1​+a2​v2​+...+an​vn​):

      • 仿射组合:线性组合的系数和等于 1,∑i=1nai=1\sum\limits_{i=1}^n a_i = 1i=1∑n​ai​=1
      • 凸组合:线性组合的系数和等于 1,且各系数非负,∑i=1nai=1(ai≥0)\sum\limits_{i=1}^n a_i = 1\ (a_i \ge 0)i=1∑n​ai​=1 (ai​≥0)

5.2 图形坐标系

  • 坐标系的基本概念

    • 坐标系:建立图形和数之间对应联系的参考系
    • 建模 (modeling):程序中用于描述对象几何信息的数值
    • 观察 (viewing):表示对象中大小和位置的数值
      • 二维观察变换的一般方法是在世界坐标系中指定一个观察坐标系统,以该系统为参考通过选定方向和位置来指定矩形裁剪窗口。
  • 坐标系分类
    • 维度分类

      • 一维、二维、三维坐标系
    • 坐标轴之间的空间关系分类
      • 直角坐标系、极坐标系、圆柱坐标系、球坐标系
    • 计算机图形学坐标系分类
      • 世界坐标系:公共坐标系,现实中物体或场景的统一参照系。计算机图形系统中涉及的其它坐标系都是参照它进行定义的。
      • 建模坐标系:又称局部坐标系,每个物体(对象)有它自己的局部中心和坐标系,独立于世界坐标系来定义物体的几何特性。
      • 观察坐标系:依据观察窗口的方向和形状在世界坐标系中定义的坐标系。观察坐标系用于指定图形的输出范围。
      • 设备坐标系:适合特定输出设备输出对象的坐标系,比如屏幕坐标系。设备坐标是整数。
      • 规范化坐标系:规范化坐标系独立于设备,能容易地转变为设备坐标系,是一个中间坐标系。归一化后的坐标,坐标轴取值范围 0~1。

5.3 二维图形变换原理

5.3.1 图形变换概述
  • 用途

    • 各种变换:比例、旋转、镜像、错切、平移
    • 由一个基本的图案,经过变换组合成另外一个复杂图形
    • 用很少的物体组成一个场景
    • 可以通过图形变换组合得到动画效果
  • 基本原理
    • 图形变化,但原图形的连边规则没有改变
    • 图形变化,是因为顶点位置改变决定
    • 变换几何关系,保持原拓扑关系。
5.3.2 仿射变换
  • 仿射变换 (Affine Transformation / Affine Map)

    • 基本功能

      • 平直性:直线变换后仍是直线
      • 平行性:平行线变换后仍平行,且直线上点的位置顺序不变
    • 二维仿射变换
      • x′x'x′ 和 y′y'y′ 都是原始坐标 xxx 和 yyy 的线性函数
      • {x′=a1x+b1y+c1y′=a2x+b2y+c2\begin{cases} x' = a_1x+b_1y+c_1 \\ y'=a_2x+b_2y+c_2 \end{cases}{x′=a1​x+b1​y+c1​y′=a2​x+b2​y+c2​​
      • 矩阵形式:[x∗y∗]=[xy1]⋅[a1a2b1b2c1c2]\left[ \begin{matrix} x^* & y^* \end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} a_1 & a_2\\ b_1 & b_2 \\ c_1 & c_2 \end{matrix} \right][x∗​y∗​]=[x​y​1​]⋅⎣⎡​a1​b1​c1​​a2​b2​c2​​⎦⎤​
5.3.3 齐次坐标
  • 二维平面中用 (x,y)(x, y)(x,y) 表示一个点,不妨说是一个向量 (x,y)(x, y)(x,y) 表示一个点。所以可以用第 333 维为常数的 (x,y,1)(x, y, 1)(x,y,1) 表示二维平面上的向量。
  • 这种 n+1n+1n+1 维表示 nnn 维的方法称为——齐次坐标表示法,nnn 维向量 (p1,p2,⋯,pn)(p_1,p_2,\cdots,p_n)(p1​,p2​,⋯,pn​) 表示为 (hp1,hp2,⋯,hpn,h)(hp_1,hp_2,\cdots,hp_n, h)(hp1​,hp2​,⋯,hpn​,h),其中 $h $ 称为哑坐标,特别的 h=1h=1h=1 时称齐次坐标为规格化坐标。
  • 二维仿射变换,齐次坐标表示:[x∗y∗1]=[xy1]⋅[a1a20b1b20c1c21]\left[ \begin{matrix} x^* & y^*&1 \end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} a_1 & a_2 &0\\ b_1 & b_2&0 \\ c_1 & c_2 &1\end{matrix} \right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​a1​b1​c1​​a2​b2​c2​​001​⎦⎤​
  • 不使用齐次坐标可以做比例、对称、旋转变换,但做不到平移变化,无法增加常数项。

5.4 基本几何变换

5.4.1 平移变换
  • 不产生变形而移动物体的刚体变换,即物体上的每个点移动相同数量的坐标
  • 坐标形式:{x∗=x+Txy∗=y+Ty\begin{cases} x^* = x+T_x \\ y^*=y + T_y \end{cases}{x∗=x+Tx​y∗=y+Ty​​
  • 齐次坐标形式:[x∗y∗1]=[xy1]⋅[100010TxTy1]=[x+Txy+Ty1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} 1 & 0 &0 \\0&1&0\\T_x&T_y&1 \end{matrix} \right] =\left[ \begin{matrix} x+Tx & y+Ty &1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​10Tx​​01Ty​​001​⎦⎤​=[x+Tx​y+Ty​1​]
5.4.2 比例变换
  • 相对于坐标原点沿 xxx 方向放缩 SxS_xSx​ 倍,沿 yyy 方向放缩 SyS_ySy​ 倍。S>1S > 1S>1 放大,S<1S < 1S<1 缩小。
  • 坐标形式:{x∗=x⋅Sxy∗=y⋅Sy\begin{cases} x^* = x·S_x \\ y^*=y·S_y \end{cases}{x∗=x⋅Sx​y∗=y⋅Sy​​
  • 齐次坐标形式:[x∗y∗1]=[xy1]⋅[Sx000Sy0001]=[x⋅Sxy⋅Sy1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} S_x & 0 &0 \\0&S_y&0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix} x·S_x & y·S_y &1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​Sx​00​0Sy​0​001​⎦⎤​=[x⋅Sx​​y⋅Sy​​1​]
  • 当 Sx=SyS_x =S_ySx​=Sy​ 时,为整体比例变换,[x∗y∗1]=[xy1]⋅[10001000S]=[xyS]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} 1 & 0 &0 \\0&1&0\\0&0&S \end{matrix} \right] =\left[ \begin{matrix} x & y &S\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​100​010​00S​⎦⎤​=[x​y​S​],S>1S>1S>1 放大,0<S<10<S<10<S<1 缩小,S<0S<0S<0 发生关于原点的对称等比变换。
5.4.3 对称变换
  • 也称镜像变换或反射变换。有关于x轴、y轴、原点、某条直线的对称变换。
  • 关于 xxx 轴对称:[x∗y∗1]=[xy1]⋅[1000−10001]=[x−y1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} 1 & 0 &0 \\0&-1&0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix} x&-y&1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​100​0−10​001​⎦⎤​=[x​−y​1​]
  • 关于 yyy 轴对称:[x∗y∗1]=[xy1]⋅[−100010001]=[−xy1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} -1 & 0 &0 \\0&1&0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix} -x&y&1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​−100​010​001​⎦⎤​=[−x​y​1​]
  • 关于原点对称:[x∗y∗1]=[xy1]⋅[−1000−10001]=[−x−y1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} -1 & 0 &0 \\0&-1&0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix} -x&-y&1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​−100​0−10​001​⎦⎤​=[−x​−y​1​]
5.4.4 旋转变换
  • 将点绕原点旋转角度 θ\thetaθ ,逆时针为正,顺时针为负
  • 坐标形式(逆时针):{x∗=r⋅cos(α+θ)=r⋅cosα⋅cosθ−r⋅sinα⋅sinθy∗=r⋅sin(α+θ)=r⋅cosα⋅sinθ+r⋅sinα⋅cosθ⇒{x∗=x⋅cosθ−y⋅sinθy∗=x⋅sinθ+y⋅cosθ\begin{cases} x^* =r·cos(\alpha+\theta)=r·cos\alpha ·cos\theta-r·sin\alpha ·sin\theta \\ y^* =r·sin(\alpha+\theta)=r·cos\alpha ·sin\theta + r·sin\alpha ·cos\theta\end{cases} \Rightarrow \begin{cases} x^* =x ·cos\theta-y ·sin\theta \\ y^* =x ·sin\theta + y ·cos\theta\end{cases}{x∗=r⋅cos(α+θ)=r⋅cosα⋅cosθ−r⋅sinα⋅sinθy∗=r⋅sin(α+θ)=r⋅cosα⋅sinθ+r⋅sinα⋅cosθ​⇒{x∗=x⋅cosθ−y⋅sinθy∗=x⋅sinθ+y⋅cosθ​
  • 齐次坐标形式(逆时针):[x∗y∗1]=[xy1]⋅[cosθsinθ0−sinθcosθ0001]=[x⋅cosθ−y⋅sinθx⋅sinθ+y⋅cosθ1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} cos\theta & sin\theta &0\\-sin\theta&cos\theta & 0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix} x ·cos\theta-y ·sin\theta & x ·sin\theta + y ·cos\theta &1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​cosθ−sinθ0​sinθcosθ0​001​⎦⎤​=[x⋅cosθ−y⋅sinθ​x⋅sinθ+y⋅cosθ​1​]
  • 顺时针只要将 θ=−θ\theta = -\thetaθ=−θ 即可。
5.4.5 错切变换
  • 弹性物体的变形处理

  • 变换矩阵中的非对角线元素大都为零,若变换矩阵中的非对角元素不为 000,则意味着 xxx、yyy 同时对图形的变换起作用。也就是说,变换矩阵中非对角线元素起着把图形沿 xxx 或 yyy 方向错切的作用。
  • xxx 值或 yyy 值越小,错切量越小;xxx 值或 yyy 值越大,错切量越大。
  • 齐次坐标形式:[x∗y∗1]=[xy1]⋅[1b0c10001]=[c+cybx+y1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} 1 & b & 0\\ c &1 &0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix}c+cy&bx+y &1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​1c0​b10​001​⎦⎤​=[c+cy​bx+y​1​]
  • 沿 xxx 方向错切,即 b=0b=0b=0 :[x∗y∗1]=[xy1]⋅[100c10001]=[c+cyy1]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} 1 & 0 & 0\\ c &1 &0\\0&0&1 \end{matrix} \right] =\left[ \begin{matrix}c+cy&y &1\end{matrix}\right][x∗​y∗​1​]=[x​y​1​]⋅⎣⎡​1c0​010​001​⎦⎤​=[c+cy​y​1​]
5.4.5 复合变换
  • 图形作大于一次的变换,P∗=P⋅T=P⋅(T1⋅T2⋅⋯⋅Tn),n>1P^* = P · T = P·(T_1·T_2·\cdots ·T_n) ,n\gt 1P∗=P⋅T=P⋅(T1​⋅T2​⋅⋯⋅Tn​),n>1,矩阵相乘不可交换!任何一个复杂的几何变换都可以看作基本几何变换的组合形式。
  • 二维复合平移:T=Tt1⋅Tt2=[100010Tx1Ty11]⋅[100010Tx1Ty11]=[100010Tx1+Tx2Ty1+Ty21]T = T_{t1}·T_{t2} = \left[ \begin{matrix} 1 & 0 &0 \\0&1&0\\T_{x1}&T_{y1}&1 \end{matrix} \right] · \left[ \begin{matrix} 1 & 0 &0 \\0&1&0\\T_{x1}&T_{y1}&1 \end{matrix} \right] =\left[ \begin{matrix} 1 & 0 &0 \\0&1&0\\T_{x1}+T_{x2}&T_{y1}+T_{y2}&1 \end{matrix} \right]T=Tt1​⋅Tt2​=⎣⎡​10Tx1​​01Ty1​​001​⎦⎤​⋅⎣⎡​10Tx1​​01Ty1​​001​⎦⎤​=⎣⎡​10Tx1​+Tx2​​01Ty1​+Ty2​​001​⎦⎤​
  • 二维复合比例:T=Ts1⋅Ts2=[Sx1000Sy10001]⋅[Sx2000Sy20001]=[Sx1⋅Sx2000Sy1⋅Sy20001]T = T_{s1}·T_{s2} = \left[ \begin{matrix} S_{x1} & 0 &0 \\0&S_{y1}&0\\0&0&1 \end{matrix} \right] · \left[ \begin{matrix} S_{x2} & 0 &0 \\0&S_{y2}&0\\0&0&1 \end{matrix} \right]= \left[ \begin{matrix} S_{x1}·S_{x2} & 0 &0 \\0&S_{y1}·S_{y2}&0\\0&0&1 \end{matrix} \right]T=Ts1​⋅Ts2​=⎣⎡​Sx1​00​0Sy1​0​001​⎦⎤​⋅⎣⎡​Sx2​00​0Sy2​0​001​⎦⎤​=⎣⎡​Sx1​⋅Sx2​00​0Sy1​⋅Sy2​0​001​⎦⎤​
  • 二维复合旋转:T=Tr1⋅Tr2=[cosθ1sinθ10−sinθ1cosθ10001]⋅[cosθ2sinθ20−sinθ2cosθ20001]=[cos(θ1+θ2)sin(θ1+θ2)0−sin(θ1+θ2)cos(θ1+θ2)0001]T = T_{r1}·T_{r2} = \left[ \begin{matrix} cos\theta_1 & sin\theta_1 &0\\-sin\theta_1&cos\theta_1 & 0\\0&0&1 \end{matrix} \right] · \left[ \begin{matrix} cos\theta_2 & sin\theta_2 &0\\-sin\theta_2&cos\theta_2 & 0\\0&0&1 \end{matrix} \right]=\left[ \begin{matrix} 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{matrix} \right]T=Tr1​⋅Tr2​=⎣⎡​cosθ1​−sinθ1​0​sinθ1​cosθ1​0​001​⎦⎤​⋅⎣⎡​cosθ2​−sinθ2​0​sinθ2​cosθ2​0​001​⎦⎤​=⎣⎡​cos(θ1​+θ2​)−sin(θ1​+θ2​)0​sin(θ1​+θ2​)cos(θ1​+θ2​)0​001​⎦⎤​
5.4.6 坐标系变换
  • 图形变换经常需要从一个坐标系变换到另一个坐标系,如下图从 x0yx0yx0y 变换到 x′0′y′x'0'y'x′0′y′

  • 上图变换分两步完成,x′0′y′→平移x′0y′→旋转x0yx'0'y' \xrightarrow{平移} x'0y' \xrightarrow{旋转} x0yx′0′y′平移​x′0y′旋转​x0y,注意是从目标到源

    • 平移变换 —— 将 x′0′y′x'0'y'x′0′y′ 坐标系的原点平移至 x0yx0yx0y 坐标系的原点
    • 旋转变换 —— 将 x′x'x′ 轴旋转到 xxx 轴上
  • T=Tt⋅Tr=[100010−x0−y01]⋅[cos(−θ)sin(−θ)0−sin(−θ)cos(−θ)0001]T = T_{t}·T_{r} = \left[ \begin{matrix} 1 & 0 &0 \\0&1&0\\-x_0&-y_0&1 \end{matrix} \right] · \left[ \begin{matrix} cos(-\theta) & sin(-\theta) &0\\-sin(-\theta)&cos(-\theta) & 0\\0&0&1 \end{matrix} \right]T=Tt​⋅Tr​=⎣⎡​10−x0​​01−y0​​001​⎦⎤​⋅⎣⎡​cos(−θ)−sin(−θ)0​sin(−θ)cos(−θ)0​001​⎦⎤​
5.4.7 任意参考点的几何变换
  • 在以往的变换中,以 (0, 0) 为参考点,倘若以任意点为参考点,则:

    • 将参考点移到原点(平移)
    • 针对原点进行二维几何变换(变换)
    • 将原点移到参考点(反平移)

5.5 二维变换矩阵

5.5.1 二维变换矩阵概述
  • 二维空间中某点的变化可以表示成点的齐次坐标与 3 阶的二维变换矩阵 T2dT_{2d}T2d​ 相乘

    [x∗y∗1]=[xy1]⋅T2d=[xy1]⋅[abpcdqlms]\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]·T_{2d}=\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· \left[ \begin{matrix} a&b&p\\c&d&q\\l&m&s \end{matrix} \right][x∗​y∗​1​]=[x​y​1​]⋅T2d​=[x​y​1​]⋅⎣⎡​acl​bdm​pqs​⎦⎤​

5.5.2 二维图形几何变换的计算
  • 点的变换:[x∗y∗1]=[xy1]⋅T\left[ \begin{matrix} x^* & y^* &1\end{matrix}\right] =\left[ \begin{matrix} x & y & 1 \end{matrix}\right]· T[x∗​y∗​1​]=[x​y​1​]⋅T
  • 直线的变换(两端点的变换):[x1∗y1∗1x2∗y2∗1]=[x1y11x2y21]⋅T\left[ \begin{matrix} x_1^* & y_1^* &1\\ x_2^* & y_2^* &1\end{matrix}\right] =\left[ \begin{matrix} x_1 & y_1 &1\\ x_2 & y_2 &1\end{matrix}\right] ·T[x1∗​x2∗​​y1∗​y2∗​​11​]=[x1​x2​​y1​y2​​11​]⋅T
  • 多边形的变换(每个顶点的变换):p=[x1∗y1∗1x2∗y2∗1⋯⋯⋯xn∗yn∗1]p =\left[ \begin{matrix} x_1^* & y_1^* &1\\ x_2^* & y_2^* &1 \\ \cdots&\cdots&\cdots\\x_n^* &y_n^*&1\end{matrix}\right]p=⎣⎢⎢⎡​x1∗​x2∗​⋯xn∗​​y1∗​y2∗​⋯yn∗​​11⋯1​⎦⎥⎥⎤​

5.4 窗口、视图及变换

5.4.1 窗口和视区
  • 窗口:世界坐标系中要显示的区域

  • 视区:窗口映射到显示器上的区域

  • 窗口定义显示什么;视区定义在何处显示;二者需要进行坐标变换

  • 世界坐标系中的一个窗口可以对应于多个视区

  • 窗口→观察变换视区窗口\xrightarrow{观察变换} 视区窗口观察变换​视区
5.4.2 观察变换
  • 观察变换 (Viewing Transformation)

  • 变焦距效果

    • 窗口放大/缩小,视区不变,图形缩小/放大

  • 整体缩放效果

    • 窗口不变,视区放大/缩小,图形放大/缩小

  • 漫游效果

    • 把一个固定大小的窗口在一幅大图形上移动,视区不变。
5.4.3 窗口到视区的变换
  • 窗口的点 →\rightarrow→ 视区的点

  • 保持比例的映射

    • 保持比例:映射之后,中心点仍然在中心,边界点仍然在边界
    • {sx=A×x+Csy=B×y+D\begin{cases} sx = A\times x+C \\ sy = B\times y+D\end{cases}{sx=A×x+Csy=B×y+D​
    • 比例保持:x−wxlwxr−wxl=sx−vxlvxr−vxl⇒sx=x−wxlwxr−wxl(vxr−vxl)+vxl\Large \frac{x-w_{xl}}{w_{xr}-w_{xl}} = \frac{sx-v_{xl}}{v_{xr}-v_{xl}} \Rightarrow sx = \frac{x-w_{xl}}{w_{xr}-w_{xl}}(v_{xr}-v_{xl})+v_{xl}wxr​−wxl​x−wxl​​=vxr​−vxl​sx−vxl​​⇒sx=wxr​−wxl​x−wxl​​(vxr​−vxl​)+vxl​
    • 根据倍数关系:sx=vxr−vxlwxr−wxlx+(vxl−vxr−vxlwxr−wxlwxl)=Ax+C,A=vxr−vxlwxr−wxl,C=vxl−A×wxl\large sx = \frac{v_{xr}-v_{xl}}{w_{xr}-w_{xl}} x + (v_{xl}-\frac{v_{xr}-v_{xl}}{w_{xr}-w_{xl}} w_{xl}) = Ax + C,\\ A = \frac{v_{xr}-v_{xl}}{w_{xr}-w_{xl}},C=v_{xl}-A\times w_{xl}sx=wxr​−wxl​vxr​−vxl​​x+(vxl​−wxr​−wxl​vxr​−vxl​​wxl​)=Ax+C,A=wxr​−wxl​vxr​−vxl​​,C=vxl​−A×wxl​
    • 同理,B=vyt−vybwyt−wyb,D=vyb−B×wyb\large B= \frac{v_{yt}-v_{yb}}{w_{yt}-w_{yb}},D=v_{yb}-B\times w_{yb}B=wyt​−wyb​vyt​−vyb​​,D=vyb​−B×wyb​

计算机图形学完整笔记(五):二维图形变换相关推荐

  1. 【计算机图形学】小白谈计算机图形学(四)二维三维图形变换—1

    小白谈计算机图形学(四)二维三维图形变换-1 窗口与视图 二维图形的几何变换 平移变换 比例变换 旋转变换 二维图形变换的矩阵表示 三种变换 齐次坐标变换 原二维线性变换 齐次坐标法 复合变换 例题: ...

  2. 计算机图形学-二维图形变换 笔记总结与代码实战

    文章目录 1.向量基础知识 2.图形坐标系 3.二维图形变换原理 4.二维图形几何变换 5.窗口视区变换 基本二维几何变换代码 二维复合变换实战-五星红旗绘制 1.向量基础知识 为什么向量如此重要:在 ...

  3. 计算机图形学 学习笔记(七):二维图形变换:平移,比例,旋转,坐标变换等

    接上文 计算机图形学 学习笔记(六):消隐算法:Z-buffer,区间扫描线,Warnock,光栅图形学小结 在图形学中,有两大基本工具:向量分析,图形变换.本文将重点讲解向量和二维图形的变换. 5. ...

  4. 计算机图形学二维图形基本变换实验原理,计算机图形学实验:二维图形变换.docx...

    计算机图形学实验:二维图形变换.docx (9页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 实验三 二维图形变换一.实验任务1. 通 ...

  5. 计算机图形学二维图形基本变换实验原理,江苏大学-计算机图形学第三次实验报告-二维图形变换...

    <江苏大学-计算机图形学第三次实验报告-二维图形变换>由会员分享,可在线阅读,更多相关<江苏大学-计算机图形学第三次实验报告-二维图形变换(13页珍藏版)>请在人人文库网上搜索 ...

  6. c语言二维图形变换程序,C语言图形编程(五、二维图形变换-01)(国外英文资料).doc...

    C语言图形编程(五.二维图形变换-01)(国外英文资料) C语言图形编程(五.二维图形变换-01)(国外英文资料) The first user coordinates to the screen c ...

  7. CAD 实验4 二维图形变换

    实验4  二维图形变换   实验目的: (1)掌握二维几何图形变化的方法. (2)熟悉Windows窗口图形的生成方法. 实验环境与设备: 已安装Visual Studio 2010(或其以上版本)集 ...

  8. 计算机图形学--二维图形变换

    目录 概述 平移 对称 旋转 错切 缩放 概述 对于二维图形来讲,所有基本变换均可以通过确定图形的点的平移.对称.旋转.错切以及缩放几种变换组合得到,而在上述几种变换中,除对称变换外,其余变换均可通过 ...

  9. 【计算机图形学】c++ OpenGL 二维变换(包括多边形绘制、平移、旋转及缩放)

    运行结果演示 源代码 // 二维变换.cpp : 定义控制台应用程序的入口点. //#include "stdafx.h" #include<GL/glut.h> #i ...

  10. c语言二维图形变换程序,【计算机图形学】3-2 二维几何变换根本代码

    [计算机图形学]3-2 二维几何变换基本代码 返回目录 基本理论参见:[计算机图形学]3-1 二维几何变换基本理论 注:这里不考虑插值的问题. 全部的代码都在https://github.com/Cy ...

最新文章

  1. 亚马逊ses如何发qq_使用Amazon SES发送电子邮件
  2. cocostuff10k数据集介绍_COCO数据集整理
  3. Android使用ViewPager实现左右循环滑动及轮播效果
  4. 操作系统:进程间通信与线程间同步
  5. VINS-Mono关键知识点总结——前端详解
  6. HashSet.contains
  7. Maven中使用tomcat:run出现错误org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException
  8. 三圆相交阴影部分面积_小学六年级图形面积的题很多家长都不会,一些初中生也未必会做...
  9. 阿里P8亲自教你!熬夜整理华为最新Java笔试题
  10. 如何设置mysql表中文乱码_php mysql表中文乱码问题如何解决
  11. 【web开发】js实现表单提交
  12. 网站虚拟主机是什么?(什么是虚拟主机空间)
  13. JavaScript如何打开exe文件
  14. 淘系电商再无对手,腾讯为何“资敌”?
  15. redis主从复制,主读不到从节点信息的坑
  16. Humble Numbers (谦卑数 || 丑数)
  17. navigationbar 背景色
  18. 基于php民宿,那些美炸天的民宿设计!
  19. matlab入门 — 反射率、折射率的变化
  20. 【知识图谱学习】知识图谱搭建医疗问答系统

热门文章

  1. MCSE 2012 R2之工作文件夹Word Folders(2)
  2. [xmind] ASP.NET 设计模式 - UX 用户体验
  3. C#网络编程之面向连接的套接字
  4. python基本编程技巧_Python编程小白入门技巧,从入门到精通只需一个月。
  5. 2021最新SSM博客,功能完善,初云博客增强版
  6. 一阶低通滤波器方程_一阶RC低通滤波器和RC高通滤波器简介-模拟/电源-与非网...
  7. 又见 Lucky Number
  8. 索引超出矩阵维度怎么修改程序_seo关键词优化工具怎么收费
  9. php pdo oci8,PHP516 用phpize增加扩展PDO_OCI和OCI8
  10. mysql 改进前序遍历树_“无限层级传销”系统设计?前序遍历树的Mysql方案