我从一个坐标系开始,沿 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 问题很难想象,我似乎无法弄清楚如何为它编写所有的三角函数,并想在数学上尝试......但是如果你通过有机会知道一个更简单的解决方案,更直接,请提出建议!
回答问题的精简版(见评论):
在由原点给出的坐标系中表示的点O1,轴向量为X1,Y1并在该坐标系中Z1具有坐标P=(x1, y1, z1)。类似地,在第二与原点坐标O2和轴矢量X2,Y2并且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)
让我们把矩阵每边M1和M2分别使用原点作为列向量,并调用列点向量p1和p2。那么我们可以把前面的等式写成:
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)
您可以在此处阅读更一般的基础更改处理,但我认为我的精简处理将使您更快地编写代码。