0

左上角带指南针的横向模式

我正在实施横向模式增强现实应用程序。左上角的小圆圈是指南针,它显示了北方的位置。以前我在纵向模式下使用它。它绝对工作得很好。但是当我转移到有两个问题。在纵向模式中也已经存在一个问题。

  1. 当真航向从 1 变为 359 或 359 变为 1 时,罗盘不知道直接取最短角度,而是旋转一整圈,到达最终航向。就像当真航向为 1 度时,我将设备稍微向北转动以使真航向 358,它不会直接从 1-0-359-358 开始,而是从 1-2-5-200-300- 开始的完整路径358 即一个几乎完整的圆圈。这是因为我正在使用情节提要双动画为旋转设置动画。那么我该如何解决呢?
  2. 第二个问题,你可以很容易理解,真航向的参考轴是设备的顶部,当设备的顶部朝向北方时,圆圈中的N字母总是在绿色区域。即相对于它所在的网格为 0 度。但我希望它采用参考线来测量转角作为线连接设备的顶部和底部。我该如何做到这一点?如何将双动画的参考线设置为原始 90 度?

这里似乎有一个错误,因为我无法添加代码。但这里是包含我想向您展示的代码的文本文件。 上面解释的代码示例

4

1 回答 1

0

对于您的第 1 点,您要做的是检测即将旋转大于 180° 的角度的情况,然后采用较短的路径。

var rotation = newAngle - oldAngle;

if (Math.Abs(rotation) > 180)
{
    // Rotating of more than 180, which means it exists a shorter path
    newAngle += rotation > 0 ? -360 : 360;
}

// Start the animation to rotate to newAngle

如果旧角度为 1,新角度为 359,则旋转为 358。它是正数,因此代码将 360 减去 359,因此从 1 旋转到 -1。

如果旧角度为 359,新角度为 1,则旋转为 -358。它是负数,因此代码会将 360 添加到 1,因此从 359 旋转到 361。

注意:在第二种情况下,旋转后角度为361。然后你会遇到完全相同的问题,你尝试旋转到2°或3°,算法会将角度校正为362、363、等等。在某些时候,如果指南针一直沿同一方向旋转,角度将达到 540,算法将停止正常工作。为防止此类问题,您需要检测动画何时停止(有一个事件),然后调整角度使其保持在 0-359 范围内:

if (angle > 359)
{
    angle += (angle / 360) * -360;
}
else if (angle < 0)
{
    angle += ((angle / 360) - 1) * -360;
}

由于您将角度更改为 360 的倍数,因此此调整不会产生视觉影响。

于 2013-09-08T09:09:45.977 回答