由于Qt不支持Android上的QCompass类, 我决定建立自己的罗盘应用程序。
我将所需的Java类翻译成c ++,用于使用加速器和磁力计传感器构建指南针应用程序。
您可以在getRotationMatrix java方法中找到以下代码段:
public static boolean getRotationMatrix(float[] R, float[] I,
float[] gravity, float[] geomagnetic) {
// TODO: move this to native code for efficiency
float Ax = gravity[0];
float Ay = gravity[1];
float Az = gravity[2];
final float Ex = geomagnetic[0];
final float Ey = geomagnetic[1];
final float Ez = geomagnetic[2];
float Hx = Ey*Az - Ez*Ay;
float Hy = Ez*Ax - Ex*Az;
float Hz = Ex*Ay - Ey*Ax;
final float normH = (float)Math.sqrt(Hx*Hx + Hy*Hy + Hz*Hz);
----> if (normH < 0.1f) {
// device is close to free fall (or in space?), or close to
// magnetic north pole. Typical values are > 100.
return false;
}
...
我的问题是“if(normH&lt; 0.1f)”总是假的。 (我刚刚在代码中添加了一个箭头来显示该行)。
在我看来,问题是磁力计传感器会返回如下值:
加速度值:
normH总是这样:normH = 0.000110721 因此getRotationMatrix函数将始终返回false。
的信息:
我的问题是:
答案 0 :(得分:0)
问题是Qt返回T中的值,而原生Android返回的值是μT。
我刚刚编写了一个原生的Android Magnetometer应用程序来验证我的传感器是否正常工作。 Android返回的值如下:3。???或5。???。 Qt返回的值如下:3.???e或5。??? e-06