利用矩阵进行坐标转换.doc

利用矩阵进行坐标转换.doc

ID:58619322

大小:76.00 KB

页数:9页

时间:2020-10-17

利用矩阵进行坐标转换.doc_第1页
利用矩阵进行坐标转换.doc_第2页
利用矩阵进行坐标转换.doc_第3页
利用矩阵进行坐标转换.doc_第4页
利用矩阵进行坐标转换.doc_第5页
资源描述:

《利用矩阵进行坐标转换.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、利用矩阵进行坐标转换之前做拓扑图,本来打算整一套坐标系统在里面的,后来因为时间原因暂时用了最原始的方法实现。现在稍稍得闲,重新开始思考这个问题。不过在搜索的时候,意外发现.NetFramework类库中自带的有实现坐标系转换功能的类。Reflector了一把,发现代码看不懂了——都是利用矩阵操作的。矩阵这玩意儿,几年没用早忘完了。于是认真学习了一把,顺便把如何用矩阵进行坐标转换的过程记录和注解一下。文中部分内容摘取自MSDN,搜索“变换的矩阵表示形式”即可找到。首先review一下矩阵的基础知识:m×n矩阵是排列

2、在m行和n列中的一系列数。下图显示几个矩阵。 可以通过将单个元素相加来加合两个尺寸相同的矩阵。下图显示了两个矩阵相加的示例。 m×n矩阵可与一个n×p矩阵相乘,结果为一个m×p矩阵。第一个矩阵的列数必须与第二个矩阵的行数相同。例如,一个4×2矩阵与一个2×3矩阵相乘,产生一个4×3矩阵。矩阵的行列的平面点可视为矢量。例如,(2,5)是具有两个组件的矢量,(3,7,1)是具有三个组件的矢量。两个矢量的点积定义如下:(a,b)?(c,d)=ac+bd(a,b,c)?(d,e,f)=ad+be+cf例如,(2,3)和(

3、5,4)的点积是(2)(5)+(3)(4)=22。(2,5,1)和(4,3,1)的点积是(2)(4)+(5)(3)+(1)(1)=24。请注意,两个矢量的点积是数字,而不是另一个矢量。另外请注意,只有当两个矢量的组件数相同时,才能计算点积。将A(i,j)作为矩阵A中第i行、第j列的项。例如,A(3,2)是矩阵A中第3行、第2列的项。假定A、B和C是矩阵,且AB=C,则C的项计算如下:C(i,j)=(A的第i行)?(B的第j列)下图显示了矩阵相乘的几个示例。以第二个等式为例,假设等式两边的矩阵分别是a、b、c,1*

4、3的矩阵和3*2的矩阵相乘,得到的结果为1*2的矩阵。其中c[0][0]=a[0][0]*b[0][0]+a[0][1]*b[1][0]+a[0][2]*b[2][0],c[0][1]=a[0][0]*b[0][1]+a[0][1]*b[1][1]+a[0][2]*b[2][1]。矩阵的加法、乘法,可以用来做坐标转换。我们通常使用3*3(如果不需要旋转,则2*2的矩阵即可)的矩阵来做平面上的各种坐标转换,包括x/y轴的平移、旋转。现在来看一个简单的坐标系转换的例子:假设我们的客户区分辨率是100*100,要在客户

5、区中心点画一个点,这个点的坐标是(x,y)。现在如果我们调整了客户区分辨率为400*300,此时如果还需要保持这个点的相对位置不变,计算他的坐标应该是(x*400/100,y*300/100)。这个计算过程很简单,那么用矩阵操作应该如何来实现呢?我们将这个点视为一个1*2的矩阵,将其乘以一个2*2的矩阵,得出的仍然是一个1*2的矩阵,就是新的坐标了。由于屏幕分辨率在x、y轴分别扩大为原来的4倍和3倍,那么我们只要将点的x、y轴坐标都扩大到原来的4、3倍即可。公式如下: 等式左边的第二个矩阵,就是用来实现坐标转换的

6、矩阵。其中b[0][0]就是x轴的扩大倍数,b[1][1]就是在y轴上的扩大倍数。这里面b[0][1]和b[1][0]永远是0。坐标系的这种转换,叫做线性变换。OK。看完这个例子,是不是觉得用矩阵比直接计算还麻烦?嗯,对于这种简单的情况是这样的。不过别急,继续看坐标系旋转的情况,如果现在要求这个客户区逆时针旋转30度,要保持这个点的相对位置不变,他的新坐标应该是多少呢?普通的计算的公式就不陈述了,这就是个初中几何题目。我们直接来看怎样通过矩阵操作实现。首先看公式:在二维空间中,旋转可以用一个单一的角θ定义。作为约

7、定,正角表示逆时针旋转。关于原点逆时针旋转θ的矩阵是: 也就是说,逆时针旋转30度的新坐标就是:当然,除此之外,坐标系还有平移,但是这个就简单了,只是一个简单的矩阵加法。比如(x,y)向右平移一个单位,用矩阵就是[x,y]+[1,0]就是是(x+1,y)。下图显示了应用于点(2,1)的几个变换: 前图中显示的所有变换都是线性变换。某些其他变换(如平移)不是线性的,不能表示为与2×2矩阵相乘的形式。假定您要从点(2,1)开始,将其旋转90度,在x方向将其平移3个单位,在y方向将其平移4个单位。可通过先使用矩阵乘法再

8、使用矩阵加法来完成此操作。后面跟一平移(与1×2矩阵相加)的线性变换(与2×2矩阵相乘)称为仿射变换,如上图所示。放射变换(先乘后加)可以通过乘以一个3*3的矩阵来实现,若要使其起作用,平面上的点必须存储于具有虚拟第三坐标的1×3矩阵中。通常的方法是使所有的第三坐标等于1。例如,矩阵[211]代表点(2,1)。下图演示了表示为与单个3×3矩阵相乘的仿射变换(旋转90度;在

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。