我试图建立一个简单的增强现实应用程序,所以我开始使用传感器数据.
根据该线程(Android compass example)和示例(http://www.codingforandroid.com/2011/01/using-orientation-sensors-simple.html),使用Sensor.TYPE_ACCELEROMETER和Sensor.TYPE_MAGNETIC_FIELD计算方向并不合适.
所以我不能得到“好”的价值. azimut值根本没有任何意义,所以如果我只是把手机上移,价值就会变化极大.即使我只是旋转手机,这些值并不代表手机的方向.
有人有想法,谁来按照给定的例子来提高价值质量?
解决方法
您使用这个示例应用程序是什么样的方向?从编写的这个代码,支持的唯一方向是纵向或平面在表上,这取决于设备. “好”是什么意思?
在旋转设备时,值不是“好”,正常情况下,设备坐标系应该在纵向工作,或平坦我不知道(Y轴垂直沿着屏幕向上,Z轴指出屏幕来自屏幕中心,X轴垂直于Y轴沿屏幕右侧).这样,旋转设备将不会旋转设备坐标系,您将不得不重新映射它.
但是,如果您想以纵向方向显示设备的标题,那么这是一段对我有用的代码:
@Override public void onSensorChanged(SensorEvent event) { // It is good practice to check that we received the proper sensor event if (event.sensor.getType() == Sensor.TYPE_ROTATION_VECTOR) { // Convert the rotation-vector to a 4x4 matrix. SensorManager.getRotationMatrixFromVector(mRotationMatrix,event.values); SensorManager .remapCoordinateSystem(mRotationMatrix,SensorManager.AXIS_X,SensorManager.AXIS_Z,mRotationMatrix); SensorManager.getOrientation(mRotationMatrix,orientationVals); // Optionally convert the result from radians to degrees orientationVals[0] = (float) Math.toDegrees(orientationVals[0]); orientationVals[1] = (float) Math.toDegrees(orientationVals[1]); orientationVals[2] = (float) Math.toDegrees(orientationVals[2]); tv.setText(" Yaw: " + orientationVals[0] + "\n Pitch: " + orientationVals[1] + "\n Roll (not used): " + orientationVals[2]); } }
你会得到标题(或方位角):
orientationVals[0]