我从一个坐标系开始,沿Z轴的一个点由P1 = [0 0 h]给出 由P2 = [h * tan(A),h * tan(B),0]给出的XY平面中的一个点 然后我求解垂直于从P2到P1的矢量的平面的方程,因此,Vector = 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]
我将如何将这些点转换为原始坐标系? 我知道有一个翻译和一个轮换,当我解决我的问题时,我只能找到翻译和旋转的案例分开,而没有一个是两者的组合。
旋转变换究竟如何运作?如果我已经知道它绕X轴旋转A度并绕Y轴旋转B度怎么办?那么我可以在这种情况下做简单的触发来追溯值吗?或者它不是那么简单,我必须围绕它必须旋转的轴旋转才能匹配回原始坐标系?
MATLAB中是否有一个函数可以插入,其中3个点定义一个坐标系,另外3个点用于第二个坐标系,然后给出转换矩阵?
请告诉我,如果我的措辞不清楚,这个三维问题是如此难以想象我似乎无法弄清楚如何为它编写所有的三角形并且想要以数学方式尝试...但是如果你偶然知道一个更简单的解决方案,那就更直接了,请提出建议!
答案 0 :(得分:3)
回答问题的缩减版本(见评论):
由原点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
将它们设置为彼此相等,并以矩阵形式写出:
[ 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 ]
让我们分别调用每一侧M1
和M2
的矩阵,使用原点作为列向量,并调用列点向量p1
和p2
。然后我们可以将前面的等式写成:
O1 + M1 p1 = O2 + M2 p2
如果每个系统的坐标轴线性无关,则M1和M2是可逆的。如果另外它们是orthogonal,那么每个的反转就是它的转置!所以我们得到:
p1 = Transpose[M1] (O2 - O1 + M2 p2) and similarly going the other way
p2 = Transpose[M2] (O1 - O2 + M1 p1)
你可以阅读基础here变化的更一般的处理方法,但我认为我的条带化处理可以让你更快地编写代码。