• 二维下的仿射变换


    什么是二维仿射呢变换呢?这么说的哈:在变换过程中,它保持了二维图形的“平直性”(即:直线经过变换之后依然是直线)和“平行性”(即:二维图形之间的相对位置关系保持不变,平行线依然是平行线,且直线上点的位置顺序不变)。如,旋转、平移、缩放、错切。我们来一个一个地看。

    为了能实现平移操作,我们现在规定,我们都是在我们的二维坐标基础上再补充一个1,即由[x, y]T变为[x, y, 1]T.

    缩放操作:

    坐标由[x, y,1]T 变为[mx, ny, 1]T。用矩阵表示为:

    image

    例子如下图所示:

    image

    平移操作:

    用矩阵可以表示为:

    image

    例子如下图所示:

    image

    翻转操作:

    可以分为沿x轴翻转和沿y 轴翻转,

    当沿x轴翻转时,又称为垂直翻转,可以表示为:

    image

    例子如:

    image

    当沿y轴翻转时,又称为翻转,可以表示为:

    image

    例子如下:

    image

    错切操作:

    同样,它可以分为沿x轴与沿y轴两种(当然你也可以把它们组合起来)

    沿x 轴的错切操作,可以用矩阵表示为:

    image

    例子如下:

    image

    沿y 轴的错切操作,可以用矩阵表示为:

    image

    例子如下:

    image

    旋转操作:

    我们先来推导一下以原点为中心的旋转操作。对于不以原点为旋转操作与以原点为中心的旋转操作的区别在于有一个平移操作啦,我们可以旋转完以后再平移,也可以平移完以后再旋转中啦。

    image

    它的例子如下:

    image

    好啦,基本的仿射变换就这么多啦,另外,别忘了我们可以通过把这些基本的变换组合起来实现更复杂的仿射变换。

  • 相关阅读:
    栈和堆的区别【转】
    C++虚函数表解析(转)
    C++编码规范(转)
    全局变量的声明和定义 以及dll中全局变量的导出
    Sizeof与Strlen的区别与联系.
    利用事件对象实现线程同步
    创建互斥对象同步线程
    MFC GDI笔记 转
    ClientToScreen( )和ScreenToClient( )
    Visual C++线程同步技术剖析
  • 原文地址:https://www.cnblogs.com/yinheyi/p/6148886.html
Copyright © 2020-2023  润新知