Matrici di rotazione e atan2

fenestren
Ciao a tutti.

Ho tre matrici di rotazione per il calcolo della posizione di un aereo nello spazio 3D:

R_phi=[1 0 0; 0 cos(phi) sin(phi); 0 -sin(phi) cos(phi)]; con phi che rappresenta il rollio

R_teta=[cos(teta) 0 -sin(teta); 0 1 0; sin(teta) 0 cos(teta)]; con teta che rappresenta l'elevazione

R_psi=[cos(psi) sin(psi) 0; -sin(psi) cos(psi) 0; 0 0 1]; con psi che rappresenta l'azimuth

e le inverse di R_phi ed R_teta

R_phi_inv=[1 0 0; 0 cos(phi) -sin(phi); 0 sin(phi) cos(phi)];

R_teta_inv=[cos(teta) 0 sin(teta); 0 1 0; -sin(teta) 0 cos(teta)];

Prendo un vettore colonna G=[0; 0; 1] che è il vettore campo di gravità normalizzato e faccio:

A=R_phi*(R_teta*R_psi), ossia ruoto prima di psi, poi di teta e poi di phi ottenendo il vettore della gravità nella posizione finale.

Esistono in rete delle formule per cui, partendo da A=[ax; ay; az], si possono riottenere i valori di phi e teta, facendo:

phi= atan2(ay, sqrt(ax^2+az^2));

teta=-atan2(ax, sqrt(ay^2+az^2));

Come mai se scelgo un qualunque angolo -20
La cosa strana è che se per ottenere A moltiplico prima per R_phi e poi per R_teta, alla fine mi ribecca in pieno phi ma non teta?

Provate!

C'è qualche proprietà nell'ordine delle matrici o nella formula della atan2?

Grazie.

Luca.

Risposte
dissonance
Si, si, il fatto è che le formule con arcotangente per riottenere un angolo hanno certi range di validità. Facciamo un esempio bidimensionale. Prendi questo vettore, di componenti $(1, 1)$
[asvg]xmin=-1; xmax=1; ymin=0; ymax=1; axes(); marker="arrow"; line([0, 0], [1, 1]); marker="none"; arc([0.1,0], [0.0707, 0.0707], 0.1);[/asvg]
e poi prendi questo, di componenti $(-1, 1)$
[asvg]xmin=-1; xmax=1; ymin=0; ymax=1; axes(); marker="arrow"; line([0, 0], [-1, 1]); marker="none";arc([0.1, 0], [-0.0707, 0.0707], 0.2);[/asvg]

Come fare a calcolare quei due angoli disegnati? Con l'arcotangente: nel primo caso, prendendo $arctan(1/1)$ si ottiene il risultato corretto $pi/4$, ma nel secondo, prendendo $arctan((-1)/1)$ si ottiene il risultato errato $-pi/4$. Infatti bisogna prendere $pi-arctan((-1)/1)$ per ottenere il risultato corretto.

Qualcosa di analogo succede nel tuo caso. Informati sugli Angoli di Eulero, è in quell'ambito che trovi le risposte necessarie.

P.S.: Magari cerca su questo sito

http://www.batmath.it/index.asp

nella sezione di Meccanica Razionale c'è una dispensa che io trovo molto chiara.

fenestren
Ciao e grazie della risposta ma non credo sia un problema di interpretazione del segno: in entrambi i casi infatti ottieni comunque lo stesso angolo a meno del segno.
Se ad esempio io ottenessi -15 al posto di 15, in base alla posizione dello spazio capirei che c'è un problema di segno.
Qui invece il valore restituito è proprio diverso, c'è quasi un grado di differenza e l'errore sul calcolo di phi nel primo caso aumenta all'aumentare di teta (e viceversa nel secondo caso!)

Sentenza1
Ragazzi chiedo scusa per la domanda inappropriata e fuori luogo. Solo che vorrei chiedere: dissonance, scusami, ma quale programma hai usato per tracciare quei grafici? Lo sto cercando da mesi. Grazie mille.

dissonance
@ Sentenza: Mesi addirittura! :-) Bastava guardare meglio sul forum:

https://www.matematicamente.it/forum/com ... 26628.html

Sentenza1
Grazie mille.

fenestren
Ho provato a sostituire l'atan2 con l'atan, facendo attenzione al campo di applicabilità diverso tra le due formule, ma il risultato sembra essere lo stesso: mi suona di errore sistematico, ma non capisco il perchè.

Ho pensato che, trattandosi di seni e coseni nelle matrici di rotazione, dal momento che valgono sempre e comunque meno di 1, mi si mangi qualcosa nel valore una volta che provo a ricostruirli...ma come mai solo uno dei due???

Grazie per il vostro aiuto!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.