【发布时间】:2015-01-22 01:54:57
【问题描述】:
我正在使用 Google 的 Project Tango 设备开发一个室内定位应用程序,我希望 UI 显示与 ADF 地图相关的设备方向。
为此,我从 TangoPoseData 访问 Z 轴旋转信息,并尝试将旋转数据转换回以度为单位的角度。
TangoPoseData中的旋转信息定义如下,z = RotationAxis.z * sin(RotationAngle / 2)
我的代码如下所示:
//Sine value of the angledouble tangoRotationZsin = pose.rotation[2];
//Convert the sine value into a angle in radiansdouble tangoRotationZRad = 2*Math.asin(tangoRotationZsin);
//Convert to an angle in degreesdouble tangoRotationZDeg = tangoRotationZRad * 180/Math.PI;
问题:
角度值 (tangoRotationZDeg) 应该在 -180 到 180 之间,但即使我在 Z 轴上将设备旋转 360 度数次,角度也只能在 -120 到 120 度之间(或者有时介于-110 到 110 度)。
我错过了什么?
我猜这个问题与 TangoPoseData 中的“RotationAxis.z”因子有关,我在代码中假设它等于 1,但不确定。
感谢您的帮助!
【问题讨论】:
-
你有没有故意排除使用四元数?
-
我不是在开发一个 3D 应用程序,而是一个 2D 地图,很像谷歌地图,其中一个点表示用户位置。我的目标是围绕 Z 轴旋转这个点以指示用户方向。这个点是一个由 Matrix.postRotate(float degree) 函数旋转的 Android 位图,不幸的是,这个函数需要一个以度为单位的角度,而不是四元数(我正在用 Java 开发一个 Android 应用程序,而不是使用 Unity)。所以我别无选择,只能尝试从 Pose 数据中计算出原始角度...
标签: java android google-project-tango