Android中的传感器坐标系不会改变,对吗?

5

我在很多地方读到了这样的话,比如:一个屏幕值得另一个说:“API使用的传感器坐标系统对于设备的自然方向不会随着设备移动而改变,并且与OpenGL坐标系统相同。”

现在,我得到了与这个图片相同的结果:enter image description here

我不理解的是:如果我旋转手机(始终将屏幕面向用户),坐标系不会改变,重力只会作用于Y轴。只有当我把手机放在不能面向用户的位置上时,比如放在桌子上,重力才应该沿Z轴作用。

我的理解有什么问题吗?

谢谢!Guillermo。

2个回答

1
设备屏幕方向改变时,轴会交换。根据您引用的文章:
“然而,Android 传感器 API 将传感器坐标空间定义为相对于设备的顶部和侧面,而不是短边和长边。当系统响应于将手机横置而重新定位屏幕时,传感器坐标系统不再与屏幕的坐标系统对齐,因此您的应用程序显示中会出现意外旋转。”
如果您想访问未交换的值,请使用 values[] 中的索引 3、4 和 5,否则,该文章中提到的一些建议也可以很好地解决问题!

1
相当古老的问题,但我发现它仍然相关。截至今天,在其“传感器坐标系”章节中,Sensor Overview页面仍然说:
“了解此坐标系最重要的一点是,当设备的屏幕方向更改时,轴不会交换 - 也就是说,传感器的坐标系在设备移动时永远不会改变。这种行为与OpenGL坐标系的行为相同。”
对我来说,这种措辞仍然令人困惑,当然可能是因为我不是英语母语者。
我的理解是,在Android(如同iOS一样),传感器所假定的坐标系是与设备整体一体的。也就是说,坐标系与设备绑定,并且其轴随着设备旋转。
因此,对于一个自然方向为竖屏的手机,当用户将其垂直地握在前面时,Y轴向上指。请参见下图,来源于同一Android guide

enter image description here

当用户将手机旋转到左横向方向(因此Home键在右侧)时,Y轴指向左侧。请参见下面的图像,来自Matlab教程(尽管屏幕不再面向用户):

enter image description here

这里有一篇经常被引用的Android开发博客文章One Screen Turn Deserves Another,它说:

API使用的传感器坐标系对设备的自然方向不会随着设备移动而改变,并且与OpenGL坐标系相同。

在我看来,这听起来恰好与我的先前推理相反。但是,在其后续的那么问题出在哪里?章节中,您可以看到当手机旋转到左横屏时,Y轴指向左侧,就像我之前的推理一样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接