我希望跟踪两个读数之间的旋转增量(y轴)。
有一个游戏对象,我从它开始移动时读取一个初始角度。 然后我有另一个变量在更新循环期间读取实时角度。
我希望delta值不确定它是负还是正,基本上我将应用相同的更新,无论对象向左或向右旋转20度。
编辑: 我希望delta值是最小的角度,所以最大值可以是180,然后再减去0。
实施例: 如果我的initFaceAngle == 5和currentFaceAngle == 355那么myAngle == 10
void Start()
{
initFaceAngle = hmd.transform.rotation.eulerAngles.y;
}
void update()
{
currentFaceAngle = hmd.transform.rotation.eulerAngles.y;
// My terrible first attempt... look ma' I can math.
float myAngle = (float)Math.Abs(initFaceAngle - currentFaceAngle);
}
显然我的计算不起作用,因为获得两个角度之间的差异并没有考虑到360度。所以我觉得我需要一些馅饼(pi),但除了作为一个令人印象深刻的馅饼(pi)食客外,我不知道如何调用它神奇的数学能力。
我需要使用什么公式来捕获delta?
无论是向左还是向右旋转,如何使其读取相同?
答案 0 :(得分:1)
因为你只需要初始位置和当前位置之间的角度,它实际上不涉及数学,只需要进行简单的检查就可以看出哪个值最大。
void update()
{
currentFaceAngle = hmd.transform.rotation.eulerAngles.y;
float myAngle;
if(initFaceAngle > currentFaceAngle)
myAngle = initFaceAngle - currentFaceAngle;
else
myAngle = currentFaceAngle - initFaceAngle;
if(myAngle > 180)
myAngle = 360 - myangle;
}
答案 1 :(得分:1)
我想我已经找到了解决方案,不确定它是否是最优雅的,但输出值看起来是正确的。
void Start()
{
initFaceAngle = hmd.transform.rotation.eulerAngles.y;
}
void update()
{
currentFaceAngle = hmd.transform.rotation.eulerAngles.y;
float myAngle = getDeltaAngle(initFaceAngle, currentFaceAngle);
}
public static float getDeltaAngle(float a, float b)
{
float x;
float y;
if (a > b)
{
x = a;
y = b;
}
else
{
x = b;
y = a;
}
if (x - y < 180)
{
x = x - y;
}
else
{
x = (360 - x) + y;
}
return x;
}