Azimut
Salve a tutti,
ho trovato un programma Matlab per calcolare l'azimut dati longitudine e latitudine di due punti. A me servirebbe in pratica per capire in che direzione è il secondo punto rispetto al primo.
Vorrei chiedervi se secondo voi questo programma così scritto è corretto (l'ho tagliato da un programma più grande e non vorrei essermi perso qualcosa):
Un'altra domanda i "..." sarebbero solo per indicare l'accapo? ed il ".*" invece cosa indica?
ho trovato un programma Matlab per calcolare l'azimut dati longitudine e latitudine di due punti. A me servirebbe in pratica per capire in che direzione è il secondo punto rispetto al primo.
Vorrei chiedervi se secondo voi questo programma così scritto è corretto (l'ho tagliato da un programma più grande e non vorrei essermi perso qualcosa):
function az = greatcircleaz(lat1,lon1,lat2,lon2) % Inputs LAT1, LON1, LAT2, LON2 are in units of radians. az = atan2(cos(lat2) .* sin(lon2-lon1),... cos(lat1) .* sin(lat2) - sin(lat1) .* cos(lat2) .* cos(lon2-lon1)); % Azimuths are undefined at the poles, so we choose a convention: zero at % the north pole and pi at the south pole. az(lat1 <= -pi/2) = 0; az(lat2 >= pi/2) = 0; az(lat2 <= -pi/2) = pi; az(lat1 >= pi/2) = pi;
Un'altra domanda i "..." sarebbero solo per indicare l'accapo? ed il ".*" invece cosa indica?
Risposte
"Neptune":
Salve a tutti,
ho trovato un programma Matlab per calcolare l'azimut dati longitudine e latitudine di due punti. A me servirebbe in pratica per capire in che direzione è il secondo punto rispetto al primo.
Ok ma cosa vuol dire esattamente ?
Immagino che se traccio due semi-rette dal centro della terra ai due punti, tu voglia sapere l'angolo tra queste due rette,
giusto ?
Vorrei chiedervi se secondo voi questo programma così scritto è corretto (l'ho tagliato da un programma più grande e non vorrei essermi perso qualcosa):
function az = greatcircleaz(lat1,lon1,lat2,lon2) % Inputs LAT1, LON1, LAT2, LON2 are in units of radians. az = atan2(cos(lat2) .* sin(lon2-lon1),... cos(lat1) .* sin(lat2) - sin(lat1) .* cos(lat2) .* cos(lon2-lon1)); % Azimuths are undefined at the poles, so we choose a convention: zero at % the north pole and pi at the south pole. az(lat1 <= -pi/2) = 0; az(lat2 >= pi/2) = 0; az(lat2 <= -pi/2) = pi; az(lat1 >= pi/2) = pi;
Un'altra domanda i "..." sarebbero solo per indicare l'accapo? ed il ".*" invece cosa indica?
Si direi che la funzione scritta nel codice è :
$az=arctan(cos(\phi_2)sin(\theta_2-\theta_1)cos(\phi_1)-sin(\phi_1)cos(\phi_2)cos(\theta_2-\theta_1))$
chiamando la latitudine $\phi$ e la long. $\theta$
Si può anche semplificare
$az=arctan(cos(\phi_2)sin(\theta_2-\theta_1-\phi_1))$
Comunque non credo che sia corretta, se l'angolo che cerchi è quello che ti ho definito prima. Basta provare con qualche posizione notevole e ti accorgi che non funziona.
Viceversa io ottengo questa espressione:
$az=arccos( sin(\phi_1) sin(\phi_2) cos(\theta_1-theta_2) + cos(\phi_1) cos(\phi_2))$
Vedi se ti può piacere e se funziona...
Praticamente voglio questo:
http://it.m.wikipedia.org/wiki/Azimut
Credo che si sia esattamente ciò che hai detto tu. Inoltre mediante quell'angolo riesco anche a capire in che direzione (nord, sud ecc) si trova il punto di destinazione rispetto quello di origine.
La tua formula invece da dove deriva ? Sinceramente non sono granché come matematico, questa formula mi serve per realizzare un software di navigazione. Il problema é che non mI vorrei basate solo su un paio di esempi di prova..
Edit: mi sono accorto che hai fatto confusione, nella mia formula ce la funzione arcatn2 una funzione a due parametri che se vedi sono separati da una virgola. Tu invece l'hai trasformata in arctan normale e l'hai stravolta.
Il segno .* invece significa il normalissimo prodotto quindi ?
Dici che funziona anche su scilab quella formula così ? Devo vedere di fare qualche prova al volo..
http://it.m.wikipedia.org/wiki/Azimut
Credo che si sia esattamente ciò che hai detto tu. Inoltre mediante quell'angolo riesco anche a capire in che direzione (nord, sud ecc) si trova il punto di destinazione rispetto quello di origine.
La tua formula invece da dove deriva ? Sinceramente non sono granché come matematico, questa formula mi serve per realizzare un software di navigazione. Il problema é che non mI vorrei basate solo su un paio di esempi di prova..
Edit: mi sono accorto che hai fatto confusione, nella mia formula ce la funzione arcatn2 una funzione a due parametri che se vedi sono separati da una virgola. Tu invece l'hai trasformata in arctan normale e l'hai stravolta.
Il segno .* invece significa il normalissimo prodotto quindi ?
Dici che funziona anche su scilab quella formula così ? Devo vedere di fare qualche prova al volo..
Allora il mio esempio non va bene.
Cosa stai osservando tu ? Una stella ? Un punto sulla superficie della terra ?
L'azimut è quell'angolo che misura una comune bussola. Giusto ?
In quel casi hai due piani:
- uno formato da questi 3 punti (il centro della terra, tu, il polo nord)
- l'altro formato da (il centro della terra, tu, l'oggetto osservato)
E' così ?
Cosa stai osservando tu ? Una stella ? Un punto sulla superficie della terra ?
L'azimut è quell'angolo che misura una comune bussola. Giusto ?
In quel casi hai due piani:
- uno formato da questi 3 punti (il centro della terra, tu, il polo nord)
- l'altro formato da (il centro della terra, tu, l'oggetto osservato)
E' così ?
esattamente come dici tu. Mi serve per calcolare le rotte per le navi (o almeno per approssimarle), quindi si suppone che l'altitudine non influenzi il nostro calcolo stando sempre alla quota del mare.
Il programma postato l'ho caricato su scilab con qualche piccola correzione:
Alla fine del calcolo ad az dobbiamo sommare 180 perché altrimenti i gradi ci escono in negativo, e non saprei poi come interpretarli sulla bussola. Con 180 mi escono finalmente cifre positive ma ovviamente mi esce la direzione direttamente opposta.
Ho fatto qualche prova e sembra andare, però vorrei una conferma "matematica" se quanto scritto è effettivamente giusto.
Il programma postato l'ho caricato su scilab con qualche piccola correzione:
function a = atan2(y,x) if y >= 0 then a=acos(x/sqrt((x^2)+(y^2))); end if y<0 then a=-(acos(x/sqrt((x^2)+(y^2)))); end endfunction function az = greatcircleaz(lat1,lon1,lat2,lon2) //trasformazione da gradi in radianti lat1=2*3.14*(lat1/360); lon1=2*3.14*(lon1/360); lat2=2*3.14*(lat2/360); lon2=2*3.14*(lon2/360); a=(cos(lat2)*sin(lon2-lon1)); b=((cos(lat1)*sin(lat2))-(sin(lat1)*cos(lat2)*cos(lon2-lon1))); az = atan2(a,b); //trasformazione di az da radianti in gradi az=az*((360)/(2*3.14)) //conversione in gradi sulla bussola az=180+az; //az(lat1 <= -pi/2) = 0; //az(lat2 >= pi/2) = 0; //az(lat2 <= -pi/2) = pi; //az(lat1 >= pi/2) = pi; endfunction
Alla fine del calcolo ad az dobbiamo sommare 180 perché altrimenti i gradi ci escono in negativo, e non saprei poi come interpretarli sulla bussola. Con 180 mi escono finalmente cifre positive ma ovviamente mi esce la direzione direttamente opposta.
Ho fatto qualche prova e sembra andare, però vorrei una conferma "matematica" se quanto scritto è effettivamente giusto.