Data una linea sulla superficie terrestre, come posso tracciare una linea perpendicolare ad essa?


9

Data una linea sulla superficie terrestre, come posso tracciare una linea perpendicolare ad essa?

Ci scusiamo se questa è una domanda molto semplice. Ho pensato che sarebbe stato un compito semplice, ma si sta rivelando controintuitivo.

Comincio con la linea blu nella figura sotto (vedi link - Non riesco ancora a caricare le cifre). Ho trovato una linea perpendicolare calcolando il gradiente della linea blu (m), quindi tracciando un'altra linea (verde) con gradiente -1 / m. Quando tracciamo le linee in Matlab (usando "trama" e "asse uguale"), sembrano perpendicolari, come previsto.

http://imgur.com/7qMkx

Tuttavia, quando esporto queste linee su Google Earth (utilizzando la Casella degli strumenti KML), non sembrano più perpendicolari (vedere il collegamento seguente; la linea più corta è la linea blu della figura precedente).

http://imgur.com/ncJQ7

Capisco che accadano cose strane su superfici curve, ma ho pensato che le linee dovessero almeno apparire perpendicolari a livello locale. Sospetto che ciò abbia a che fare con la proiezione in Google Earth - in particolare, il fatto che le celle della griglia sembrano avere lunghezze laterali approssimativamente simili, ma il bordo longitudinale ha lunghezza = 1 grado, mentre il bordo latitudinale ha lunghezza = 0,5 grado.

Quindi, in sintesi:

  • il mio metodo per trovare una linea perpendicolare è valido su una superficie curva? (ovvero, tracciare una linea con gradiente -1 / m)
  • nell'immagine di Google Earth, le linee perpendicolari sembrano come previsto o sta succedendo qualcosa di strano?

AGGIORNARE:

Per fornire più contesto: sto guardando i dati radar presi da un aereo. L'area multicolore è la 'fascia', in cui sono state registrate osservazioni. La linea blu con cui ho iniziato nella spiegazione sopra è parallela all'andana: questa è la linea di volo del velivolo (l'aereo si stava muovendo nella direzione sud-ovest). Il radar guarda nella direzione ortogonale alla linea di volo, a sinistra. Sto cercando di tracciare una linea perpendicolare alla linea di volo; questa dovrebbe essere la direzione in cui sta guardando il radar e dovrebbe tagliare l'andana in modo ordinato. Come puoi vedere, non è così.

inserisci qui la descrizione dell'immagine


2
In realtà, Google ritrae l'angolo correttamente, mentre la trama di Matlab non ...
whuber

Grazie per la risposta, whuber. Significa che la linea che ho calcolato non è, in effetti, perpendicolare all'originale? O significa che il modo in cui visualizzo le linee in Matlab è in qualche modo sbagliato? Ho usato il comando 'axis equal' in Matlab per convincermi che le linee sono perpendicolari, ma mi aspetto che ciò non rappresenti correttamente la curvatura della terra.
Paul Keating,

2
La tua prima interpretazione è corretta, Paul. L'uso di (lon, lat) come se fossero coordinate cartesiane distorce le direzioni in modo così grave che la maggior parte degli angoli è visibilmente distorta. Pertanto, usando la formula cartesiana -1 / m non ti avvicinerai nemmeno ad un angolo retto se non in un paio di direzioni fortunate (o all'equatore). Per fornire un metodo alternativo, sarebbe utile sapere quale tipo di "linea" desideri (geodetica o rombi, ad esempio), il tuo scopo nel tracciarlo e quanto tempo dovrebbe essere. (Le lunghezze brevi consentono di utilizzare approssimazioni semplici.)
whuber

2
A proposito, puoi imparare molto su questi problemi leggendo alcuni dei thread sul nostro sito sulle proiezioni conformi .
whuber

