同样的问题但更好地解释
这个问题被认为是正确的,但它完全没有,我用我的旧设备ZTE尝试了它并且大部分时间工作,但现在我有三星Galazy A5 2016并且它不起作用,在LG G3上都没有.
事情正在尝试使用Accelerometer,有些Sensors我必须能够检测到我在视频上制作的那两个动画中的任何一个.
有两个动作:
我让你来决定,并说服了我什么是更好的选择和EASIER一个做的,具有更好的我的意思是,在大多数设备的工作原理.
我的要求是像Google maps apps罗盘模式一样(点击时可以看到演示current location button twice):
compass模式下,地图始终旋转一个角度,以便bluedot arrow始终指向顶部屏幕.但我不知道如何计算正确的bearing距离azimuth, pitch, roll值.
public void onSensorChanged(SensorEvent sensorEvent) {
switch (sensorEvent.sensor.getType()) {
case Sensor.TYPE_ACCELEROMETER:
System.arraycopy(sensorEvent.values, 0, mAccelerometers, 0, 3);
break;
case Sensor.TYPE_MAGNETIC_FIELD:
System.arraycopy(sensorEvent.values, 0, mMagnetometers, 0, 3);
break;
default:
break;
}
float[] rotationMatrix = new float[9];
boolean success =
SensorManager.getRotationMatrix(rotationMatrix, null, mAccelerometers, mMagnetometers);
if (success) {
SensorManager.getOrientation(rotationMatrix, mOrientation);
float azimuth = Math.toDegrees(mOrientation[0]);
float pitch = Math.toDegrees(mOrientation[1]);
float roll = Math.toDegrees(mOrientation[2]);
} …Run Code Online (Sandbox Code Playgroud) 我想要的是一种位置的"磁性指纹".我使用MAGNETIC_FIELD传感器,如果我得到(不幸的是没有进一步说明)X,Y和Z轴的3个值.
问题是,当我旋转设备时值会改变,所以我猜3轴是相对于设备的.什么我需要的是让我得到同样的3个值,而无论该设备是如何旋转补偿装置的旋转.
我试图乘以旋转矩阵(我知道如何得到它),试图乘以倾角矩阵等等,但没有任何效果.无论我尝试什么,旋转设备时值仍会改变.
那么有谁知道如何做对吗?最好使用代码,因为我读了很多像'那么你必须使用旋转矩阵补偿它',但没有找到一个具体的工作实例.
我正在使用Google Maps Android API v2,我在地图上将我的设备位置显示为GoogleMap Marker.我有一个监听器(LocationServices.FusedLocationApi.requestLocationUpdates ...)附加到Map,以处理每个GPS位置的变化.每当我收到一个新位置时,我都会更新Marker(我的位置)以及地图上的Camera,几乎就像我开车时一样.
但是......我需要一些帮助才能使MAP 旋转和/或显示在我要移动的方向上.我的意思是,当我开车时,我需要旋转MAP,我可以在地图左侧看到我在现实生活中的左侧,所以右侧也是如此.由于MAP方向是静态的,Marker(Me)正在移动它,但大多数时候方向与我的汽车实时方向不匹配.
我应该怎么做地图才能实现这种视觉效果?
AR视图就像一个指南针,我有一个非常讨厌的问题.因此,当我以纵向握住手机(以便屏幕指向我的脸部)时,我remapCoordinateSystem会在按住它时将其调用为0.然后方位角(罗盘功能)是完美的,但是一旦我倾斜手机,方位角就会被毁坏,如果我向前弯曲,方位角会增加,如果我向后弯曲,它会减小.
我使用2个传感器来获取读数,Sensor.TYPE_MAGNETIC_FIELD和Sensor.TYPE_GRAVITY.
我使用的是一个非常基本的lowpassfilter,它是用alpha常量实现的,直接用于传感器的读取值.
这是我的代码:
float[] rotationMatrix = new float[9];
SensorManager.getRotationMatrix(rotationMatrix, null, gravitymeterValues,
magnetometerValues);
float[] remappedRotationMatrix = new float[9];
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X,
SensorManager.AXIS_Z, remappedRotationMatrix);
float results[] = new float[3];
SensorManager.getOrientation(remappedRotationMatrix, results);
float azimuth = (float) (results[0] * 180 / Math.PI);
if (azimuth < 0) {
azimuth += 360;
}
float pitch = (float) (results[1] * 180 / Math.PI);
float roll = (float) (results[2] * 180 / Math.PI);
Run Code Online (Sandbox Code Playgroud)
如你所见,这里没有魔力.当gravitymeterValues和magnetometerValues准备好使用时,我称这段代码.
我的问题是当我倾斜手机时如何阻止方位角疯狂?
我在Google Play商店,Compass上查了一个免费的应用程序并且它还没有解决这个问题,但我希望有一个解决方案.
我有两个解决方案: …