【转】矩阵变换坐标系 深入理解

转自:矩阵变换坐标系 深入理解 - 知乎

网址链接:从坐标系图中理解“空间变换”

小谈矩阵和坐标变换

矩阵坐标系变化理解

让我们从一个实际的例子入手:下图是一个用两维的笛卡尔坐标系表示的二维空间。

其中,黑色坐标系 x-y代表一个二维空间蓝色坐标系 i-j代表另外一个二维空间。已知蓝色坐标系轴在黑色坐标系下对应的值是i=(1,1), j=(-1,1),又知橙色向量 p 处在 i-j 空间中,其坐标值为(2,1)。现在的问题是,这个 被转换到黑色坐标系 x-y 空间下它的坐标值是什么?

解决这个问题一个最关键也最直接的想法是“向量分解与再合成”。

可以被分解到 i 和 j 两个方向,得到 p= 2i+j;同时 i 又可以分解到 x 和 y 两个方向,得到 i = x + y,另外 j 也可以分解得到 j = -x + y。于是,我们全部展开,就得到 p(i-j) = 2i + j = 2(x + y) + (-x + y) = x + 3y = p(x-y) 。

因此点 在 x-y 空间下的坐标值为(1,3)。


这种方法可以用来讨论更一般的情况。假设p点在 i-j 坐标系下为(k1,k2),在 x-y 坐标系下为(q1,q2)。同样地有基向量 i 对应在 x-y 空间中为(m1,m2);j 对应在 x-y 空间中为(n1,n2)。

于是我们有以下推导,

i = m1x + m2yj = n1x + n2y

于是,

p(i-j) = k1i + k2j

= k1(m1x + m2y) + k2(n1x + n2y)

= (k1m1 + k2n1)x + (k1m2 + k2n2)y

于是,

p(i-j) = (k1m1 + k2n1, k1m2 + k2n2)

= (q1, q2)

p(x-y)

得到,

q1 = k1m1 + k2n1

q2 = k1m2 + k2n2

变换成矩阵形式:

其中(k1,k2)是 i-j 空间下的坐标值,而(q1,q2)是 x-y 空间下的坐标值。中间的矩阵就是用来做转换的矩阵。从中我们可以发现,如果竖着来观察,向量(m1,m2)就是基向量 i 在 x-y 空间下的坐标值,而向量(n1,n2)则是基向量 j 在 x-y 空间下的坐标值。这个矩阵,实际上就是由空间 i-j 下的基向量在空间 x-y 下的坐标值构成的。

1 矩阵的行序和列序(也称行优先或列优先)仅仅是指矩阵的存储方式,即我们如果用一个4*4数组m存储矩阵,如果m[0][0]-m[0][3]连续存储了矩阵的第一行,那么就是行优先,反之就是列优先。无论是行优先还是列优先,它们代表的数学意义是相同的。
2 如果矩阵是行序,那么它的第一列(m[0][0],m[1][0],m[2][0])就代表X变换,第二列就是Y变换,第三列就是Z变换。
我们来看看为什么:
刚才提到矩阵把线性空间中的一个点给变换到另一个点,不妨称变换前的点为P1(x1,y1,z1),变换后的点为P2(x2,y2,z2):
那么根据线代中的矩阵乘法,P1 * M = P2展开就成了:
m00,m01,m02
(x1,y1,z1) * m10,m11,m12 = x1*m00+y1*m10+z1*m20+ x1*m01*
m20,m21, m22 y1*m11+z1*m21,x1*m02+y1*m12+z1*m22

所以:
x2 = x1*m[0][0] + y1*m[1][0] + z1*m[2][0];
y2 = x1*m[0][1] + y1*m[1][1] + z1*m[2][1];
z2 = x1*m[0][2] + y1*m[1][2] + z1*m[2][2];
看出什么了吗?
如果把一个行序矩阵(接下来讨论的都是行序矩阵,就省略行序二字了)的每一列分别用X,Y,Z三个矢量来表示,那么M就表示为:XYZ三根轴。
现在,矩阵M看起来是不是很像一个坐标系?而P1到P2的变换就是P1分别与X,Y,Z的点积!
也就是矩阵M是把P1从老坐标系变换到新坐标系,而矩阵的三列(三根轴)就分别代表了新坐标系的三根轴在老坐标系中的坐标!
而点积的几何意义其实就是求取投影!所以坐标变换的几何本质(刚才已经讨论过其代数本质),就是把一个点分别投影到三根轴上去而已!
再仔细想一想,P1在XYZ三根轴上的投影,不正是它在新坐标系下的坐标吗?这样一来,坐标变换是不是就太容易理解了呢?

综上理解得出:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】坐标系变换矩阵推导

转自: 坐标系的变换矩阵推导 1.平移变换 假设存在点(x,y,z),将x移动a,y移动b,z移动c,到新的点(x′,y′,z′),则: 中间4x4的矩阵叫变换矩阵。可见,如果要平移坐标,要将坐…

Crystal Report 2008

郁闷的Crystal Report 2008,下午逛了一圈sap网站,Crystal给Sap收购后就没怎么上过他们的网站,像迷宫一下逛了半天才找到下载升级包的地址,备用,也许你看到的时候已经失效了 http://www.sdn.sap.com/irj/boc/crystalrep…

【转】图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵

转自:图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵_sherlockreal的博客-CSDN博客_视角矩阵 图形流水线中坐标变换详解:模型矩阵、视角矩阵、投影矩阵 图形流水线中坐标变换过程模型矩阵:模型局部坐标系和世界坐标系之…

set row count

