矩阵与坐标变换
转自: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,旋转变换:
2,伸缩变换:
3,平移变换:
其他任意初等坐标变换的都可以由这三个变换经有限次复合得到。
所以任意初等变化都可以表示成以下形式
比如绕着(a,b)顺时针旋转θ可以看成,平移(-a,-b),旋转θ,平移(a,b)这三步复合得到,即:
即 :
所以该式展开就是上面的:
x2= (x1 - x0)*cos(a) - (y1 - y0)*sin(a) + x0 ;
y2= (x1 - x0)*sin(a) + (y1 - y0)*cos(a) + y0 ; 只不过是符号换了一下
再比如,以(a,b)为中心,横坐标扩大n倍,纵坐标扩大m
总结:任意初等坐标变换的实现可以用矩阵来表示。
========== ========= ======== ======== ======= ===== ==== === == =
一个男人生前要达到什么程度的不可一世,才能避免死于无名? ——《陈二狗的妖孽人生》