2

我有一个变量,它是同余模 x=y(mod 360),这意味着 y 在 0 - 360 之间变化,如果该值大于 360,它再次变为 0。例如 x=5 表示 y = 365 。

我写了这个函数来稳定 y ,所以如果 x 和 previousx 之间的差异大于 5 ,那么我得到 x 否则 previousx 。

float stabilize(float x,float previous){

    if(fabs(x-previousx)<5)
    {
        return previousx;
    }
    else
    {
        return x;
    }

}

这在 0 到 360 之间工作正常但是这在 360 和 0 的边界条件下失败。当 y 是接近 0 的值(例如 0.3)并且之前的 y 接近 360(例如 359)时,我如何稳定该值。所以这里计算的差异是 359 - .3 = 358.7 。但我希望它是 1.3 的模 360 差异。

4

2 回答 2

4

类似的东西if(fabs(x-previousx)<5 || fabs(x-previousx)>355)呢?鉴于输入数据是 mod 360,如果差异足够大,则意味着两个值都足够接近边界。

于 2012-08-03T09:57:40.343 回答
1

您可以减去原始数字并取 fabs(结果)的模 360:

例如:

359 - 720.3 = -361.3
fabs(-361.3) = 361.3
361.3 % 360 = 1.3
于 2012-08-03T09:57:04.503 回答