二维坐标的平移,旋转,缩放及matlab实现
本文结合matlab 软件解释二维坐标系下的平移,旋转,缩放
首先确定点在二维坐标系下的表达方法,使用一个1*3矩阵:
Pt = [x,y,1]
其中x,y 分别为点的X,Y坐标,1为对二维坐标的三维扩充,即将二维坐标平面上的点移动到三维坐标面Z=1上来,这样的变化并没改变图形的形状,这种变化叫做齐次变换。
pt移动dx dy 后可得到移动后的点为pt’[x+dx,y+dy,1]
可以由如下关系表示
Pt’ = pt*Move。其中:

类似的,假设x y 放大系数为sx sy
那么有如下矩阵:

X,y旋转角度为t(t为逆时针旋转角度),那么旋转矩阵为

需要注意的是:
旋转与放缩均为相对坐标原点(0,0)的,坐标的旋转中心为(0,0),放缩N倍后,坐标质心坐标变为(Nx,Ny),质心位置发生偏移。
1.当坐标点A(x,y)需要相对某一点(x1,y1)旋转角度T时,首先要将坐标原点移动到此点,意即,首先将要旋转的点投影到以参考点为原点的坐标系,旋转后,再投影回原坐标系,两个坐标系存在平移关系。
首先进行移动操作
dx = -x1,dy=-y1
然后再进行旋转操作
t = T
旋转之后将坐标移动回来
dx = x1, dy = y1
三者顺序不能颠倒。将A坐标顺序与三个矩阵相乘,得到最终结果。同理,当一点相对某参考点放缩时,也首先需要将坐标系原点平移参考点,放缩后在移回原原点(0,0)。
2 当坐标点相对某参考点放缩,旋转同时发生时,旋转与放缩的相对顺序并不影响最终结果,两者的顺序可以是任意的(后面可以通过验证放缩,旋转矩阵是否满足交换律证明)。
下面讨论二维坐标平移,旋转,放缩的matlab实现。
由于对坐标,转换参数的矩阵化表示,因此很容易考虑到Matlab实现。
Matlab 对于矩阵的原生支持,以及强大的绘图能力,均为我们直观,生动的理解坐标变换提供了良好支持。
下面考虑如下问题,点(2,2)绕(1,1)逆时针旋转45度后的坐标是多少?
本问题中 坐标点x为(2,2),参考点ref 为(1,1)。旋转角度t=45。按照前文所述,实现顺序为平移->旋转->平移。
Matlab 实现如下:
X = [2 2 1]




求得x1 为 [1 2.4142 1]
2 下面可以验证 rotateMatrix,scaleMatrix的交换律证明放缩,旋转的顺序问题,实际上可以发现scaleMatrix 为对角矩阵,因此两个矩阵肯定满足交换律的。但换做普通矩阵就不能满足交换律,如平移矩阵。
本文所述可能存在错误,还请高手指正。
2013.8.22
二维坐标的平移,旋转,缩放及matlab实现的更多相关文章
- OpenGL屏幕二维坐标转化成三维模型坐标
我们把OpenGL里模型的三维坐标往二维坐标的转化称为投影,则屏幕上的二维坐标往三维坐标转化则可以称为反投影,下面我们来介绍一下反投影的方法. 主要是gluUnProject函数的使用,下面是代码: ...
- Win窗口坐标二维坐标与OpenGl的世界坐标系的之间的相互转换
Win窗口坐标二维坐标与OpenGl的世界坐标系的转换 几何处理管线擅长于使用视图和投影矩阵以及用于裁剪的视口把顶点的世界坐标变换为窗口坐标. 但是,在有些情况下,需要逆转这个过程.一种常见的情形是: ...
- osg中使用MatrixTransform来实现模型的平移/旋转/缩放
osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...
- osg矩阵变换节点-----平移旋转缩放
osg矩阵变换节点-----平移旋转缩放 转自:http://www.cnblogs.com/ylwn817/articles/1973396.html 平移旋转缩放这个三个是osg矩阵操作中,最常见 ...
- UVALive 5102 Fermat Point in Quadrangle 极角排序+找距离二维坐标4个点近期的点
题目链接:点击打开链接 题意: 给定二维坐标上的4个点 问: 找一个点使得这个点距离4个点的距离和最小 输出距离和. 思路: 若4个点不是凸4边形.则一定是端点最优. 否则就是2条对角线的交点最优,能 ...
- Excel 二维数组(数据块)旋转/翻转技巧
Excel 二维数组(数据块)旋转/翻转技巧 原创 2017-12-30 久石六 久石六 工作中遇到个问题,需要将Excel中的数据块或者说二维数组向右旋转90度,才能再加工处理.当然,不是旋转文本方 ...
- 用C#控制台编写 推箱子之类的 坐标移动----之二维坐标
//首先用枚举 列出方向 上,下,左,右(枚举的最后一位数后不用符号 否则会报错) public enum dro { up = 1, down = ...
- JAVA根据A星算法规划起点到终点二维坐标的最短路径
工具类 AStarUtil.java import java.util.*; import java.util.stream.Collectors; /** * A星算法工具类 */ public c ...
- [opengl] 画一个可移动的自行车 二维几何变换(平移、旋转、缩放)
#include <cmath> #include "glut.h" #include "iostream" using namespace std ...
随机推荐
- ionicPopup弹出列表选择对话框
//显示vm.selectWarehouse = function() { vm.popupForWarehouse = $ionicPopup.show({ template: '<div c ...
- linux常见命令的列表
http://www.pixelbeat.org/cmdline_zh_CN.html 命令 描述 • apropos whatis 显示和word相关的命令. 参见线程安全 • man -t man ...
- [转]struct实例字段的内存布局(Layout)和大小(Size)
在C/C++中,struct类型中的成员的一旦声明,则实例中成员在内存中的布局(Layout)顺序就定下来了,即与成员声明的顺序相同,并且在默认情况下总是按照结构中占用空间最大的成员进行对齐(Alig ...
- DeepID人脸识别算法之三代(转)
DeepID人脸识别算法之三代 转载请注明:http://blog.csdn.net/stdcoutzyx/article/details/42091205 DeepID,目前最强人脸识别算法,已经三 ...
- uva 10892
试了一下纯暴力 结果过了 无话可说 应该有更好的方法...... /**************************************************************** ...
- iOS开发笔记--宏定义的黑魔法 - 宏菜鸟起飞手册
宏定义在C系开发中可以说占有举足轻重的作用.底层框架自不必说,为了编译优化和方便,以及跨平台能力,宏被大量使用,可以说底层开发离开define将寸步难行.而在更高层级进行开发时,我们会将更多的重心放在 ...
- URAL 1012 K-based Numbers. Version 2(DP+高精度)
题目链接 题意 :与1009一样,不过这个题的数据范围变大. 思路:因为数据范围变大,所以要用大数模拟,用java也行,大数模拟也没什么不过变成二维再做就行了呗.当然也可以先把所有的都进行打表,不过要 ...
- ubuntu12 开机自动转到命令行
命令: sudo gedit /etc/default/grub 找到这一行 GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"改成 GRUB_CM ...
- 【前端学习】【CSS选择器】
CSS选择器 CSS选择器 CSS(Cascading Style Sheets)是一项出色的技术,它使得网页的结构和表现样式完全分离.利用CSS选择器能轻松地对某个元素添加样式而不改动HTM ...
- 启动C:\Windows\System32\logiLDA.DLL时出现问题,找不到指定模块
环境:windows8.1专业版 问题:启动C:\Windows\System32\logiLDA.DLL时出现问题,找不到指定模块 每次开机都会弹出上图所示的信息. 经过查找是罗技鼠标驱动的问题:而 ...