2010-07-25 11 views
6

Fondamentalmente, proiettando la luce come una torcia elettrica e controllando se un punto - ho solo bisogno di controllare un punto, ma non sarebbe male poterne controllare più di uno - è nella zona illuminata da esso o no .Algoritmo per proiettare la luce e rilevare se un dato punto rientra in esso?

Inoltre, presumo che la maggior parte degli algoritmi (tutti?) Funzionino in 2D/3D, ma sarebbe possibile utilizzarne uno che funzioni in uno spazio N-dimensionale? Mi interessa solo se è utilizzabile per un numero arbitrario di dimensioni con una ragionevole complessità.

+0

C'è geometria che la luce sta colpendo che dobbiamo prendere in considerazione, o è nello spazio vuoto e vuoi solo determinare se un punto si trova in un cono n-dimensionale? –

+0

@John Kugelman: solo nodi e coni di luce, quindi nessuna geometria. Ma i coni di luce non possono sovrapporsi, quindi se i coni vicini dovessero "toccare", dovrei considerare una "linea" tra loro. Ogni coordinata può essere considerata nell'intervallo [-1,1] se rende più semplice. – gendum

+0

possibile duplicato di [Come si verifica se un punto si trova all'interno di una cerchia?] (Http://stackoverflow.com/questions/481144/how-do-you-test-if-a-point-is-inside-a -circle) –

risposta

2

Supponendo che hai un vettore normalizzato n punta nella direzione del cono di luce, una luce alla Pl, e punto di prova a Pp, e la metà cono angolo di theta, si può fare il test come questo (indipendente la dimensionalità dello spazio):

vector Vl = Pl + n 
vector Vp = Pp - Pl 

phi = acos(dot(Vl, Vp)/(||Vl|| * ||Vp||)) 

if phi <= theta 
    p in light cone 
else 
    p not in light cone 

Qui punto (a, b) è il prodotto scalare dei due vettori (a1 * b1 + ... + un * BN) e || a || è la grandezza del vettore a, sqrt (a1 * a1 + ... + an * an).

L'idea di base è di calcolare l'angolo tra la linea centrale del raggio di luce e il vettore dalla sorgente luminosa al punto di interesse. Se quell'angolo è più grande dell'angolo (mezzo) del riflettore, il punto di interesse è al di fuori del raggio - altrimenti è all'interno.

Nota che le luci reali non si tagliano in modo preciso, ma questo ti farà iniziare.

Problemi correlati