• 算法系列:geometry


    1、基本几何变换及变换矩阵

    基本几何变换都是相对于坐标原点和坐标轴进行的几何变换,有平移、比例、旋转、反射和错切等。

    1.1 平移变换

    是指将p点沿直线路径从一个坐标位置移到另一个坐标位置的重定位过程。他是一种不产生变形而移动物体的刚体变换(rigid-body transformation),如下图所示。

     图1-1 平移变换

        推导:

        求得平移变换矩阵如下:

     其中Tx,Ty称为平移矢量。

     

    1.2 缩放变换

    缩放变换是指对p点相对于坐标原点沿x方向放缩Sx倍,沿y方向放缩Sy倍。其中Sx和Sy称为缩放系数。

    图1-2缩放变换(Sx=2,Sy=3)

       推导:

       矩阵:

    缩放变换可改变物体的大小,如下图所示。当Sx=Sy >1时,图形沿两个坐标轴方向等比例放大;当Sx=Sy<1,图形沿两个坐标轴方向等比例缩小;当Sx≠Sy,图形沿两个坐标轴方向作非均匀的比例变换。

    图1-3比例变换
    (a)Sx与Sy相等                                                      (b)Sx与Sy不相等  

     

    1.3 旋转变换

    二维旋转是指将p点绕坐标原点转动某个角度(逆时针为正,顺时针为负)得到新的点p’的重定位过程。

    图1-4旋转变换

        推导:利用极坐标方程

     逆时针旋转θ角的矩阵如下:

     

    1.4 对称变换

    对称变换后的图形是原图形关于某一轴线或原点的镜像。

    图1-5对称变换

      (1)关于x轴对称

    图1-6关于x轴对称

     (2)关于y轴对称

    图1-7关于y轴对称

     (3)关于原点对称

    图1-8关于原点对称

      (4)关于y=x轴对称

    图1-9关于y=x轴对称

      (5)关于y=-x轴对称

    图1-10关于y=-x轴对称

     

    1.5 错切变换

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

    图1-11错切变换

     错切变换的变换矩阵为:

        (1)沿x方向错切:b=0
        (2)沿y方向错切:c=0
        (3)两个方向错切:b和c都不等于0。

    2、 复合变换

    如果图形要做一次以上的几何变换,那么可以将各个变换矩阵综合起来进行一步到位的变换。复合变换有如下的性质:

    1)复合平移

    对同一图形做两次平移相当于将两次的平移两加起来:

    2)复合缩放

    两次连续的缩放相当于将缩放操作相乘:

    3)复合旋转

    两次连续的旋转相当于将两次的旋转角度相加:

    缩放、旋转变换都与参考点有关,上面进行的各种变换都是以原点为参考点的。如果相对某个一般的参考点(xfyf)作缩放、旋转变换,相当于将该点移到坐标原点处,然后进行缩放、旋转变换,最后将(xfyf)点移回原来的位置。

    4)关于(xfyf)点的缩放变换

    5)绕(xfyf)点的旋转变换

     

    3、二维图形几何变换的计算

    几何变换均可表示成P’=P*T的形式

    (1)点的变换:先将点表示为规范化齐次坐标形式,再乘以变换矩阵。

    (2)直线的变换:将直线的两个端点表示为规范化齐次坐标形式,再乘以变换矩阵。

    (3)多边形的变换:将多边形的顶点表示为规范化齐次坐标形式,再乘以变换矩阵。

     (4)曲线的变换:将曲线的每个点表示为规范化齐次坐标形式,再乘以变换矩阵。

    4、复合变换的矩阵点乘的先后问题

    1)如果采用以下方式计算几何变换的变换矩阵:

    如上范例所示,其先执行变换的矩阵放在前面,后执行变换的矩阵放在后面。

    2)如果采用以下方式计算几何变换的变换矩阵:

    如上范例所示,其先执行变换的矩阵放在后面,后执行变换的矩阵放在前面。

    这是因为矩阵的特性:

  • 相关阅读:
    关于IE11浏览器同意请求只执行一次的解决方法
    基于Vue+iView+OpenLayer在IE11上运行的方法总结
    vue 树形目录结构
    css中DIV中字过多时,使用省略号的方法
    hls.js在vue中的使用
    SQL优化
    Python 实现自动化 Excel 报表
    C# HttpClient 请求认证、数据传输笔记
    任务队列处理
    判断是否包含中文
  • 原文地址:https://www.cnblogs.com/noryes/p/5716686.html
Copyright © 2020-2023  润新知