坐标系变换

Think an invertible matrix as a coordinate.

坐标系变换,例如,现在有一个点P,在A坐标系中的坐标为(x,y),如何求出点P在其他坐标系下的坐标呢?比如,我们想知道P点在B坐标系中的坐标?


坐标系变换

做个类比,如果两个讲不同母语的人想要交流,怎么办?这时,如果有一种世界通用语言就好了,例如汉语。这样,当说英语的人向说法语的人问候“你好”的时候,他知道要查字典先把英文 “hello”转换成中文“你好”,然后,说法语的人就可以将“你好”转换成法文“Bonjour”。

这里有两个过程:

  • hello 你好
  • 你好 Bonjour

这两个过程中有一个关键点:

你好 —汉语

是的,世界通用语言,我们的汉语,就是key point, 她在不同语系中充当了桥梁的角色。

回到坐标系的话题,使用不同的坐标系就像使用不同的语言,各说各话,相互之间是无法被理解的。如果想要被理解,那就的使用大家都认同的方式交流。这时候,如果引入一个参考坐标系,世界就和平了:

我们可以将P点的坐标先转化为一个参考坐标,然后再从参考坐标转换到B坐标系中的坐标。

  • A Global
  • Global B

现在,我们的问题变成了求某个坐标系X与参考坐标系Global之间的转换方法:

X Global

不考虑平移

如果考虑不同的坐标系共原点,就像下面这样:


坐标系变换

选择坐标系A作为参考坐标系,如何表述:

B A

答案是:矩阵变换

矩阵变换就像词典翻译一样,将一个坐标系下的点转换成另一个坐标系中的点。

矩阵与线性变换中提到了在同一个坐标系中矩阵变换的作用,例如,将一个向量进行旋转。现在,矩阵变换被不可思议的用作了坐标系变换的工具。变换还是同样的变换,只是站在了不用的角度看待问题

  • 矩阵变换之于同一个坐标系,可以理解为坐标系不变,点的位置改变。
  • 矩阵变换之于不同坐标系,可以理解为点的绝对位置不变,坐标系改变。

其实在矩阵与线性变换拓展一节中,我提到了一种转换关系,这里,我给出上图的对应表述:

(1) [xy] = B[xy] [xy] = B1[xy]B=[b1b2], 且b1b2 是坐标系B的基向量

其中,矩阵B的各个列向量分别对应B坐标系的各个基向量[xy]是向量OP或者说点P在B坐标系的表示, [xy]则是向量OP或者点P在A坐标系中的表示。求出矩阵B,我们就有了翻译用的字典。

这一切,在于矩阵B的各个列向量,在于B坐标系的基向量。

(1) 的转换关系之所以成立,是因为矩阵B的各个列向量是B坐标系的基向量,他们都是坐标系A中的向量。更明确的说,矩阵B的列向量由坐标系A的基向量通过一个线性变换得到,这个线性变换完全可以用矩阵B表示,详见矩阵与线性变换

上图对应的矩阵B的两个列向量分别为b1=[25/55/5]b2=[5/525/5]

其实A、B可以是任何坐标系,式(1)仍然成立,只要满足:

  • 坐标系A和坐标系B原点均为(0,0)
  • 矩阵B的各个列向量分别对应B坐标系的各个基向量
  • 矩阵B的各个列向量都是坐标系A中的向量

坐标系B的基向量是坐标系A的基向量的一个线性变换 ,这个线性变换可以用矩阵B表示(T(x⃗ )=Bx⃗ ),确定坐标系B的基向量在A坐标系中的表示的过程叫做B坐标系的定位(landed)。将B坐标系的基向量定位在A坐标系中确定了一种关系,我们暂且把这种关系称为追溯关系,把A坐标系称为B坐标系的上游坐标系。反过来,如果把坐标系A的基向量定位在B坐标系中,那么B坐标系就成了A坐标系的上游坐标系。

下面,用图说话:


坐标系变换

以图中的两个向量b1,b2为基确定一个坐标系B,显然,在B坐标系中b1B=[10],b2B=[01], 接下来,b1,b2定位到A坐标中,得到b1A=[21],b2A=[11]

OP = 2b1+2b2

OP在B坐标系中的表示为[22],现在,将OP用A坐标系描叙:

OP = 2b1+2b2 = 2b1A+2b2A = [b1Ab2A][22] = [24]

现在,令矩阵B = [b1Ab2A],P点是用B坐标系表示的任意一点(x,y)

于是OP在A坐标系中的表示[xy] = B[xy] ,显然,B是可逆的,于是就有了(1)式的结论。

