2010-07-25 8 views
6

Básicamente, proyectar la luz como una linterna y verificar si un punto -solo necesito verificar un punto, pero no estaría mal poder verificar más de uno- está en el área iluminada o no .Algoritmo para proyectar luz y detectar si un punto dado cae dentro de él?

Además, supongo que la mayoría (¿todos?) De los algoritmos funcionan en 2D/3D, pero ¿sería posible usar uno que funcione en un espacio N-dimensional? Solo me interesa si se puede usar para un número arbitrario de dimensiones con una complejidad razonable.

+0

¿Hay geometría que está afectando a la luz que debemos tener en cuenta, o está en un espacio vacío y solo quiere determinar si un punto se encuentra en un cono n-dimensional? –

+0

@John Kugelman: Solo nodos y conos de luz, por lo que no hay geometría. Pero los conos de luz no se pueden superponer, por lo que si los conos vecinos fueran a "tocar", tendría que considerar esa "línea" entre ellos. Cada coordenada podría considerarse en el rango [-1,1] si lo hace más fácil. – gendum

+0

posible duplicado de [¿Cómo se prueba si un punto está dentro de un círculo?] (Http://stackoverflow.com/questions/481144/how-do-you-test-if-a-point-is-inside-a -circle) –

Respuesta

2

Suponiendo que tienes un vector normalizado n que apunta en la dirección del cono de luz, una luz al Pl, y el punto de prueba en Pp, y la mitad de cono de ángulo theta, se puede hacer la prueba de este tipo (independiente de la dimensionalidad de su espacio):

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 

Aquí punto (a, b) es el producto escalar de los dos vectores (A1 * B1 + ... + an * bn) y || a || es la magnitud del vector a, sqrt (a1 * a1 + ... + an * an).

La idea básica es determinar el ángulo entre la línea central del haz de luz y el vector desde la fuente de luz hasta el punto de interés. Si ese ángulo es más grande que el foco (medio) ángulo, el punto de interés está fuera del haz; de lo contrario, está adentro.

Tenga en cuenta que las luces reales realmente no se cortan tan bruscamente, pero esto lo ayudará a comenzar.

Cuestiones relacionadas