航向从359-1或1-359改变时的罗盘误差。C#Windows Phone 8

航向从359-1或1-359改变时的罗盘误差。C#Windows Phone 8,c#,visual-studio-2012,windows-phone-8,augmented-reality,C#,Visual Studio 2012,Windows Phone 8,Augmented Reality,我正在实现横向模式增强现实应用程序。左上角的小圆圈是指南针,指示北方的位置。以前我在肖像模式下使用它。而且它绝对工作得很好。但当我换工作时,有两个问题。在纵向模式下也存在一个问题 当真航向从1变为359或359变为1时,指南针不知道直接取最短的角度,但它会旋转整圈并转到最终航向。比如当真航向为1度时,我将设备转向稍微北一点以形成真航向358,它不会直接从1-0-359-358开始,它会从1-2-5-200-300-358开始走一条完整的路径,即几乎是一个完整的圆。 这是因为我正在使用情节提要双动

我正在实现横向模式增强现实应用程序。左上角的小圆圈是指南针,指示北方的位置。以前我在肖像模式下使用它。而且它绝对工作得很好。但当我换工作时,有两个问题。在纵向模式下也存在一个问题

  • 当真航向从1变为359或359变为1时,指南针不知道直接取最短的角度,但它会旋转整圈并转到最终航向。比如当真航向为1度时,我将设备转向稍微北一点以形成真航向358,它不会直接从1-0-359-358开始,它会从1-2-5-200-300-358开始走一条完整的路径,即几乎是一个完整的圆。 这是因为我正在使用情节提要双动画设置旋转动画。那么我该如何解决这个问题呢
  • 第二个问题是,很容易理解,TrueTHeading的参考轴是设备的顶部,当设备的顶部朝北时,圆圈中的N字母总是在绿色区域。即相对于其所在网格为0度。但我希望它能以测量角度的基准线为基准,通过这个角度,连接装置的顶部和底部。 我如何做到这一点?如何将双动画的参考线90度设置为原始
  • 这里似乎有一个bug,因为我无法添加代码。但这是一个文本文件,它包含了我想展示给大家的代码。

    对于第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;
    }
    
    if(角度>359)
    {
    角度+=(角度/360)*-360;
    }
    否则,如果(角度<0)
    {
    角度+=((角度/360)-1)*-360;
    }
    

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

    对于第一个点,一个解决方法是将角度从359更改为361,而不是从359更改为1。如何操作?因为我将直接将trueheading值反馈给旋转。太棒了。谢谢。让我试试这个。它对我的实现不起作用。不管怎样,我通过你早些时候的建议实现了我想要的。我将compositetranform命名并使用compositetransform.rotation=TrueTHeading。而且效果很好。你知道我如何在timer_Tick事件运行时检查设备的方向吗?这样当方向为横向时,我就可以与真航向相反90度,这样指针就总是朝北?@VenkatapathiRajuM你试过检查页面的
    方向
    属性吗?没有,让我想想。谢谢:)我正在用一种类似的方法。主要区别在于我将动画从和更改为值。在从359到1的情况下,我将from值设置为-1,将to值设置为1,它始终是正确的值。至于旋转问题,我目前也在使用页面方向和加速计信息来解决它。