我正在使用一艘太空飛船模擬器,並且在兩個空間物體之間面對弧線時遇到問題。 每個對象都具有定義如下的旋轉矩陣:計算兩個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