Math 以对数方式旋转回0度

Math 以对数方式旋转回0度,math,rotation,exponential,Math,Rotation,Exponential,当用户释放手指时,我希望我的精灵旋转回0度。目前是这样做的: if (touching == NO && rotationValue != 0) { if (rotationValue < 180 && rotationValue < 0) { rotationValue += 1.5; } else { rotationValue -= 1.5; } if (

当用户释放手指时,我希望我的精灵旋转回0度。目前是这样做的:

if (touching == NO && rotationValue != 0)
{
    if (rotationValue < 180 && rotationValue < 0)
    {
        rotationValue += 1.5; 
    }
    else
    {
        rotationValue -= 1.5;
    }

    if (rotationValue < 1 && rotationValue > -1)
        rotationValue = 0;
}
if(触摸==NO&&rotationValue!=0)
{
if(旋转值<180&&旋转值<0)
{
旋转值+=1.5;
}
其他的
{
旋转值-=1.5;
}
if(rotationValue<1&&rotationValue>-1)
旋转值=0;
}

有人能帮我吗?当精灵以对数方式向后旋转时,它开始旋转得更快,然后在达到0时变慢。

基本上,你想减去每个滴答声留下的差值的一小部分。0.125这里是一个任意参数,您可以更改它来更改总体速度

if (fabs(rotationValue) < 0.00000000000000000001){
    rotationValue = 0.0;
} else {
    rotationValue -= .125 * fabs(rotationValue);
}
if(fabs(旋转值)<0.00000000000000000001){
旋转值=0.0;
}否则{
旋转值-=.125*fabs(旋转值);
}

到目前为止,您尝试了什么?我相信您一定知道,在每次迭代中,您需要向
rotationValue
添加不同的量;这其中的哪一部分会给你带来问题?这会给你指数衰减,只会逐渐接近目标。只有由于浮点精度有限,最终才能达到0。我会将比例项与一个非常小的常量值结合起来,以确保在合理的时间内达到目标。我的意思是:
rotationValue-=(.125*fabs(rotationValue)+0.02)。
看到了,你也必须检查过冲。当它接近0时,最好像我一样夹紧它。它更清晰、更简洁。我不想开始争论,但是-夹钳要么1)在接近0时仍然需要很长时间缓慢移动,要么2)在仍然快速移动时突然停止。