MyTetra Share
Делитесь знаниями!
Нормировка угла на диапазон 0-360 и -180/+180 на языке C++
21.02.2018
13:26
Текстовые метки: c++, угол, нормировка, нормализация, диапазон
Раздел: Компьютер - Программирование - Алгоритмы

Пример кода, который нормализует (ограничивает) угол в указанном диапазоне. Если значение выходит за диапазон, угол пересчитывается так, чтобы "визуально" он остался прежним, но его значение укладывалось бы в заданный диапазон.


#include <iostream>

#include <cmath>


using namespace std;


// Диапазон (0, 360)

double constrainAngle360(double x)

{

x = fmod(x ,360.0);

if (x < 0.0)

x += 360.0;

return x;

}


// Диапазон (-180, +180)

double constrainAngle180(double x)

{

x = fmod(x + 180.0, 360.0);

if (x < 0.0)

x += 360.0;

return x - 180.0;

}


int main()

{

cout << "Constrain 360:" << "\n";

cout << 0.5 << " : " << constrainAngle360(0.5) << "\n";

cout << 10 << " : " << constrainAngle360(10) << "\n";

cout << 380 << " : " << constrainAngle360(380) << "\n";

cout << 730 << " : " << constrainAngle360(730) << "\n";

cout << 730.5 << " : " << constrainAngle360(730.5) << "\n";


cout << -0.5 << " : " << constrainAngle360(-0.5) << "\n";

cout << -10 << " : " << constrainAngle360(-10) << "\n";

cout << -380 << " : " << constrainAngle360(-380) << "\n";

cout << -730 << " : " << constrainAngle360(-730) << "\n";

cout << -730.5 << " : " << constrainAngle360(-730.5) << "\n";



cout << "Constrain 180:" << "\n";

cout << 0.5 << " : " << constrainAngle180(0.5) << "\n";

cout << 10 << " : " << constrainAngle180(10) << "\n";

cout << 380 << " : " << constrainAngle180(380) << "\n";

cout << 730 << " : " << constrainAngle180(730) << "\n";

cout << 730.5 << " : " << constrainAngle180(730.5) << "\n";


cout << -0.5 << " : " << constrainAngle180(-0.5) << "\n";

cout << -10 << " : " << constrainAngle180(-10) << "\n";

cout << -380 << " : " << constrainAngle180(-380) << "\n";

cout << -730 << " : " << constrainAngle180(-730) << "\n";

cout << -730.5 << " : " << constrainAngle180(-730.5) << "\n";

return 0;

}


Результат:


Constrain 360:

0.5 : 0.5

10 : 10

380 : 20

730 : 10

730.5 : 10.5

-0.5 : 359.5

-10 : 350

-380 : 340

-730 : 350

-730.5 : 349.5

Constrain 180:

0.5 : 0.5

10 : 10

380 : 20

730 : 10

730.5 : 10.5

-0.5 : -0.5

-10 : -10

-380 : -20

-730 : -10

-730.5 : -10.5


 
MyTetra Share v.0.52
Яндекс индекс цитирования