二维坐标的平移,旋转,缩放及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 ...
随机推荐
- (转)GDT与LDT
网址:http://blog.csdn.net/billpig/article/details/5833980 保护模式下的段寄存器 由 16位的选择器 与 64位的段描述符寄存器 构成段描述符寄存器 ...
- linux mint 五笔安装方法
终于可以使用五笔了,方法就是安装好ibus后要设置首选项,这样在首选项里设置就可以了.
- 如果Android和C#在一起?
先看两则新闻. 一则来自新浪科技: 谷歌上诉遭拒绝 需向甲骨文支付Java使用费 大意是说,针对谷歌Android操作系统侵犯甲骨文Java知识产权的指控,美国法院最近做出了有利于甲骨文的裁决 ...
- vncserver 添加用户
1.在vncserver设置登录用户的信息 #vi /etc/sysconfig/vncservers VNCSERVERS="1:root 2:wt" 此处添加用户 ...
- 【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法
[KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一 ...
- js的面向对象的程序设计之理解继承
来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(六) 先来解析下标题——对象和继承~ 一.对象篇 ECMA-262把对象的定义为:&qu ...
- [转载]easyui datagrid 时间格化(JS 日期时间本地化显示)
easyui datagrid 日期时间显示不正常,后台java 类型为 DATE 经过JSON工具一转化传到前台来就是这样,不便 于是想格式化一下, 格式化代码 如下: [javascript] v ...
- 写作技巧--Simile明喻
- (转)基于即时通信和LBS技术的位置感知服务(三):搭建Openfire服务器+测试2款IM客户端
主要包含4个章节: 1. Java 领域的即时通信的解决方案 2. 搭建 Openfire 服务器 3. 使用客户端测试我们搭建的 Openfire 服务器 4. Smack 和 ASmack 一.J ...
- Android支付接入(五):机锋网
原地址:http://blog.csdn.net/simdanfeg/article/details/9012083 前边已经陆续跟大家走了一遍运营商和支付宝付费接入,今天跟大家一起看看机锋网的支付接 ...