我正在尝试创建一个平滑函数以将数字插值为零。问题是,它不起作用。在这种情况下,如果我将数字增加0.01指定的次数,我想将该数字减少0.02直到它为零。这是我的功能。
float ReduceSpeed(float x)
{
if (x != 0f)
{
if (x % 0.02f != 0 && x > 0)
{
x = x - 0.01f;
} else if (x % 0.02f != 0 && x < 0)
{
x = x + 0.01f;
}
else
{
if (x > 0f)
{
x = x - 0.02f;
}
else
{
x = x + 0.02f;
}
}
}
return x;
}
我想用它来创建一种统一的滑动运动。
答案 0 :(得分:2)
问题很可能出在线
if (x != 0f)
x
由于舍入误差很可能不完全为零,因为0.01和0.02是基数2中的周期数。您应该选择一个较小的值(ε),以与{的绝对值进行比较{1}}反对,例如
x