我正在使用一艘太空飞船模拟器,并且在两个空间物体之间面对弧线时遇到问题。 每个对象都具有定义如下的旋转矩阵:计算两个3d旋转矩阵之间的面向弧
//Top row
rotation[0][0] = cos(pitch)*cos(yaw);
rotation[0][1] = -sin(yaw)*cos(pitch);
rotation[0][2] = sin(pitch);
//Middle row
rotation[1][0] = cos(yaw)*sin(pitch)*sin(roll) + sin(yaw)*cos(roll);
rotation[1][1] = -sin(yaw)*sin(pitch)*sin(roll) + cos(yaw)*cos(roll);
rotation[1][2] = -cos(pitch)*sin(roll);
//Bottom row
rotation[2][0] = -cos(yaw)*sin(pitch)*cos(roll) + sin(yaw)*sin(roll);
rotation[2][1] = sin(yaw)*sin(pitch)*cos(roll) + cos(yaw)*sin(roll);
rotation[2][2] = cos(pitch)*cos(roll);
除了具有XYZ坐标。
使用这些信息,我需要能够决定object1和object1之间的90度弧面:前进,右舷,左舷,后舷(上)和腹侧(下) 我试图使用以下公式:
arc = acos(sum(a*b)/(sqrt(sum(a * a)) * sqrt(sum(b * b))))
其中| a |是| object2 |的矢量方向 - | object1 |和| b |是第1行(向前弧),第2行(右舷弧)或第3行(向上弧)。我做错了什么,因为它没有按预期行事。 所以我在寻求帮助,找到我犯的错误。
P.S.偏航,俯仰和滚转以度(0-360)存储,并通过乘以PI/180.0转换为拉德。
风格提示,从一眼看着代码:不要计算每行的正弦和余弦;计算一次并将它们存储在局部变量中。 – 2014-09-19 19:39:57
*点头*我真的在代码中做,我只是为了清楚说明我在做什么。 :) – 2014-09-19 20:03:30
这个问题似乎是题外话题,因为它是关于[Mathematics.SE]。在Math.SE中询问该方法,然后如果在将其转换为'C'代码后遇到问题,请在此处输入。 – ja72 2014-09-19 21:08:41