SET ROWCOUNT 使 Microsoft® SQL Server 在返回指定的行数之后停止处理查询。 语法 SET ROWCOUNT { number | number_var } 参数 number | number_var 是在停止给定查询之前要处理的行数(整数)。 注…

【转】C#开发PACS医学影像处理系统(二):界面布局之菜单栏

转自:C#开发PACS医学影像处理系统(二):界面布局之菜单栏 - 乔克灬叔叔 - 博客园 在菜单栏布局上,为了使用自定义窗体样式和按钮,我们需要先将窗体设置为无边框,然后添加一个Grid作为菜单栏并置顶,Vertical…

WF4.0 基础篇 (二十九) WorkflowInspectionServices

本文例子下载: http://files.cnblogs.com/foundation/WorkflowInspectionServicesSample.rar WorkflowInspectionServices 类 WorkflowInspectionServices可以得到流程中的Activity, 由于WF4.0的ActivityTree相对复杂,并不是象WF3.X的结构那样清晰, 在WF4.0中Activi…

Linux 命令平时积累

我是Windows Live Writer 写博客,来记录我平时遇到的一些问题和解决的方法。 记得刚刚接触Linux的时候,自己真是一名不折不扣的菜鸟,通过一年的努力,自己可以单独操作Linux了,我将把以后遇到的比较有用的命令积累在这篇…

【转】C#开发PACS医学影像处理系统(三):界面布局之工具栏

转自:https://www.cnblogs.com/Uncle-Joker/p/13650330.html 工具栏布局采用WPF中Grid作为容器,按钮采用自定义样式和图标,并采用Separator分割线: XAML设计器代码: 其中 Style"{StaticResource ButtonStyle}&…

WinCE6.0 修改开机Logo方法

中秋假期已过,回来继续该博文主题。今天讲解第二种方法,将 Logo 图片的数据写入到 Nand Flash 中,在启动初始化 LCD 的时候,从固定的地址将数据读出并填充到显示缓存中。实验平台:WinCE6.0Android6410 4.3寸CLD。以下内…

sql 替换text字段中的指定字符

--text不能直接替换 --mbody未目标字段update b_mail set mbodyreplace(convert(varchar(max),mbody),_viewstate,viewstate) where mno124转载于:https://www.cnblogs.com/stealther/archive/2010/04/02/1703191.html

【转】DICOM开发工具总结

转自:DICOM开发工具总结_qimo601的专栏-CSDN博客 网上流行的DICOM协议开发工具: 1、DICOM开发类库主要有: (1)DCMTK(3.6.0), 官方下载网站,(如何安装编译DCMTK3.6.0) DCMTK实现了对DICOM图像…

Wince6.0编译错误经验总结

Wince6.0编译错误经验总结 一 编译wince系统并模拟运行应注意的问题 1): Public目录下的代码最好不要擅自修改。在确认需要修改时,得拷贝出来放到BSP目录下,再根据实际情况进行修改。 另外,编译WinCE系统时&#xff…

使用Combres 库 ASP.NET 网站优化

网站优化理论方面可以看杨正祎同学的文章如何提高网页的效率(上篇)——提高网页效率的14条准则,如何提高网页的效率(下篇)——Use YSlow to know why your web Slow,本文给你介绍一个实际的类库帮助你完成网…

【转】foreach for each for_each引发的探讨:c++世界中的循环语句

转自:foreach for each for_each引发的探讨:c世界中的循环语句_w_419675647的博客-CSDN博客 一 背景: 代码中看到 for each,注意,两个单词中间没有下划线,有同事问这个是不是和 for_each一样?…

基于ArcEngine实现分组统计面积的功能

可以使用IQueryFilterDefinition里的PostfixClause来实现SQL语句里的group by, order by等的功能。 例如: IQueryFilter pQueryFilter new QueryFilterClass(); pQueryFilter.subfield"qsdwdm,qsxz,dlbm,sum(mj) as mj,sum(tkmj) as tkmj" pQueryFilter.w…

【转】CT中的“层“与“排“的区别

转自:CT中的"层"与"排"的区别 自从离开医院,专业培训磁共振,有差不多5年时间没有接触CT了。影像技术及影像医学诊断说到底是一门经验技术累积学科,这种学科的特点就是熟能生巧,几年不碰&#xff0…

交易机项目工作日志--2013-01-30

又是一个不眠之夜。 昨天王哥做的新板子,用我编译的内核无法启动,卡在串口的初始化。但用开发板光盘上自带的内核确可以启动。 对比两个内核的打印信息。 [31m[UART] DMA init CH:0 [0m[31m[UART] DMA init CH:1 [0m [31m[UART] DMA init CH:1 [0m[3…

开机显示c:\windows\windows32\config\system文件损坏或丢失的解决方法(收集)

开机显示"c:\windows\windows32\config\system文件损坏或丢失。提示用软盘或光盘启动,用安装盘。 XP系统system文件损坏的修复 2009-04-15 Cbsi中国PChome.net 类型: 转载 来源: 163博客 责编: 吴宏 [评论1条] 方法一:用原盘XP光驱启动,…

修改SMDK6410的调试串口为普通串口(wince系统)

环境: 飞凌OK6410A开发板, Windows CE6.0系统 最近在做GPRS通信,可是手头上的GPRS模块(Q2403A)是五线串口的(RXD、TXD、GND、RCS、CTS),老板又不愿买新的模块。所以考虑将调试串口CO…

【转】CTA图像

转自:CTA图像 CT检查在临床中应用十分广泛,CT以其扫描速度快,对骨头及钙化敏感而具有部分优势。 CTA是CT血管成像,是CT临床应用中一个非常重要的部分,由于血管及其背景软组织自然对比差,常规CT平扫往往难以…