5

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

现在,我得到与这张图片相同的读数:在此处输入图像描述

我不明白的是:如果我旋转手机时坐标系没有改变(始终使屏幕面向用户),那么重力应该始终施加在 Y 轴上。只有当我将手机放在屏幕不再面向用户的位置时,它才应该改变轴,就像放在桌子上一样,应该在 Z 轴上应用重力。

我的理解有什么问题?

谢谢!吉列尔莫。

4

2 回答 2

1

当设备的屏幕方向改变时,轴会被交换。根据您引用的文章:

但是,Android 传感器 API 将传感器坐标空间定义为相对于设备的顶部和侧面,而不是短边和长边。当系统重新定位屏幕以响应将手机侧向握持时,传感器坐标系不再与屏幕的坐标系对齐,并且您的应用程序显示会出现意外的旋转。

如果您愿意,要访问未交换的值,请在 values[] 中使用索引 3、4 和 5,否则同一篇文章中提到的一些建议非常有效!

于 2013-07-15T23:04:27.130 回答
1

相当老的问题,但我发现它仍然相关。截至今天,其传感器坐标系章节中的传感器概述页面仍然显示:

关于这个坐标系最重要的一点是,当设备的屏幕方向改变时,轴不会交换——也就是说,传感器的坐标系永远不会随着设备的移动而改变。此行为与 OpenGL 坐标系的行为相同。

对我来说,这个措辞仍然令人困惑,当然这可能是因为我不是以英语为母语的人。

我的理解是,在 Android 中(如在 iOS 中),传感器假定的坐标系与设备是一体的。即坐标系与设备卡住,其轴随设备旋转。

因此,对于自然方向为纵向的手机,当手机竖直竖放在用户面前时,Y 轴指向上方。请参见下图,来自相同的Android 指南

在此处输入图像描述

然后,当用户将手机旋转到横向左方向时(因此右侧有主页按钮),Y 轴指向左侧。请参见下图,来自Matlab 教程(尽管屏幕不再是真正面向用户的):

在此处输入图像描述

然后是 Android 开发博客中经常被引用的帖子,One Screen Turn Deserves Another说:

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

这对我来说听起来与我之前的推理完全相反。但话又说回来,在它的后面那么问题是什么?章,你确实看到当手机向左旋转时,Y 轴指向左边,就像我之前的推理一样。

于 2020-05-18T13:24:31.713 回答