Matrici di rotazione e atan2
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.
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
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.
[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.
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!)
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!)
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.
@ Sentenza: Mesi addirittura!
Bastava guardare meglio sul forum:
https://www.matematicamente.it/forum/com ... 26628.html

https://www.matematicamente.it/forum/com ... 26628.html
Grazie mille.
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!
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!