虽然这里的讨论是基于二维的,但是,不难想象,这里得出的结论可以扩展到任意维度。

用一句话来阐述这个结论

将B坐标系的基向量定位到A坐标系,然后将定位之后的基向量作为矩阵B的列向量,用矩阵B对B坐标系中的点P的坐标进行矩阵变换,将得到点P在A坐标系中的坐标。这个过程,就是从坐标系B到坐标系A的一个追溯过程。

加入平移

平移好像没什么好说的,不过就是在前面讨论的基础上引入一个偏移

下面用图示说明:


坐标系变换

上图引入了一个新的坐标系,取名为A’。将这个坐标系取名为A’是有原因的,因为他基本就是坐标系A的一个替身,他们之间除了坐标原点发生偏移之外,其他特征完全一致。

有了前面的基础,我们知道,将坐标系B中的坐标转换为坐标系A’中的坐标其实就是一个从B到A’的追溯过程。只要将坐标系B的基定位到A’坐标系中,以定位之后的基向量为列组成矩阵B,然后对坐标系中的坐标进行B矩阵转换就能得到其在A’坐标系中的坐标。反过来,求出矩阵B的逆,我们就能将A’坐标系中的坐标转化为B坐标系中的坐标。

也就是说,利用前面讨论的结论,我们能完成:

BA

[xy] = B[xy] [xy] = B1[xy]

剩下的问题就是:

AA

这个问题就是一个加减偏移量的问题,所以看图就一目了然了。

齐次坐标系与平移

引入齐次坐标的好处之一是可以使用矩阵表达平移:


坐标系变换

所以AA之间的变换可以用这么一个矩阵变换来完成。

追溯过程


坐标系变换

将坐标系B的基向量定位到坐标系A’中,得到向量b1A,b2A,所以从坐标系B追溯到坐标系A’的矩阵B = [b1Ab2A]AA的平移矩阵T100010TxTy1

故,将坐标系B中的点p(xB,yB)追溯到坐标系A中可以用下面的矩阵变换表示:

1). 将坐标变换到坐标系A’:

[xAyA]=B[xByB]

2). 将坐标变换到坐标系A中:

[xAyA]=T[xAyA]

综合起来就是:

[xAyA]=TB[xByB]

反过来,AA的平移矩阵T100010TxTy1,从坐标系A’追溯到坐标系B的矩阵A =B1

故,将坐标系A中的点p(xA,yA)追溯到坐标系中B中可以用下面的矩阵变换表示:

[xByB]=AT[xAyA] =(TB)1[xAyA]

矩阵变换:坐标系变换 or 位置变换


坐标系变换

站在不同的角度看同一个矩阵变换Bx⃗ 

1). 位置变换:

A坐标系中:

向量OP=[22] , 向量b1=[21]b2=[11], 令矩阵B = [b1b2],则矩阵变换Bx⃗ 会将OP变到OP

2). 坐标系变换:

B坐标系中:

向量OP=[22]

A坐标系中:

向量b1=[21]b2=[11] , 令矩阵B = [b1b2],则矩阵变换Bx⃗ 会将OP从坐标系B变到坐标系A。

总结

于是,对任意坐标向量x⃗ ,矩阵变换的组合M1M22M3...Mn 作用于x⃗ 存在两种解释。

x=M1M22M3...Mnx⃗ 的两种解释:

1). 坐标系不变,位置变换:

M1M22M3...Mn看作从右到左依次作用的矩阵变换。首先Mn变换, 将坐标向量x⃗ 变换到了xn1=Mnx⃗ ,接着是Mn1变换,将坐标向量xn1变换到了xn2=Mn1xn1…。所有的中间结果都是同一个坐标系中的坐标向量,所有的变换都是针对同一个坐标系的变换。

2). 位置不变,坐标系变换:

M1M22M3...Mn看作从左到右依次作用的矩阵变换。首先M1变换,将M1坐标系中的坐标向量x1转换为起始坐标系中的向量xx=M1x1,然后是M2变换,将M2坐标系中的坐标向量x2转换成M1坐标系中的坐标向量x1x1=M2x2…最后是Mn变换,将Mn坐标系中的坐标向量x⃗ 转换成Mn-1坐标系中的坐标向量xn1xn1 =Mnx⃗  。所有的中间结果都是不同坐标系中的坐标向量,且坐标向量的绝对位置没有改变(想象该点被一个钉子钉住)。从Mn坐标系的坐标向量x⃗ 依次与MnMn1...M3M2M1矩阵相乘最终转换到起始坐标系对应的坐标向量x的过程就是一系列前面提到过的追溯过程

相关文章: