У меня есть переменная, которая представляет собой модуль конгруэнтности x=y(mod 360), что означает, что y варьируется от 0 до 360, и если значение больше 360, оно снова становится равным 0. Например, x=5 для y = 365.
Я написал эту функцию для стабилизации y, поэтому, если разница между x и предыдущим x больше 5, я получаю x, в противном случае — предыдущее x.
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 - 0,3 = 358,7. но я хочу, чтобы это была разница по модулю 360, которая составляет 1,3.
x
иy
? - person Mysticial   schedule 03.08.2012[0,360)
? Можете ли вы привести примеры ваших входных данных и ожидаемых результатов? - person Mysticial   schedule 03.08.2012x
иpreviousx
, чем5
. Мой ответ здесь имеет функциюangleDiff()
, которая даст вам разницу между любыми двумя углами. Результат нормализуется до[-180, 180)
. Так что это может делать то, что вы хотите. - person Mysticial   schedule 03.08.2012