由于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 <0.1f)”始终为假。(我只是在代码中添加了一个箭头,向您显示了该行)。
我认为问题在于磁力计传感器返回的值如下:
加速度值:
normH始终围绕此问题:normH = 0.000110721因此,getRotationMatrix函数将始终返回false。
信息:
我的问题是:
问题在于Qt返回T中的值,而本机Android返回µT中的值。
我刚刚编写了一个本机Android磁力计应用程序,以验证我的传感器是否正常工作。Android返回的值如下:3。??? 或5。???。Qt返回的值如下:3.???e-06或5.???e-06
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句