首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android加速方向

Android加速方向
EN

Stack Overflow用户
提问于 2013-03-01 21:20:10
回答 1查看 2.2K关注 0票数 0

在寻找了一段时间后,我没有找到任何方法来分离平移加速度方向和旋转。

我正在寻找一种方法,可以独立于手机的旋转方式获得加速度方向(当然也可以独立于手机的旋转方式)。

基本上,这将允许我在加速、减速和改变方向之间做出区别。

我试图用从getOrientation获得的加速度传感器角度进行补偿,但我实验发现,当设备有平移运动(加速度)时,getOrientation角度(方位角、俯仰角和滚动角)是不同的。

我需要两者之一:无论设备是如何旋转的加速方向,还是无论设备如何加速的方向值。

这有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-03 23:15:48

我们终于找到了!

Android documentation之后,我们可以得到旋转矩阵(getRotationMatrix)来转换移动设备的坐标系:旋转矩阵R将一个矢量从设备坐标系转换到世界坐标系。

但是在参数文档中写道(这里是测验):

gravity -is包含3个浮点数的数组,其中包含以设备坐标表示的重力矢量。您可以简单地使用TYPE_ACCELEROMETER类型的传感器的SensorEvent返回的值。

那么如果你在文档中说加速度计的值是旋转矩阵上的参数,那么加速度当然会受到影响,而移动平移和矩阵都将是无用的。

您必须使用重力传感器值( TYPE_GRAVITY类型的传感器),而不是使用加速度传感器值

由于此传感器不受移动平移的影响,因此可以在移动平移时使用旋转矩阵。

最后,为我们工作的代码将是:

代码语言:javascript
复制
float[] trueacceleration = new float[4];
float[] R = new float[16];
float[] RINV = new float[16];    

SensorManager.getRotationMatrix(R, I, GRAVITY, geomagnetic);
Matrix.invertM(RINV, 0, R, 0);          
Matrix.multiplyMV(trueAcceleration, 0, RINV, 0, linearAcceleration, 0);

哪里

  • 重力是具有TYPE_GRAVITY传感器的值的矢量,
  • geomangetic是具有TYPE_MAGNETIC_FIELD传感器的值的矢量,and
  • linearAcceleration是具有TYPE_LINEAR_ACCELERATION传感器

的值的矢量

然后在trueAcceleration矢量中,我们有移动平移的加速度,无论移动如何移动它的方向。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15158769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档