Controlla se un punto si sta allontanando da un percorso fatto da un insieme di segmenti di linea

1

Mi piacerebbe sapere o avere altre idee, diversa dalla mia soluzione, su come verificare se un'auto in una determinata posizione (lat, lng) sta scappando (diciamo a una certa distanza D) dal percorso in cui la macchina dovrebbe andare oltre. Un'altra condizione per il mio problema è che ci saranno query con diversi punti (posizioni della macchina) sullo stesso percorso.

Ho proposto questo problema come:

Dato un percorso P definito come un insieme di segmenti di linea continua, cioè {(x1, y1); {(x2, y2)}; {(x2, y2); (x3, y3)}; e così via. Dove xey dovrebbero essere latitudine e longitudine; un punto interrogativo Q = (x, y) e una distanza D che è la distanza massima Q può deviare dal percorso P. Verificare se un punto Q si discosta da P su una distanza maggiore di D.

Il mio approccio utilizza la geometria di base.

Poiché Q sarà sempre diverso, la mia idea è di creare un triangolo tra Q e tutti i segmenti nel percorso P e verificare quale tipo di triangolo è (giusto, acuto o ottuso) se il triangolo è ottuso Non lo considero e segna come Q devia da quel segmento; se il triangolo è acuto o a destra, calcolo la distanza perpendicolare tra Q e il segmento. Quindi confronto questa distanza con D e salvo se Q sta deviando da S (in base alla distanza calcolata). Infine, dico che non c'è nessuna deviazione se c'è almeno un segmento dal quale Q non sta deviando, cioè la distanza tra Q e un segmento non è maggiore di D.

Ecco uno pseudo-codice per il mio approccio:

isDeviatingFromSegment = [all False]
for each segment S in P:
   if triangule between S and Q is right or acute:
       tempDistance = PerpendicularDistanceB(Q, S)
       if tempDistance > D:
           isDeviatingFromSegment[S] = True
   else
       isDeviatingFromSegment[S] = True

answer = Q_IS_DEVIATING
for item in isDeviatingFromSegment:
     if item is False:
         answer = Q_IS_NOT_DEVIATING

Come puoi vedere, per ogni query iterò l'intero percorso che è lineare. Mi chiedo se ho a che fare con il problema o se dovrei usare una struttura dati per ridurre il tempo di interrogazione, o magari studiare un'altra teoria che si adatta meglio a questo problema.

Grazie in anticipo.

    
posta Sergio Guillen Mantilla 20.10.2016 - 05:22
fonte

0 risposte

Leggi altre domande sui tag