resonator napisał(a):
Obliczenie średniej arytmetycznej nie wchodzi w grę, ponieważ jeśli liczby wahają się wokół 0 np. 59, 2, 58, 57, 2 itd. to średnia wychodzi po drugiej stronie okręgu.
Nie chce mi się tworzyć rysunków, więc spróbuję to przedstawić opisowo. Kiedy narysujemy dwie półproste rozpoczynające się w tym samym punkcie, to tworzą one dwa kąty - czasami jeden jest wklęsły a drugi wypukły, a czasami są to dwa kąty półpełne.
Rozumiem, że Twoim zamierzeniem jest wyznaczenie dwusiecznej kąta wypukłego. Jeśli liczysz średnią z dwóch wartości równych kolejno 59 i 2, to wyznaczasz dwusieczną kąta wklęsłego:
(59 + 3) / 2 = 31
Aby tego uniknąć wystarczyłoby na przykład od jednej z wartości odjąć wartość kąta pełnego, czyli w Twoim przypadku 60:
( (59 - 60) + 3) / 2 = 1
Jeśli wynikiem będzie liczba ujemna, należy z powrotem dodać 60:
( (56 - 60) + 2) / 2 = -1
-1 + 60 = 59
Dokładniej mówiąc należałoby sprawdzić różnicę kątów, i na jej podstawie użyć odpowiedniego wzoru do obliczenia średniej:
- jeżeli wartość bezwzględna różnicy wartości, z których obliczana jest średnia, jest większa od kąta półpełnego, czyli w tym przypadku większa od 30, to należy odjąć od jednej z wartości 60, a jeśli wynik będzie miał wartość ujemną, dodać do niego 60,
- jeżeli wartość bezwzględna różnicy jest mniejsza od 30, średnią liczymy normalnie, czyli suma dwóch składników przez dwa.
Nadal problemem pozostaje kąt półpełny, czyli kiedy obliczamy średnią z wartości, których różnica jest dokładnie równa 30 (np. dla dwóch wartości równych 30 i 0, zarówno wartość średnia 15 jak i 45 są prawidłowe), ale zakładam, że takie sytuacje nie będą występowały zbyt często, więc chyba można byłoby takie skrajne próbki pominąć.
Jeszcze jeden problem jest taki, że nie da się raczej tym sposobem policzyć od razu średniej z 10 wyników. Należałoby raczej zrobić to w pętli - najpierw obliczyć średnią z dwóch pierwszych próbek, później średnią z tej średniej i trzeciego wyniku itd.
Mam nadzieję, że napisałem zrozumiale. Może nie jest to jakiś super prosty sposób, ale chyba prostszy od obliczeń wektorowych
![Puszcza oko ;)](https://forum.atnel.pl/images/smilies/icon_e_wink.gif)
Osobiście nie widzę w tej chwili prostszego rozwiązania.
EDIT:
Muszę jeszcze uściślić/poprawić się, że pisząc o różnicy większej od 30 miałem na myśli wartość bezwzględną różnicy.