【发布时间】:2018-08-05 03:11:58
【问题描述】:
我正在尝试将使用旋转矢量传感器类型时返回的 5 个值转换为滚动、方位角和俯仰角。
我使用的代码如下。
@Override
public void onSensorChanged(SensorEvent event) {
double[] g = convertFloatsToDoubles(event.values.clone());
double norm = Math.sqrt(g[0] * g[0] + g[1] * g[1] + g[2] * g[2] + g[3] * g[3]);
g[0] /= norm;
g[1] /= norm;
g[2] /= norm;
g[3] /= norm;
double xAng = (2 * Math.acos(g[0])) * (180 / Math.PI);
double yAng = (2 * Math.acos(g[1])) * (180 / Math.PI);
double zAng = (2 * Math.acos(g[2])) * (180 / Math.PI);
}
private double[] convertFloatsToDoubles(float[] input)
{
if (input == null)
return null;
double[] output = new double[input.length];
for (int i = 0; i < input.length; i++)
output[i] = input[i];
return output;
}
问题是变量 xAng 和 yAng 返回的值似乎被限制在 80 - 280。
至于zAng(我认为是方位角),它的工作原理就像一个指南针,但是当它返回 0 时,它似乎与磁南偏了 12 度。
我认为我使用的数学有问题,但我不确定到底是什么。
Sensor.TYPE_ROTATION_VECTOR 的值定义为 here:
值[0]:x*sin(θ/2)
值[1]:y*sin(θ/2)
值[2]:z*sin(θ/2)
值[3]:cos(θ/2)
values[4]:估计的航向精度(以弧度为单位)(如果不可用,则为 -1)
【问题讨论】:
标签: java android math rotation quaternions