Хранение десятичного числа в диапазоне

Если у меня есть десятичное число, представляющее угол, и я добавляю его к другому углу, как я могу убедиться, что оно остается в диапазоне от 0 ° до 359 °? Так что, если это 120 ° + 270 °, это будет 30 ° вместо 390 °? Я мог бы проверить, находятся ли они выше или ниже предела, а затем добавить или вычесть 360 °, но что, если он закончится более чем на 360 °? Я бы использовал по модулю, но я не уверен, как это будет работать с десятичными и отрицательными числами. Я мог бы также использовать цикл, который добавляет / вычитает 360, пока он не окажется в диапазоне, но я не уверен, что это хорошая идея. (На самом деле я делаю это с радианами, это просто объяснить градусами)

1

Решение

Вы можете использовать операцию модуля. С целыми числами это % оператор, с поплавками вы можете использовать std::fmod

// \brief Calculates the sum of two angles
// \param[in]  a  First angle [degrees]
// \param[in]  b  Second angle [degrees]
// \return Sum of two angles [degrees, [0, 360)]
double AddAngles(double a, double b)
{
const double totalAngle = a + b;
if (totalAngle >= 0.0)
{
return std::fmod(totalAngle, 360.0);
}
else
{
return 360.0 - std::fmod(-totalAngle, 360.0);
}
}

демонстрация

int main()
{
std::cout << AddAngles(30.0, 450.0) << std::endl
<< AddAngles(50.0, 80.0) << std::endl
<< AddAngles(180.0, 180.0) << std::endl
<< AddAngles(-180.0, -270.0) << std::endl;
}

Выход

120
130
0
270
4

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector