我要做的是设置一个相对坐标系。它的作用是取点A的XYZ坐标。然后它应该在B点上转换该位置以获得C点的位置,B点可以在所有三个轴上旋转和平移,但A点只能平移,不会旋转。
基本上发生的事情是你有2个矩形,一个左下角在原点,另一个左下角是B点。如果在右上角一角第一个矩形是A点,然后在第二个矩形的右上角角是C点,无论第二个矩形如何旋转或平移,C点总是在右上角第二个矩形但是如果A点移动到右下角手角,那么C点将始终位于第二个矩形的右下角角落。
我已多次尝试评估正确的表达方式以及我想到的结果。我有一些变化:
X':Xcos(音高) - Zcos(音高)+ Xcos(偏航)+ Ysin(偏航)+ X.pointB
Y':Ycos(偏航)+ Xsin(偏航)+ Ycos(滚动)+ Zsin(滚动)+ Y.pointB
Z':Ysin(roll)+ Zcos(roll)+ xsin(pitch)+ Zcos(pitch)+ Z.pointB
等式中的XYZ是A点的坐标, Pitch,Yaw和Rolls是第二个矩形的角度(以度为单位)。
答案 0 :(得分:3)
将旋转和翻译一起表示的常用方法是使用homogeneous coordinate vectors和4x4 transformation matrices。通过矩阵乘以矢量同时执行旋转和平移;并且乘以两个矩阵为您提供了一个新的矩阵,它可以按顺序执行这两个操作,这就是您想要解决的问题。这是基本的计算机图形数学(但它也适用于几何和物理......)。
以这种方式表示向量和矩阵可能看起来多余甚至浪费,但它使数学和编程变得更简单。一旦你理解了数学运算的方式,并且有了工作代码,你可以根据需要返回并优化冗余数据;但是,你可能会发现它不值得努力。
你问题中的公式不起作用 - 你需要决定你想要应用偏航,俯仰和滚动的顺序,生成适当的X-,Y-和Z- rotation matrices,然后相乘它们按顺序排列在一起(链接为您提供了各个旋转矩阵以及组合旋转矩阵的示例)。
translation matrix比计算旋转矩阵简单得多。乘法平移矩阵基本上只是将平移向量加在一起,但是当轮换进入图片时,您会看到系统的优势:翻译和旋转的顺序很重要,而矩阵可以很容易地得到东西每次都是正确的。
最后,要真正解决您的问题:
请注意,所需的唯一三角法是采用原始滚动/俯仰/偏转角度的sin()
和cos()
。