zoukankan      html  css  js  c++  java
  • 如何通俗的解释仿射变换?

    原文地址:https://www.matongxue.com/madocs/244.html

    简单来说,“仿射变换”就是:“线性变换”+“平移”。
    先看什么是线性变换?

    1 线性变换

    线性变换从几何直观有三个要点:
    • 变换前是直线的,变换后依然是直线
    • 直线比例保持不变
    • 变换前是原点的,变换后依然是原点
    比如说旋转:
    比如说推移:
    这两个叠加也是线性变换:
    自己动手试一下(观察下是否符合之前的三个要求):
     
     
    Graphics
    Created with GeoGebra
    1.1 代数
    简单讲一下旋转是怎么实现的,可以让我们进一步了解代数是怎么描述线性变换的。
    你可以手动操作下,会发现旋转矩阵在不断变化(为了方便观察旋转,我标记出一个顶点):
     
     
    Graphics
    Created with GeoGebra
    总结下来,线性变换是通过矩阵乘法来实现的。

    2 仿射变换

    仿射变换从几何直观只有两个要点:
    • 变换前是直线的,变换后依然是直线
    • 直线比例保持不变
    少了原点保持不变这一条。
    比如平移:
    因此,平移不再是线性变化了,而是仿射变化。
    2.1 代数
    我们来看下仿射变换是怎么用代数来表示的。
    上一节我们说了,线性变换是通过矩阵乘法来实现的,仿射变换不能光通过矩阵乘法来实现,还得有加法。
    因为我们表示仿射变换为:
    vec{y}=Avec{x}+vec{b}
    2.2 通过线性变换来完成仿射变换
    这是我觉得非常优美的一个地方:
    什么意思?继续举例子:
    这样我就可以在三维空间下通过egin{bmatrix}A&vec{b}\0&1end{bmatrix}这个线性变换来操作z=1平面上的二维正方形,完成仿射变换:
    自己动手操作一下:
     
     
     
     
     
     
     
    Graphics
    Created with GeoGebra
    我们平移到需要的位置的时候:
    如果还有没有清楚的地方,可以结合之前的描述,看一下维基百科“仿射变换”词条里的一个gif动图,非常生动的表明了这一过程:
     
     
  • 相关阅读:
    ROW_NUMBER()用法(转)
    winform MD5值生成
    VC使用“添加方法向导”添加调度映射方法“
    MyGeneration配置说明
    dataGridView取消自动生成列
    PHP魔术常量(magic constant)
    Eclipse添加DTD文件实现xml的自动提示功能
    Google:5个常见的SEO错误和6个SEO好主意
    PHP检查PEAR是否工作
    手把手教你在ubuntu上安装LAMP
  • 原文地址:https://www.cnblogs.com/lzhu/p/11878760.html
Copyright © 2011-2022 走看看