デバイスがある程度回転すると、単純な立方体は同じ量だけ反対方向に回転する必要があります。たとえば、デバイスが右に 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 も回転します。それは必要ありません。
私はインターネットを見回しており、多くの人がクォータニオンを解決策と呼んでいますが、デバイスが軸に沿って回転する角度を知る必要があるため、特定のアプリケーションにクォータニオンを適用するにはどうすればよいですか。