クォータニオン回転を 3D 回転 (Roll Pitch Yaw) に変換し、ジンバル ロックの問題も解決する (ジンバル ロック角度で NaN を返さない) 関数 (できれば php で記述) はどこにありますか? ありがとう
質問する
2181 次
1 に答える
0
これは PHP ではなく、C++ です。PHP への移行は簡単なはずです。値が NaN になるため、rotateX、rotateY、またはrotateZ のいずれかが割り当てられていない無効/ジンバル ケースが見られることがあります。
//Our Quaternion is defined by qx,qy,qz,qw
double qx;
double qy;
double qz;
double qw;
double rotateXa0 = 2.0*(qy*qz + qw*qx);
double rotateXa1 = qw*qw - qx*qx - qy*qy + qz*qz;
double rotateX = 0.0;
if (rotateXa0 != 0.0 && rotateXa1 != 0.0)
rotateX = atan2(rotateXa0, rotateXa1);
double rotateYa0 = -2.0*(qx*qz - qw*qy);
double rotateY = 0.0;
if( rotateYa0 >= 1.0 )
rotateY = M_PI/2.0;
else if( rotateYa0 <= -1.0 )
rotateY = -M_PI/2.0;
else rotateY = asin(rotateYa0);
double rotateZa0 = 2.0*(qx*qy + qw*qz);
double rotateZa1 = qw*qw + qx*qx - qy*qy - qz*qz;
double rotateZ = 0.0;
if (rotateZa0 != 0.0 && rotateZa1 != 0.0)
rotateZ = atan2(rotateZa0, rotateZa1);
于 2013-12-05T00:22:09.443 に答える