1

デバイスがある程度回転すると、単純な立方体は同じ量だけ反対方向に回転する必要があります。たとえば、デバイスが右に 45 度回転する場合、立方体は左に 45 度回転する必要があります。または、ピッチが 30 度の場合、立方体は X 軸を中心に -30 度回転する必要があります。ヨーが 10 度の場合、立方体は Z 軸を中心に -10 度回転する必要があります。私は .getRotationMatrixFromVector に続いて getOrientation を次のように使用しました。

if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) {

     SensorManager.getRotationMatrixFromVector(
             mRotationMatrix , event.values);
     SensorManager.getOrientation(mRotationMatrix, orientationVals);
     azimuthVal =  (Math.round((Math.toDegrees(orientationVals[0]))*100.0)/100.0);
     pitchVal= (Math.round((Math.toDegrees(orientationVals[1]))*100.0)/100.0);
     rollVal = (Math.round((Math.toDegrees(orientationVals[2]))*100.0)/100.0);}

しかし、ピッチの変化に伴う問題はロールに影響し、その結果、デバイスが X 軸を中心に回転すると、ピンチ値が変化します -> ロールが変化します -> キューブは X だけでなく Y も回転します。それは必要ありません。

私はインターネットを見回しており、多くの人がクォータニオンを解決策と呼んでいますが、デバイスが軸に沿って回転する角度を知る必要があるため、特定のアプリケーションにクォータニオンを適用するにはどうすればよいですか。

4

1 に答える 1

0

ジンバル ロックは、回転マトリックスから (オイラー) 回転角度を抽出したい場合に発生します。基本的に特定の回転では、回転マトリックス コンポーネントと回転角度の間の方程式の自由度が失われ、実際の回転角度は回復できません。

したがって、コードでは、 SensorManager.getOrientation(mRotationMatrix, orientationVals); で発生する可能性があります。

回転角度を抽出する前に、何らかの方法で問題を解決する必要があります。これは、ここで説明されているように、クォータニオンのコンポーネントを変更することで実行できます。

http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToEuler/

于 2015-09-23T09:45:38.993 に答える