我正在实施横向模式增强现实应用。左上角的小圆圈是指示北方所在位置的指南针。以前我在肖像模式下使用它。它绝对正常。但当我转移到有两个问题。在肖像模式中也存在一个问题。
这里似乎有一个错误,因为我无法添加代码。但这里是文本文件,其中包含我想要向您展示的代码。 Code sample explained above
答案 0 :(得分: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的倍数,因此对此调整不会产生视觉影响。