2014-01-14 246 views
1

我从一个坐标系和一个沿着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] 

我究竟会如何将这些点到原来的坐标系? 我知道这涉及翻译和旋转,当我看到我的问题时,我只能找到翻译和旋转的情况分开,而没有一个是两者的组合。

旋转变换的工作原理是什么?如果我已经知道它围绕X轴旋转A度并且围绕Y轴旋转B度怎么办?那么我可以在那种情况下做简单的触发来追踪这个值吗?或者是不是那么简单,我必须围绕它必须旋转的轴旋转它,以便匹配回原始坐标系?

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

请让我知道,如果我的措辞不清楚,这个三维问题是非常难以形象化我似乎无法弄清楚如何编写所有的触发器,并希望以数学方式尝试它...但如果你偶然知道一个更简单的解决方案,那么更直截了当的建议吧!

+1

我们可以简化问题吗?也许:“给定由原点O1和3个正交单位向量X1,Y1和Z1(因此Z1 = X1 x Y1)定义的坐标系中的一个点,如何在由O2,X2给出的另一个坐标系中表示该点,Y2和Z2(其中X2,Y2和Z2也定义了右手正交归一基)?“如果您提出类似的问题,我们不必深入了解您的用例的细节,这个问题可能会帮助其他读者。这是否接近你所需要的? –

+0

是的,我相信这就足够了。 – Niseonna

回答

2

回答问题的削减版本(见注释):

在通过原点O1给定的坐标系中表达,与轴矢量A点X1Y1Z1具有坐标P=(x1, y1, z1)在于坐标系统。类似地,在原点O2和轴向量X2,Y2Z2的第二坐标中,相同的点被表示为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 ] 

让我们分别称之为每侧M1M2矩阵,使用原点作为列向量,并调用列点向量p1p2。如果每个系统的坐标轴是线性独立的,那么M1和M2是可逆

O1 + M1 p1 = O2 + M2 p2 

:然后我们就可以编写前面的方程。如果他们是orthogonal,那么每个的倒数就是它的转置!所以我们得到:

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

您可以阅读基础here的变化更一般的治疗方法,但我想我带下来的治疗将让你编写代码更快。