zoukankan      html  css  js  c++  java
  • 矩阵与坐标变换

    转自:https://jingyan.baidu.com/article/2c8c281dfbf3dd0009252a7b.html

    http://www.fjutacm.com/Problem.jsp?pid=2566

    一,在平面中,一个点绕任意点旋转θ度后的点的坐标 

    假设对二维空间上任意点(x1,y1),绕一个坐标点(x0,y0)逆时针旋转a角度后的新的坐标设为(x2, y2),有公式:

        x2= (x1 - x0)*cos(a) - (y1 - y0)*sin(a) + x0 ;

        y2= (x1 - x0)*sin(a) + (y1 - y0)*cos(a) + y0 ;

    由该公式易得,

    1,当顺时针旋转时,只需要将 a 变成 -a  就可以了

    2,当 a 为 90度时 ,

    x2 = - ( y1 - y0 ) +x0

    y2 = x1 - x0 + y0

    3,当 a 为 90度时 ,

    x2 =  ( y1 - y0 ) +x0

    y2 = - ( x1 - x0 ) + y0

    4, 当坐标轴,以向右为 x 轴正向 ,向下 轴为 y 轴 时,依然是顺时针有

    x2= (x1 - x0)*cos(a) + (y1 - y0)*sin(a) + x0 ;

    y2= (x1 - x0)*sin(a) - (y1 - y0)*cos(a) + y0 ;

    y 都变成 -y,但是 最后加上 x0,y0 的不能改,这是旋转点的坐标,不能改,

    而前面的是 改变量 ,运算时要要考虑到坐标,所以需要更改。

    二 ,矩阵与坐标转换

    关于上面公式的推导可以在最上面的百度链接里面看到,反正我是没去看证明,

    看上去好麻烦,不过如果用矩阵去证明的话,还是比较简单的,

    毕竟,矩阵创造出来就是用来解决线性代换的问题。


    三大基础初等坐标变化包括

    1,旋转变换:

    图片.png

    2,伸缩变换:

    图片.png

    3,平移变换:

    图片.png

    其他任意初等坐标变换的都可以由这三个变换经有限次复合得到。

    所以任意初等变化都可以表示成以下形式

    图片.png

    比如绕着(a,b)顺时针旋转θ可以看成,平移(-a,-b),旋转θ,平移(a,b)这三步复合得到,即:

    图片.png

    即 :

    所以该式展开就是上面的:

     x2= (x1 - x0)*cos(a) - (y1 - y0)*sin(a) + x0 ;

     y2= (x1 - x0)*sin(a) + (y1 - y0)*cos(a) + y0 ;     只不过是符号换了一下

    再比如,以(a,b)为中心,横坐标扩大n倍,纵坐标扩大m

    总结:任意初等坐标变换的实现可以用矩阵来表示。

    ========== ========= ======== ======== ======= ===== ==== === == =

    一个男人生前要达到什么程度的不可一世,才能避免死于无名?  ——《陈二狗的妖孽人生》

  • 相关阅读:
    使<div>做的层不随滚动条的移动而移动
    datagrid 实现 表头水平可以移动 垂直固定
    csapp 、sicp 、深入理解计算机系统、 计算机程序的构造和解释
    window.open使用
    C#进程管理
    asx根据时间点播放
    Ext GrdPanel多种取值方式
    System.ComponentModel.Win32Exception: 拒绝访问
    播放器Object使用
    M3U文件格式
  • 原文地址:https://www.cnblogs.com/asdfknjhu/p/13757054.html
Copyright © 2011-2022 走看看