API 演示 -> 图形 ->指南针
它只能正常工作,直到您不更改设备自然方向。在大多数手机中是纵向的,而大多数 10 英寸平板电脑是横向的。如果您进行更改,则需要将其旋转 90 度。我希望看到该系统的 3D 修复。
100% 肯定需要使用remapCoordinateSystem()方法。
我想看看(代码)如果我能看到如何计算这些轴映射(理论数学)的解释,那就太好了。
我试图理解,但我忘记了所有线性代数。
在这里它说为什么我们必须使用,但没有说明如何使用!
float R[] = new float[9];
// X (product of Y and Z) and roughly points East
// Y: points to Magnetic NORTH and tangential to ground
// Z: points to SKY and perpendicular to ground
float I[] = new float[9];
boolean success = SensorManager.getRotationMatrix(R, I, mGravity, mGeomagnetic);
似乎这些坐标在这个位置: - 设备在桌子上说(x 和 y 轴在桌子上)
只有且仅当
getWindowManager().getDefaultDisplay().getRotation() == Surface.ROTATION_0
问题是如何完成此代码:-那些案例分支
switch (mScreenRotation) {
case Surface.ROTATION_0:
Log.v("SurfaceRemap", "0 degree");
axisX = SensorManager.AXIS_X;// is this valid?
axisY = SensorManager.AXIS_Y;// is this valid?
break;
case Surface.ROTATION_90:
Log.v("SurfaceRemap", "90 degree");
// examples says remapCoordinateSystem(inR, AXIS_Y, AXIS_MINUS_X, outR);
axisX = SensorManager.AXIS_Y;
axisY = SensorManager.AXIS_MINUS_X;
break;
case Surface.ROTATION_180:
Log.v("SurfaceRemap", "180 degree");
break;
case Surface.ROTATION_270:
Log.v("SurfaceRemap", "270 degree");
break;
default:
Log.v("SurfaceRemap", "don't know the mScreenRotation value: "+mScreenRotation+" you should never seen this message!");
break;
}
boolean remapped = SensorManager.remapCoordinateSystem(R, axisX, axisY, R);
float orientation[] = new float[3];
SensorManager.getOrientation(R, orientation);// All three angles above are in radians and positive in the counter-clockwise direction.
inclination = SensorManager.getInclination(I);
编辑:我写了一个小测试应用程序,它在屏幕上显示屏幕旋转:0、90、270 度(现在不能变成 180 度)
看来,如果 Rotation 0 不变(axisX = SensorManager.AXIS_X;axisY = SensorManager.AXIS_Y;
),则 90 度应该是:
axisX = SensorManager.AXIS_MINUS_Y;
axisY = SensorManager.AXIS_X;
比谷歌文档说的值错误!问题在哪里?!
X 定义为向量积 YZ(它与设备当前位置的地面相切,大致指向东方)。
Y 在设备当前位置与地面相切,并指向磁北极。
Z指向天空并垂直于地面。
看上面的电话!我想从左到右,后置摄像头接地。
X 定义为向量积 YZ(它与设备当前位置的地面相切,大致指向西)。
Y 在设备当前位置与地面相切,并指向磁北极。
Z指向地球的中心并且垂直于地面。
values[0]
:方位角,绕 Z 轴旋转。
values[1]
:俯仰,绕X轴旋转。
values[2]
:滚动,绕 Y 轴旋转。
电话应该如何?
最后我想有像飞机这样的角度值。我的电话(我)前往北方:(偏航是方位角)
if ScreenRotation = 0 degree
Pitch axis = -orientationAxisX = rotationAxisX
Roll axis = orientationAxisY = rotationAxisY
Yaw axis = orientationAxisZ = -rotationAxisZ