- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在制作一个 map 应用程序,包括显示你所面对方向的位置箭头,如下所示:
我直接从 SensorManager.getOrientation()
获取方向,使用第一个返回值:方位角。当握住手机使屏幕指向地平线上方并且纵向时,箭头可以正常工作。然而:
下面精心构建且科学的图像显示了我的意思(其中蓝色是用户面向,红色是箭头方向,屏幕大致面向用户的面部,Google map 完全符合我的要求):
(请注意,使用 Google map ,如果关闭自动旋转,它不会成功执行列表中的最后两个操作。但我什至还没有到那个阶段。一次一件事。)
看起来好像只是使用 Y 轴指向的方向,如下所示:http://developer.android.com/reference/android/hardware/SensorEvent.html ,当我希望它使用Z轴指向的反向时,大部分时间,以及手机平放时的Y。但是,考虑到 getOrientation()
返回的值,我必须编写复杂的案例来解决一些问题,而面向手机的水平用例是无法解决的。我确定有更简单的方法。
这是我的代码(lastAcceleration 和 lastMagneticField 都来自内部传感器):
float[] rotationMatrix = new float[9];
if(SensorManager.getRotationMatrix(rotationMatrix, null, lastAcceleration, lastMagneticField)){
float[] orientMatrix = new float[3];
SensorManager.getOrientation(rotationMatrix, orientMatrix);
orientation = orientMat[0]*180/(float)Math.PI;
}
我做错了什么?有没有更简单的方法来做到这一点?
编辑:为了澄清,我假设用户将设备放在他们面前,并且屏幕指向他们。除此之外,我显然无法判断它们是否只有一个旋转。另外,我使用的是用户移动时的 Action ,但这是针对他们静止时的。
最佳答案
你调用 remapCoordinateSystem 了吗?否则,您只能在垂直握住手机时获得正确的面值。对于这种情况,当手机被握住时,屏幕的朝向与地平线齐平,你无法获得用户的朝向。因为要获得正面,您必须将传感器读数的 z 值投影到世界坐标中的 xy 平面中,并且当设备水平放置时它为零。
更准确地说,如果你想让手机面向,那么手机必须从水平方向倾斜至少 25 度,你必须调用 remapCoordinateSystem。以下代码将为您提供上面最后 2 张图片所需的内容。
代码
float[] rotationMatrix = new float[9];
if(SensorManager.getRotationMatrix(rotationMatrix, null, lastAcceleration, lastMagneticField)){
float[] orientMatrix = new float[3];
float remapMatrix = new float[9];
SensorManager.remapCoordinateSystem(rotationMatrix, SensorManager.AXIS_X, SensorManager.AXIS_Z, remapMatrix);
SensorManager.getOrientation(remapMatrix, orientMatrix);
orientation = orientMat[0]*180/(float)Math.PI;
}
假设手机平放,getOrientation 会为您提供正确的值。因此,如果手机垂直握持,则必须重新映射坐标才能获得平坦位置。在几何上,您将手机 -z 轴向下投影到世界 xy 平面,然后计算此投影向量与世界 y 轴之间的角度。
关于android - 如何获得与人类方向匹配的Android手机方向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10221567/
有没有一种方法(程序、库)可以大致了解文档是用哪种语言编写的? 我有一堆混合语言的文本文档(~500K),需要导入支持 i18n 的 CMS (Drupal).. 我不需要完美的匹配,只需要一些猜测。
Closed. This question needs details or clarity。它当前不接受答案。
使用 UTF-8 编码。 (Multiple languages in one HTML page)。 跨不同浏览器(包括 iPad 上的 Safari)在单个网页上正确显示多种人类语言的最佳做法是什
我有一个完全可用的代码,它是为 Windows 编写的,是用 Visual Studio 构建的。 我想做的是为该软件添加另一种语言。我的想法是在窗口角落放置两个标志(一个英语和一个德语),并在用户点
我刚刚得到一个脚本,我想对其进行一些更改,我正在寻找某人为我开发一份自由职业,以使我将提供的加载字符串可读以进行编辑。 Lua代码是这样的: ------------------------- ENG
有没有不是简单逐字翻译的语言翻译项目?一个具有先进算法/设计的? 目前主流和流行的翻译软件,例如谷歌翻译,似乎是查找一个词或一组连续的词,然后将其直接翻译成不知何故确定为最佳匹配的内容。但是因为它不是
基于 Twilio 的人类/非人类检测 - 我正在尝试通过如下所示的代码来检测调用是否被人类或机器人接听 HashMap params = new HashMap(); params.put("Fro
这是目前(不确定)我能想到的处理多语言网站的最佳方式,它不涉及 gettext、zend_translate 或任何 php 插件或框架。 我认为它非常简单:我有 3 种语言,我将它们的“内容”写在不
我是一名优秀的程序员,十分优秀!