Czy wartość mieści się w zakresie

Czy wartość mieści się w zakresie
AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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ą?

AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
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)

lion137
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5025
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.

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
2
Kopiuj
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ć >=
}
AP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 37
0

dziękuję, o to chodziło

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.