私の現在のプロジェクトでは、3D回転行列から方向ベクトルの角度距離を求める必要があります。与えられた3D回転行列と3D方向ベクトルが角度差を見つける
これを行うと思われるレガシーコードはバグであり、動作していません。私の問題を理解するのに役立つかもしれないので、私はそれを共有したいと思っています。
double angularDiff(bool isSideAngle, const Matrix& in3DRotationMatrix, const Vector& in3DDirection)
{
// Unit vector convertion
in3DDirection.Normalize();
// Simple matrix vector multiplication
Vector newDir = in3DRotationMatrix*in3DDirection;
// Code suppose to find side angle difference
// or forward angle difference according to boolean parameter
if (isSideAngle)
result = atan2(newDir[1], newDir[0]);
else
result = atan2(newDir[2], newDir[0]);
return result;
}
上記の方法に欠けているものは何ですか?または私のアプローチを完全に変更する必要がありますか?方向ベクトルを与えると、回転行列からX方向とY方向の角度距離を求める最良の方法は何ですか?
回転行列(座標系)にローカルなベクトルの方向を表す2つの角度があります。どの角度をお望みですか?あるいは、回転行列は3つの直交する方向ベクトルを定義し、[2つのベクトルの間の角度]を計算することによって、それぞれのベクトルの角度を見つけることができます(http://stackoverflow.com/questions/35438395/calculating-small-大 - 中 - 大 - ベクトル - 三次元)。 – ja72
@ ja72私はそれらの両方が欲しいです。新しい関数の上のコードと同様に、createにはパラメータbool isSideAngleがあります。このブール値によれば、私はサイドアングルまたはフォワードアングルを計算します。 –
ワールド座標またはローカル座標で 'in3DDirection'ですか? – ja72