我在许多地方读过:One Screen Deserves Another:“API用于设备自然方向的传感器坐标系统不随设备移动而改变,与OpenGL坐标系统相同。“
现在,我得到与此图像相同的读数:
我不明白的是:如果我旋转手机时坐标系没有改变(屏幕面向用户的屏幕总是如此),应该在Y轴上施加重力永远。它应该只改变轴,如果我将手机放在屏幕不再面向用户的位置,就像放在桌子上一样,重力应该应用在Z轴上。
我的理解有什么问题?
谢谢!吉列尔莫。
答案 0 :(得分:2)
当设备的屏幕方向改变时,交换轴。根据你引用的文章:
然而,Android传感器API将传感器坐标空间定义为相对于设备的顶部和侧面 - 而不是短边和长边。当系统重新定位屏幕以响应侧向握住手机时,传感器坐标系不再与屏幕的坐标系对齐,并且您的应用程序显示中会出现意外的旋转。
要根据需要访问未交换的值,请在值[]中使用索引3,4和5,否则同一篇文章中提到的一些建议可以很好地工作!
答案 1 :(得分:0)
很老的问题,但我发现它仍然有意义。截止到今天,Sensor Overview页面的传感器坐标系章中仍然显示:
了解此坐标系最重要的一点是,当设备的屏幕方向发生变化时,轴不会交换-也就是说,传感器的坐标系永远不会随着设备的移动而变化。此行为与OpenGL坐标系的行为相同。
对我来说,这种措词仍然令人困惑,当然这可能是因为我不是英语为母语的人。
我的理解是,在Android中(与iOS中一样),传感器假定的坐标系与设备集成。即,坐标系卡在设备上,其轴随设备旋转。
因此,对于自然方向为纵向的手机,当将其垂直竖立在用户面前时,Y轴指向上方。参见下图,来自同一Android guide:
然后,当用户将手机旋转到横向左方向时(因此使用主页按钮在右侧),Y轴指向左侧。从Matlab tutorial看下面的图片(尽管屏幕不再是用户真正面对的地方):
然后有来自Android开发者博客One Screen Turn Deserves Another的经常被引用的帖子,内容为:
API用于设备自然方向的传感器坐标系不会随设备移动而变化,并且与OpenGL坐标系相同
在我看来,这与我先前的推理完全相反。但话又说回来,在接下来的问题何在?一章中,您的确看到,当手机向左旋转时,如我先前的推理一样,Y轴指向左侧。