gpt4 book ai didi

android - 使用 Sensor.TYPE_MAGNETIC_FIELD 发现的方位比 Sensor.TYPE_ORIENTATION 不稳定得多

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:20 24 4
gpt4 key购买 nike

我正在做一些增强现实应用程序,我需要方位角来计算屏幕上的某个对象位置。我尝试使用 Sensor.TYPE_ORIENTATION 获取方向数据,由于它已被弃用,我尝试了 Sensor.TYPE_MAGNETIC_FIELD。我的问题是,与 Sensor.TYPE_ORIENTATION 相比,使用 Sensor.TYPE_MAGNETIC_FIELDSensorManager.getOrientation 获得的值非常不稳定,这使得我的对象跳跃一点在屏幕上(当不移动值在一个范围内跳跃时说 [azimuth-5 azimuth+5] 而它几乎不随着 Sensor.TYPE_ORIENTATION 移动)。

传感器.TYPE_ORIENTATION

public void onSensorChanged(SensorEvent event)
{
if(event.sensor.getType() == Sensor.TYPE_ORIENTATION)
{
newAzimuth = (event.values[0] + 360)%360;
azimuth = (float) ((newAzimuth * kFilteringFactor) + (azimuth * (1.0 - kFilteringFactor)));
}
}

传感器.TYPE_MAGNETIC_FIELD

public void onSensorChanged(SensorEvent event) {
switch (event.sensor.getType()) {
case Sensor.TYPE_MAGNETIC_FIELD:
mags = event.values.clone();
break;
case Sensor.TYPE_ACCELEROMETER:
accels = event.values.clone();
break;
}
if (mags != null && accels != null) {
SensorManager.getRotationMatrix(R, I, accels, mags);
SensorManager.remapCoordinateSystem(R, SensorManager.AXIS_X,
SensorManager.AXIS_Z, remappedR);
SensorManager.getOrientation(remappedR, orientation);
newAzimuth = (float) Math.round(Math.toDegrees(orientation[0]));
newAzimuth = (newAzimuth + 360)%360;
azimuth = (float) (newAzimuth * kFilteringFactor) + (azimuth * (1.0f - kFilteringFactor));
}
}

最佳答案

它仅在使用 SensorManager.DELAY_FASTER 时发生。使用 SensorManager.SENSOR_DELAY_GAME 值更稳定...

关于android - 使用 Sensor.TYPE_MAGNETIC_FIELD 发现的方位比 Sensor.TYPE_ORIENTATION 不稳定得多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6676377/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com