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 回答