本文结合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实现的更多相关文章

  1. OpenGL屏幕二维坐标转化成三维模型坐标

    我们把OpenGL里模型的三维坐标往二维坐标的转化称为投影,则屏幕上的二维坐标往三维坐标转化则可以称为反投影,下面我们来介绍一下反投影的方法. 主要是gluUnProject函数的使用,下面是代码: ...

  2. Win窗口坐标二维坐标与OpenGl的世界坐标系的之间的相互转换

    Win窗口坐标二维坐标与OpenGl的世界坐标系的转换 几何处理管线擅长于使用视图和投影矩阵以及用于裁剪的视口把顶点的世界坐标变换为窗口坐标. 但是,在有些情况下,需要逆转这个过程.一种常见的情形是: ...

  3. osg中使用MatrixTransform来实现模型的平移/旋转/缩放

    osg中使用MatrixTransform来实现模型的平移/旋转/缩放 转自:http://www.cnblogs.com/kekec/archive/2011/08/15/2139893.html# ...

  4. osg矩阵变换节点-----平移旋转缩放

    osg矩阵变换节点-----平移旋转缩放 转自:http://www.cnblogs.com/ylwn817/articles/1973396.html 平移旋转缩放这个三个是osg矩阵操作中,最常见 ...

  5. UVALive 5102 Fermat Point in Quadrangle 极角排序+找距离二维坐标4个点近期的点

    题目链接:点击打开链接 题意: 给定二维坐标上的4个点 问: 找一个点使得这个点距离4个点的距离和最小 输出距离和. 思路: 若4个点不是凸4边形.则一定是端点最优. 否则就是2条对角线的交点最优,能 ...

  6. Excel 二维数组(数据块)旋转/翻转技巧

    Excel 二维数组(数据块)旋转/翻转技巧 原创 2017-12-30 久石六 久石六 工作中遇到个问题,需要将Excel中的数据块或者说二维数组向右旋转90度,才能再加工处理.当然,不是旋转文本方 ...

  7. 用C#控制台编写 推箱子之类的 坐标移动----之二维坐标

     //首先用枚举 列出方向  上,下,左,右(枚举的最后一位数后不用符号  否则会报错)        public enum dro    {       up = 1,        down = ...

  8. JAVA根据A星算法规划起点到终点二维坐标的最短路径

    工具类 AStarUtil.java import java.util.*; import java.util.stream.Collectors; /** * A星算法工具类 */ public c ...

  9. [opengl] 画一个可移动的自行车 二维几何变换(平移、旋转、缩放)

    #include <cmath> #include "glut.h" #include "iostream" using namespace std ...

随机推荐

  1. python 中的列表解析和生成表达式 - 转

    优雅.清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(  List comprehensions)和生成表达式,通过这两 ...

  2. 斯坦福数据挖掘Introduction

    感谢敖山.薛霄老师把我引进了统计学和现代服务业的大门.......至少是长见识了. 查相似项检索时发现的. 中间一部分资料来自厦门大学数据库实验室,感谢大牛们的传道授业,爱你们. 查资料时发现很多计算 ...

  3. [转载]C#中播放背景音乐几种的方法

    最经在写winform程序,其中有用到播放背景音乐 特此收集了一些网上的教程: 1.调用非托管的dll using System.Runtime.InteropServices; //DllImpor ...

  4. C++: std::string 与 Unicode 如何结合?

    关键字:std::string Unicode 转自:http://www.vckbase.com/document/viewdoc/?id=1293 一旦知道 TCHAR 和_T 是如何工作的,那么 ...

  5. HDU 1004 ballons(map)

    题意:输出颜色最多的那个颜色. 思路:水题一道. #include <iostream> #include <string> #include <map> #inc ...

  6. Android 文字链接 文字点击时的背景颜色

    案例:实现“忘记密码?”这个链接,并且在按下的时候改变颜色. 方法一:这个可以用TextView实现: 主界面main.xml: <?xml version="1.0" en ...

  7. linux为命令取别名

    在linux的命令中,有些命令很长并且经常使用到,我们可以为命令添加一个别名,格式如下: $ alias 别名='命令' 例如: # 列出home文件夹的文件 $ alias lsh='ls -l / ...

  8. http://doc.okbase.net/congcong68/archive/112508.html

    http://doc.okbase.net/congcong68/archive/112508.html

  9. mac 用 brew

    mac 下用   brew 安装插件, 有重复的不会再次安装,比xmap模式好

  10. Source Insight的应用技巧、宏功能

    目录 1 简介... 5 2 搭建我们的SI环境... 5 2.1 搭建步骤... 5 2.2 说明... 6 3 应用技巧... 6 3.1 初级应用技巧... 6 3.1.1 解决字体不等宽与对齐 ...