Domanda

Sto cercando di verificare la posizione di un punto (px, py) sul grafico 2D in relazione a un segmento di linea (lx1, ly1) (lx2, ly2), usando la logica delle direzioni Nord Sud Est Ovest. La logica che ho implementato è disegnare un punto perpendicolare sul segmento di linea dal punto.

se la perpendicolare è in linea significa che è a sud.

Se il punto sul lato destro indica la sua Est.

Se il punto sul lato sinistro significa Ovest.

Se la perpendicolare è lontana dalla linea in avanti, significa Nord.

Se la perpendicolare è lontana dalla linea in direzione arretrata, significa Sud.

Il mio problema è che questa logica sembra buona sulla carta, ma sta diventando davvero difficile decidere se si tratta di un caso NW, NE, SW o SE. Qualcuno può suggerirmi come calcolare questa logica ?? Sto usando C ++, ma l'algoritmo in qualsiasi lingua sarà di grande aiuto.

Sto usando il punto finale del segmento di linea per calcolare la relazione Nord Sud Est Ovest.

Saluti

È stato utile?

Soluzione

  • delta_x = x2 - x1
  • delta_y = y2 - y1
  • distance = sqrt (delta_x ^ 2 + delta_y ^ 2)
  • tan (theta) = delta_y / delta_x
  • theta = arctan (delta_y / delta_x) ;; ma non dividere per zero!
  • moltiplica theta per 180 / PI per ottenere gradi

I gradi sono in senso antiorario dal lato positivo dell'asse x. Alla fine dovrai fare una piccola quantità di algebra per riorientare i gradi in modo che 0 sia in alto (anziché a destra) e corra in senso orario. Ma prima di ciò:

Un problema è che arctan (1 / -1) è uguale a arctan (-1 / 1) . Cioè , otterrai -PI / 4 radianti o -45 gradi, sia in alto a sinistra (ha bisogno di un offset di 180 gradi) che in basso a destra (ok come è). Dovrai fare dei test sul segno di delta_y vs. delta_x per vedere se il risultato di arctan deve essere modificato.

Prima di codificare la soluzione, assicurati di codificare anche i test per assicurarti che le funzioni che stai chiamando producano valori previsti.

Altri suggerimenti

Sono d'accordo con ndim . Calcolare la direzione da un punto all'altro è facile. Non capisco quale contesto richiederebbe la tua direzione da una linea. È un'applicazione di mappatura? C'è una strada e circa a metà lungo un tratto di strada hai un punto sul lato?

La semantica di ciò che " nord " o " NE " oppure "est" di un segmento di linea in realtà significa che non è chiaro.

Indicazioni come " nord " oppure "est" o " NE " vengono generalmente utilizzati per descrivere la posizione di un punto rispetto a un altro punto (base). Qual è il punto sul segmento di linea che stai usando come punto base?

MODIFICA: Ora che dici di voler usare il punto finale (x2, y2) come punto centrale per la bussola, un punto (x , y) verrà posizionato rispetto alla bussola esaminando il vettore delta (x-x2, y-y2) .

Il facile ragionamento sul metodo utilizza atan2 () sul vettore delta e considera l'angolo restituito da atan2 () .

Tuttavia, potrebbe anche essere una buona idea confrontare gli argomenti con atan2 () tra loro e determinare gli intervalli di angolo risultanti da quello. Questo in pratica evita di chiamare atan2 () in fase di esecuzione a spese della necessità di eseguire alcuni calcoli in fase di compilazione (o prima).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top