Grazie mille, whuber. Molto interessante. Ho fornito più contesto nella descrizione del problema, sopra. La lunghezza di cui ho bisogno è relativamente breve (la larghezza dell'andana, mostrata sopra, che è di alcuni decimi di grado), quindi qualsiasi suggerimento su approssimazioni valide sarebbe molto apprezzato. Grazie anche per il link: lo controllerò.
Paul Keating,

Risposte:


10

Un principio elegante fornisce una risposta semplice:

Tutti i punti su una superficie curva liscia sono piatti su una scala sufficientemente grande.

Ciò significa che dopo il cambiamento affine delle coordinate (che di solito implica solo il riscalaggio di una di esse), possiamo usare le formule della geometria euclidea, come il Teorema di Pitagora per calcolare le distanze e la formula della pendenza reciproca negativa per trovare perpendicolari.

Con le coordinate di latitudine e longitudine sulla sfera (lontano dai poli, dove la longitudine diventa singolare), tutto ciò che dobbiamo fare è ridimensionare la direzione est-ovest per riflettere la riduzione della lunghezza di un grado di longitudine mentre ci si avvicina ai poli. Con un modello sferico della terra, quel restringimento è dato dal coseno della latitudine. Questo è semplicemente un cambiamento nelle proporzioni della trama, niente di più.

Questo funziona per le regioni che si estendono non più di qualche grado di latitudine nord-sud e non si avvicinano a nessuno dei due poli.

Pertanto, tutto ciò che devi fare è:

  1. Moltiplica tutte le longitudini per il coseno di una latitudine tipica.

  2. Calcola la linea perpendicolare.

  3. Annulla la regolazione delle coordinate.

Ad esempio, supponiamo che la traccia dell'aereo abbia preso da (lon, lat) = (-78, 40) a (-79, 41). Potremmo prendere una latitudine tipica tra 40 e 41, come 40.5.

Passaggio 1 Le coordinate modificate sono (-78 * cos (40.5), 40) = (-59.31167, 40) e (-79 * cos (40.5), 41) = (-60.07207, 41).

Passaggio 2 La domanda propone di farlo utilizzando un metodo di pendenza reciproca negativa. Sarebbe corretto, ma fallirà in alcuni casi (dove la pendenza è infinita). È più generale e più potente usare l'aritmetica vettoriale. Ecco come va il calcolo.

Il vettore di direzione per il percorso del volo è lo spostamento dall'inizio alla fine,

v =  (-60.07207, 41) - (-59.31167, 40)
  =  (-0.7604, 1.0).

Ruotando qualsiasi vettore (x, y) ad angolo retto in senso orario si produce (y, -x), da cui una direzione perpendicolare a destra è

w = (1.0, 0.7604).

Secondo il Teorema di Pitagora, la lunghezza di questo vettore è la radice quadrata della somma dei quadrati dei suoi coefficienti,

|w| = sqrt(1^2 + 0.7604^2) = 1.256268

Spostiamo, diciamo, di 0,2 gradi lungo questo vettore dal punto di partenza del volo dell'aereo. L'inizio è alle (-59.31167, 40) e lo spostamento è 0,2 / | w | volte w, finendo a

(-59.31167, 40) + 0.2 / 1.256268 * (1.0, 0.7604) = (-59.15247  40.12106).

Passaggio 3 Per annullare la regolazione, dividere le prime coordinate di tutti i punti risultanti per lo stesso coseno utilizzato nel passaggio 1:

(-59.15247/cos(40.5), 40.12106) = (-77.79064, 40.12106)

Se tracciate questi punti usando un rapporto 1: 1, l'angolo apparirà ottuso piuttosto che ad angolo retto. Ma se si modificano le proporzioni su 1: cos (40.5) (circa 4: 3), l'angolo apparirà correttamente di 90 gradi. Quando traccia i punti utilizzando una proiezione conforme, incluso Mercator di Google, anche l'angolo sarà corretto.


2
Questo è fantastico, whuber. Grazie mille. È una spiegazione molto chiara di dove sto sbagliando e come posso risolvere il problema. Ho finito per usare le funzioni 'azimut' e 'reckon' di Matlab per ottenere la linea perpendicolare, ma è bello vedere una spiegazione più dettagliata dei primi principi su come farlo. Grazie molto.
Paul Keating,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.