如何将一个 3d 笛卡尔坐标系中的坐标转换为另一个 3d 笛卡尔坐标系

Nis*_*nna 2 geometry algebra

我从一个坐标系开始,沿 Z 轴的一个点由 P1 = [0 0 h] 和 XY 平面中的一个点 P2 = [h*tan(A), h*tan(B), 0] 给出然后,我求解垂直于从 P2 指向 P1 的向量的平面的方程,因此,向量 = P1 - P2。我得到的平面方程如下:

X*h*tan(A)-Y*h*tan(B)+Z*h = 0。

现在我得到了相对于这个平面的四个点,这个新平面的原点与原始平面中的 P2 相同。

这四个点构成一个矩形,它们是:

[L*tan(C), L*tan(D), 0]
[L*tan(C), -L*tan(D), 0]
[-L*tan(C), -L*tan(D), 0]
[-L*tan(C), L*tan(D), 0]
Run Code Online (Sandbox Code Playgroud)

我将如何将这些点转换为原始坐标系?我知道这涉及到平移和旋转,当我查看问题时,我只能发现平移和旋转的情况是分开的,而没有一个是两者的组合。

旋转变换究竟是如何工作的?如果我已经知道它绕 X 轴旋转 A 度,绕 Y 轴旋转 B 度怎么办?在这种情况下,我可以做简单的触发来回溯该值吗?或者它不是那么简单,我必须围绕它必须旋转的轴旋转它才能匹配回原始坐标系?

MATLAB 中是否有一个函数,我可以插入 3 个点来定义一个坐标系,另外 3 个点为第二个坐标系,然后给我转换矩阵?

如果我的措辞不清楚,请告诉我,这个 3-D 问题很难想象,我似乎无法弄清楚如何为它编写所有的三角函数,并想在数学上尝试......但是如果你通过有机会知道一个更简单的解决方案,更直接,请提出建议!

Cod*_*key 7

回答问题的精简版(见评论):

在由原点给出的坐标系中表示的点O1,轴向量为X1Y1并在该坐标系中Z1具有坐标P=(x1, y1, z1)。类似地,在第二与原点坐标O2和轴矢量X2Y2并且Z2,相同的点表示P=(x2, y2, z2)。(注意坐标小写,点和向量大写)。

这实际上意味着:

P = O1 + x1 X1 + y1 Y1 + z1 Z1   and
P = O2 + x2 X2 + y2 Y2 + z2 Z2
Run Code Online (Sandbox Code Playgroud)

将这些设置为彼此相等,并将它们写成矩阵形式:

[ O11 ]   [ X11  X12  X13 ][ x1 ]   [ O21 ]   [ X21  X22  X23 ][ x2 ]
[ O12 ] + [ Y11  Y12  Y13 ][ y1 ] = [ O22 ] + [ Y21  Y22  Y23 ][ y2 ]
[ O13 ]   [ Z11  Z12  Z13 ][ z1 ]   [ O23 ]   [ Z21  Z22  Z23 ][ z2 ]
Run Code Online (Sandbox Code Playgroud)

让我们把矩阵每边M1M2分别使用原点作为列向量,并调用列点向量p1p2。那么我们可以把前面的等式写成:

O1 + M1 p1 = O2 + M2 p2
Run Code Online (Sandbox Code Playgroud)

如果每个系统的坐标轴线性无关,则 M1 和 M2 是可逆的。如果另外它们是正交的,那么每个的逆就是它的转置!所以我们得到:

p1 = Transpose[M1] (O2 - O1 + M2 p2)   and similarly going the other way
p2 = Transpose[M2] (O1 - O2 + M1 p1)
Run Code Online (Sandbox Code Playgroud)

您可以在此处阅读更一般的基础更改处理,但我认为我的精简处理将使您更快地编写代码。