Czy wartość mieści się w zakresie

0

Cześć,
Mam taką rozkminę. Otóż próbuję w programie sprawdzić czy dany kąt z przedziału 0-359 mieści się w obszarze kąt-10 < kąt < kąt + 10.
Poniższy obrazek przedstawia o co mi dokładnie chodzi. O ile np. z kątem 45 stopni nie ma problemu bo 45 - 10 < 45 < 45 + 10, tak już w przypadku np 355 stopni 355 - 10 < 355 < 355 + 10 się nie sprawdzi bo skala jest 0-359 więc 355 + 10 da mi 5 stopni a 355 < 5 to nieprawda. Jak to zapisać żeby hulało? :)
111.png

0

Od początku jakie masz dane wejściowe (kąty, wektory, współczynniki kierunkowe, ...) i jakich oczekujesz danych wyjściowych.
Może powinieneś się zainteresować matematyką modularną?

0

Dane wejściowe,

  1. odczyt z czujnika urządzenia w postaci stopni 0-359,
  2. kąt jakiegoś tam obiektu pobrany gdzieś tam z serwera 0-359,
  3. Zakres np. 10 oznacza że wyjście będzie prawdą jeżeli kąt obiektu będzie w zakresie kąt obiektu - 10 stopni w stronę przeciwną do wskazówek zegara < kąt obiektu < kąt obiektu + 10 stopni w kierunku zgodnym ze wskazówkami zegara

Dane wyjściowe: prawda (kąt mieści się w zakresie) lub fałsz (kąt wychodzi poza zakres)

0

To albo Musisz rozszezyć przestrzeń kątów, nie ma problemu, pomimo, że odczyt jest od 0 do 359, można przyjąc, że istnieje kąt 365, wiekszy od 355; albo tak dobierać zakresy, aby nie wyjść z przedziału.

2
constexpr auto FullAngle = 360;

int normalize_angle(int a)
{
    return a < 0 ? FullAngle + a : a;
}

bool close_angles(int a, int b, int epsilon = 10)
{
    auto diff = normalize_angle(a - b);
    return diff < epsilon || diff > FullAngle - epsilon; // zależnie od wymagań może powinno być >=
}
0

dziękuję, o to chodziło

1 użytkowników online, w tym zalogowanych: 0, gości: 1