从我的 Android 设备中,我可以读取线性加速度值数组(在设备的坐标系中)和绝对方向值数组(在地球坐标系中)。我需要的是获得后一个坐标中的线性加速度值。系统。
我怎样才能转换它们?
EDIT阿里在评论中回复后:
好吧,如果我理解正确的话,当我测量线性加速度时,手机的位置完全不重要,因为读数是在地球坐标系中给出的。正确的?
但我只是做了一个测试,将手机放在不同的位置并在不同的轴上获得加速度。有 3 对图片 - 第一张显示了我如何放置设备(抱歉我的绘画“大师技能”),第二张显示了线性ACC提供的数据读数。传感器:
- 设备放在左侧
- 设备仰卧
- 设备站立
现在 - 为什么在第三种情况下加速度沿着 Z 轴(而不是 Y)发生,因为设备位置并不重要?
我终于成功解决了!所以要得到加速度矢量 in 地球坐标系你需要:
- 得到旋转矩阵(
float[16]
所以以后可以使用它android.opengl.Matrix
类)来自SensorManager.getRotationMatrix()
(using SENSOR.TYPE_GRAVITY
and SENSOR.TYPE_MAGNETIC_FIELD
传感器值作为参数),
- use
android.opengl.Matrix.invertM()
在旋转矩阵上进行反转(不是转置!),
- use
Sensor.TYPE_LINEAR_ACCELERATION
传感器获取线性加速度矢量(在设备的坐标系中),
- use
android.opengl.Matrix.multiplyMV()
将旋转矩阵乘以线性加速度矢量。
现在你就拥有了!我希望我能为别人节省一些宝贵的时间。
感谢爱德华·福尔克和阿里的提示!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)