我正在使用Rotation Vector
传感器试图跟踪用户移动的X
轴(又称手腕运动)周围0-360度的旋转度。
我正在使用SensorManagers
getOrientation进行偏航,俯仰和滚动
float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrixFromVector(rotationMatrix, sensorData.getValues());
float[] orientation = new float[3];
SensorManager.getOrientation(rotationMatrix, orientation);
表盘朝上,它给出了我想要的0度,但是当我旋转时,我只获得+/- 90度的增量。向左旋转给我+90度,向右旋转给我-90度。我继续旋转让我说从+90度我开始得到负度,所以当手表面朝下(180度)时再次显示0
。使用90度增量将难以准确地获得实际旋转角度。
有没有办法从+/- 90度增量到0-360度?
答案 0 :(得分:0)
您可以使用z
旋转值来确定手表是朝上还是朝下。这决定了您正在查看的视角,并为您提供了4个象限,而不是您开始使用的2个象限。
如果z
为正:观看正面朝上。如果z
为负数,则面朝下。
从这里,您可以创建转换坐标系。
如果手表朝上,则坐标为90+x_rotation
。由于向右旋转得到[-90,0],向左旋转得到[0,90],这给出[-90+90,90+90] = [0, 180]
度,这就是我们期望手表朝向手腕的方式。
如果手表朝下,则坐标为270+x_rotation
。象限3给出负值90,使得值的范围为[270+-90,270] = [180,270]
。同样,象限4的正值为90,创建了[270,90+270]
的范围。所以面朝下的手表会给[180, 360]
。
组合起来,我们得到完整的[0,360]
设备旋转范围。
希望这有帮助!