Come faccio a sapere quale linea ha collegato due quadrati?

4

Nell'algoritmo Permissive Field of View , il riquadro di destinazione è visibile da un quadrato sorgente se è possibile tracciare una linea non ostruita dal riquadro sorgente al quadrato di destinazione. L'algoritmo funziona definendo una serie di campi di visualizzazione (in sostanza, triangoli) e controllando se il quadrato di destinazione esiste all'interno di un campo di visualizzazione.

Purtroppo, l'algoritmo non rende disponibile la linea effettiva trovata tra il quadrato di origine e il quadrato di destinazione; ti dice solo se tale linea è garantita.

Come posso trovare la linea, presumendo che sia garantita?

Ho provato a tracciare linee tra i bordi del quadrato sorgente ai bordi del quadrato di destinazione, ma apparentemente è solo un'approssimazione (non riesce a trovare la linea).

    
posta Mr. Smith 15.01.2014 - 18:20
fonte

1 risposta

1
  1. Trova tutti i quadrati che si trovano tra l'origine e la destinazione. (Ad esempio, tutti i quadrati che intersecano un riquadro di delimitazione).
  2. Esegui una rotazione 2d di tutti i quadrati (incluso src & dest) in modo che una linea che collega l'origine e la destinazione sia perpendicolare all'asse x.
  3. Esegui una proiezione ortografica dei quadrati in 1d spazio. Cioè schiacciarli a intervalli
  4. Prendi l'intervallo sorgente e sottrai gli intervalli di tutti gli altri quadrati da esso. (Forse usando qualcosa come un albero ad intervalli .)
  5. L'intersezione tra l'intervallo sorgente sottratto e la destinazione darà un intervallo di linee che collegano i due quadrati. (A causa dell'imprecisione in virgola mobile dopo tutti questi calcoli, potresti voler filtrare con un piccolo epsilon.)
  6. Proietta l'intervallo di nuovo nello spazio 2d e ruota di nuovo nella base originale e disponi di un insieme di linee che collegano i due quadrati.

Questo dovrebbe essere in grado di calcolare sia se la destinazione è visibile e l'insieme di tutte le linee che le connettono.

    
risposta data 15.01.2014 - 21:36
fonte

Leggi altre domande sui tag