我已经为旋转向量和方向向量都实现了监听器,尽管我知道它们已经过时了,但我想测试一下两者的效果。
我知道旋转向量是一种融合传感器,也是推荐使用的,但根据它的数据,北方(通过getOrientation(rotationMatrix,value)返回的value[0] 值为0)与方向传感器返回的北方值不匹配。我还从Playstore下载了其他应用程序进行了比对,发现方向传感器的值更接近于它们的值。
此外,很多时候我的方位角值(来自旋转向量的getOrientation的value[0])会突然飙升,并在-180到180之间震荡。
另外,"getRotationMatrix(float[] R, float[] I, float[] gravity, float[] geomagnetic)" 的结果与旋转向量相同。
我希望确定手机的Y轴与指向北方的向量之间的角度,这是我的初始实现。请提供建议。
我知道旋转向量是一种融合传感器,也是推荐使用的,但根据它的数据,北方(通过getOrientation(rotationMatrix,value)返回的value[0] 值为0)与方向传感器返回的北方值不匹配。我还从Playstore下载了其他应用程序进行了比对,发现方向传感器的值更接近于它们的值。
此外,很多时候我的方位角值(来自旋转向量的getOrientation的value[0])会突然飙升,并在-180到180之间震荡。
另外,"getRotationMatrix(float[] R, float[] I, float[] gravity, float[] geomagnetic)" 的结果与旋转向量相同。
public final void onSensorChanged(SensorEvent event)
{
float rotationMatrix[];
switch(event.sensor.getType())
{
.
.
.
case Sensor.TYPE_ROTATION_VECTOR:
rotationMatrix=new float[16];
mSensorManager.getRotationMatrixFromVector(rotationMatrix,event.values);
determineOrientation(rotationMatrix);
break;
case Sensor.TYPE_ORIENTATION:
sensorZValue.setText(""+event.values[0]); //rotation about geographical z axis
sensorXValue.setText(""+event.values[1]); //rotation about geographical x axis
sensorYValue.setText(""+event.values[2]); //rotation about geographical y axis
}//switch case ends
}
private void determineOrientation(float[] rotationMatrix)
{
float[] orientationValues = new float[3];
SensorManager.getOrientation(rotationMatrix, orientationValues);
double azimuth = Math.toDegrees(orientationValues[0]);
double pitch = Math.toDegrees(orientationValues[1]);
double roll = Math.toDegrees(orientationValues[2]);
sensorZValue.setText(String.valueOf(azimuth)); //rotation about geographical z axis
sensorXValue.setText(String.valueOf(pitch)); //rotation about geographical x axis
sensorYValue.setText(String.valueOf(roll)); //rotation about geographical y axis
}
我希望确定手机的Y轴与指向北方的向量之间的角度,这是我的初始实现。请提供建议。