【问题标题】:Transform rotation matrix about one coordinate system to another将关于一个坐标系的旋转矩阵变换到另一个坐标系
【发布时间】:2011-05-20 16:20:58
【问题描述】:

我在世界坐标系 (wcs) 中有一个用中心点向量和 3 个正交方向单位向量定义的平面,设置为 3x3 矩阵。我已经确定了一个关于这个平面坐标系的旋转矩阵,现在我想找出与这个旋转相匹配的世界坐标系中对应的旋转矩阵。那就是我想要一个新的旋转矩阵,它可以应用于 wcs 中的对象,以匹配我计算出的相对于我的平面的旋转。

我想取平面矩阵的逆矩阵(由于我的平面是正交的,所以用转置操作代替)并乘以旋转矩阵,得到世界坐标系中的等效旋转。这似乎是错误的,因为:

我的飞机是来自 wcs 的小扰动加上绕 y 轴旋转 90 度 大致: 0 0 -1 0 1 0 1 0 0 并且围绕它的旋转是单位矩阵的一个小扰动。我希望这个小旋转映射到 wcs 中的一个小旋转,但不知何故,我也从扔在那里的飞机上得到了 90 度的旋转。我的数学哪里出错了,正确的方法是什么?

【问题讨论】:

  • 我刚刚写完关于如何在线性代数中改变坐标系的解释,然后我更仔细地研究了你的问题。围绕除原点以外的点定义的线性运算(例如旋转)不再是 线性运算,而是仿射 运算。因此必须不是用矩阵来表示,而是用一个向量一个矩阵来表示。 (取任意向量,乘以该矩阵,然后将固定向量添加到结果中。)这是一个重大的复杂问题,我没有时间解决我的答案。对不起。

标签: math coordinate-systems


【解决方案1】:

你的解释不够清楚,我无法弄清楚你做错了什么,所以我只告诉你如何从头开始。按照这些指示,您应该能够弄清楚如何解决您的问题。

弄清楚矩阵坐标变换的关键是非常非常清楚什么是线性变换,什么是矩阵,什么是关系。我将从基础开始。我将从重复你知道的东西开始,所以请耐心等待。我只需要确保我们在术语上是一致的。

线性变换是一个函数F,它将一个向量空间映射到另一个向量空间(通常是同一个)。

给定一个有限维向量空间和一个基,您可以在该向量空间中以独特的方式写下任何向量作为一组关联坐标。你得到的代表很大程度上取决于基础。我们通常把它写成竖列。

给定两个有限维向量空间,以及一对关联的基ab,以及它们之间的线性变换F,我们可以写出如下矩阵。

  1. 对于a 中的每个a_i,在基础b 中写下F(a_i) 作为一列。
  2. 连接这些列以获得矩阵。

这个操作很关键!

因此,矩阵取决于线性变换和一对基选择。我将其表示为M = F<sub>a</sub><sup>b</sup>

函数组合用矩阵乘法表示。那是F<sub>a</sub><sup>b</sup> * G<sub>b</sub><sup>c</sup> = (F o G)<sub>a</sub><sup>c</sup>。 (矩阵乘法定义的全部意义在于使这一点成为现实。)

现在,在您的情况下,您有一个从 R<sup>3</sup>R<sup>3</sup> 的线性变换“F”。您将它表示在基础“b”中,并且您希望它表示在基础“a”中。那就是您拥有F<sub>b</sub><sup>b</sup> 并希望拥有F<sub>a</sub><sup>a</sup>。让I 成为恒等线性变换,它只是将它发送给它自己。然后F<sub>a</sub><sup>a</sup> = I<sub>a</sub><sup>b</sup> * F<sub>b</sub><sup>b</sup> * I<sub>b</sub><sup>a</sup>,您需要做的就是找出矩阵I<sub>a</sub><sup>b</sup>I<sub>b</sub><sup>a</sup> 是什么。

现在您有了坐标系a(通常坐标)和b。你知道b 在坐标系a 中写的是什么。按照上面的说明用矩阵表示线性算子(我说的那个很关键),你可以立即写下I<sub>b</sub><sup>a</sup>。矩阵I<sub>a</sub><sup>b</sup> 是这个矩阵的逆矩阵。

请注意,许多人对I<sub>a</sub><sup>b</sup> 与他们猜想的相反这一事实感到困惑。但这是很容易体验的东西。我强烈建议您实际尝试一下。起床。转 90 度。请注意,当你转向一个方向时,看起来世界会转向另一个方向。您正在经历这样一个事实,即当您的坐标系以一种方式旋转时,事物的表示会相反(即以另一种方式旋转)。


编辑:线性运算符的解释是正确的,但是所述问题涉及围绕不是原点的点的旋转。所有线性算子都将原点发送到原点。这种操作可以将origin发送到其他地方。因此,我们需要从线性函数转向仿射函数。但幸运的是,仿射函数并不是什么大问题。它们实际上是一个常数点加上一个线性部分。这不是由MxM 矩阵表示的函数,而是以p + Mx 形式的函数,p 一个点和M 一个矩阵。

首先,引入一个重要但看似武断的区别非常有帮助。一个点就是一个点。向量是点之间的偏移量,可以表示为一个点减去另一个点。点和向量确实是不同种类的东西,我们应该以不同的方式看待它们。

这就是我们做出区分的原因。如果F 是一个点上的仿射函数,那么F 是一个线性 函数,将向量映射到向量。 (常数位同时移动向量的起点和终点,但不会改变它们彼此之间的偏移量。)这让我们可以轻松地将仿射函数的常数部分和线性部分分开。

在处理仿射函数时,没有特别的理由只处理以原点为中心的坐标系,而且通常有充分的理由不这样做。因此,坐标系由向量空间的点p 和基a 确定。 (稍微复杂一点,但不多。)在该坐标系中,任意点q 可以映射到矢量q - p,然后该矢量在基础a 中表示。同样,习惯上将这些坐标写成一列。

现在如果F 是一个仿射函数,那么您需要做的就是找出F 的线性部分,并添加F 发送坐标系原点的位置。

如果您要在一个坐标系(p, a) 中获取仿射函数并将其转换为另一个(q, b),您只需将线性位从基础a 转换为基础b,然后找出 F(p) 的结果。

所以仿射函数基本上是线性函数,其中包含有关原点所在位置的信息。大部分工作都花在线性函数的矩阵表示上,但你不能忘记弄清楚原点会发生什么。

【讨论】:

  • @MattTheCodeMonkey - 我添加了仿射函数的解释。希望这不会让你的眼睛呆滞。我放在这里的材料通常需要几天时间才能正确地教给学生。
猜你喜欢
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 2021-03-30
相关资源
最近更新 更多