Marcatura dei punti della griglia all'interno di un piccolo cerchio su una sfera

7

Ho una piccola cerchia (su una sfera) con un dato centro e raggio e voglio segnare punti della griglia che sono all'interno della piccola cerchia.

La griglia stessa è discretizzata in gradi di latitudine e longitudine uniforme in una mappa geografica.

Il mio semplice algoritmo che ho implementato per risolvere questo problema va dal centro del piccolo cerchio in piccoli passi al bordo esterno del piccolo cerchio e segna tutti i punti sulla strada. Questo viene ripetuto per tutti gli angoli di azimuth da 0 a 360 °.

L'algoritmo di cui sopra non è solo tremendamente lento, ma richiede anche gli angoli di incremento corretti per non perdere i punti e nemmeno per essere più lento.

Qualche idea per un buon algoritmo?

Sono consapevole che la mia domanda va in direzione dell'algoritmo di riempimento, ma ci ho pensato un po 'e sembra che per me non abbia grandi vantaggi.

    
posta Domenico 01.10.2016 - 22:29
fonte

1 risposta

4

Sulla base dei KISS atteniamoci a una sfera. Lascia che il centro del cerchio abbia latitudine φ e longitudine θ . Converti il raggio del cerchio in un angolo ψ = r / R . Poiché le linee di longitudine costante sono grandi cerchi (bene, semicerchi, poiché la longitudine cambia ai poli), le latitudini coperte dal cerchio sono da φ - ψ a φ + ψ , limitate a non scendere sotto -90 gradi o sopra + 90 gradi.

Quantizza le latitudini alla tua griglia, e quindi per una data latitudine quantizzata λ dobbiamo ottenere l'intervallo di longitudini. Ovviamente è simmetrico attorno a θ (a condizione che stiamo attenti a come parliamo di longitudine vicino a & pm; 180 gradi). In effetti, i punti che si trovano sulla circonferenza del piccolo cerchio sono (λ, μ) dove

cos φ cos λ cos (θ - μ) + sin φ sin λ = cos ψ

Risolvi per μ . Se non puoi, è perché l'intera linea di latitudine è all'interno del cerchio, che può accadere vicino ai poli.

Se si desidera ottimizzare, è possibile utilizzare le approssimazioni di Taylor per sin e cos per ottenere valori che possono essere rapidamente aggiornati e utilizzare solo trig quando l'errore accumulato è tale che c'è più di un punto della griglia candidato.

    
risposta data 07.10.2016 - 12:27
fonte

Leggi altre domande sui tag