Taman prije nego sam odustao, nadošla mi je ideja... iako još uvijek ne znam implementirati, odnosno mozak samo što ne eksplodira.
Nikakav tangens, jer recimo, ako gledam moju sjenu, a sunce visoko, tangenta (sjena) će biti kratka i mogu dosta precizno odrediti njenu dužinu. No, kako sunce zalazi, sjena je sve duža i samim time sve teža za odrediti. Jest da sam dobio neke rezultate, ali su isto tako neprecizni pri nekim kutevima.
Odgovor leži u pitagorinom teoremu. C
2=A
2+B
2 , dakle [glow=red,2,300]C=SQRT(A
2+B
2)[/glow], a kut između A i C je COS[theta]=B/C, tj. [theta]=ACOS(B/C). Jedini problem je sa tim COS i SIN, pošto ovaj koordinatni sustav ima pozitivne i negativne 'krakove', tako da moram IF petlju staviti (točnije njih četiri), tako da moram koristiti sinus i cosinus ovisno o kojem kutu se radi. Iako sam to već prije probao, ali često dobijem na ekranu "NAN", što je oznaka za grešku u računanju (~math error), jer ako mi se pod korijenom [SQRT()] nađe negativan broj, računica je u banani (a podaci sa magnetometra i jesu negativni i/ili pozitivni, ovisi kako se okrene). Ovdje sam se najviše iznenadio kako sam to mogao previdjeti.
A, valjda sam prolupao cijelu noć vrteči kompas okolo naokolo i gledao brojke.
Joj, napokon mogu ići spavati (u ovako sitne sate).
Nisam ništa ni jeo, ni pošteno spavao... ali sam ipak donekle riješio, ili bar znam gdje je bila kardinalna greška.
LN
milan
---
EDIT: Sad sam se sjetio jednog trika, da ne moram IF petlje koristiti; pošto podaci nikad ne prelaze +/-550, mogu pomaknuti još malo više nultu točku 'u stranu' (i po X i po Y osi), recimo +1000, tako da će podaci ispod korijena uvijek biti pozitivni. Onda i samo onda kad se prinese neki jak magnet, onda će se dogoditi da će me snaći na ekranu poruka "NAN", ali u tom slučaju mogu provjeriti: If (x<0||y<0) {izračunaj kut} else print("miči taj magnet dalje od instrumenta!");
Dakle, ako je polje po X i Y osi negativno (čak i sa dodanim 'offset-om', onda će alarmirati da je greška. Ionako bi bila greška čak i da sam cijelu tu proceduru izbacio - kompas bi pokazivao tko zna što, a ne pravi sjever.