2011-03-08 18 views
7

Está bien, estoy intentando que funcione un algoritmo de teorema de eje de separación (para la detección de colisiones) y necesito encontrar el vector perpendicular mínimo entre un punto y una línea. No estoy pidiendo la distancia perpendicular mínima (que sé cómo encontrar) sino el vector que tendría la misma magnitud que esa distancia y que va desde un punto arbitrario y un punto en la línea. Sé la ubicación del punto, un punto en la línea y un vector unitario que indica la dirección de la línea.Vector perpendicular mínimo entre un punto y una línea

Lo que intenté hacer fue encontrar primero la distancia mínima entre el punto y la línea.

La siguiente parte es confuso, pero I: 1) encontrado el vector entre el punto y el punto de la línea que sé 2) Encontrado el vector entre el punto de la línea y el punto de la línea, más la unidad vector que da la dirección de la línea 3) Tomó el producto cruzado de estos dos vectores (llamaré a este producto cruzado A) 4) Tomó el producto cruzado del vector unitario dando la dirección de la línea y el vector de la cruz producto A (Llamaré a este producto cruzado B) 5) Producto cruzado normalizado B 6) Producto cruzado a escala B por la distancia mínima

De todos modos, todo empt falló miserablemente. ¿Alguien puede decirme cómo se supone que debo encontrar este vector?

+0

se desea escribir un programa para hacer esto, o simplemente tratando de hacer su tarea/Calc Física? –

+2

Es para un juego que estoy escribiendo por diversión, como dije, es para detección de colisión. – user421215

Respuesta

24

Si he entendido bien su pregunta, creo que esto es lo que está buscando:

P - point 
D - direction of line (unit length) 
A - point in line 

X - base of the perpendicular line 

    P 
    /| 
/| 
/v 
A---X----->D 

(P-A).D == |X-A| 

X == A + ((P-A).D)D 
Desired perpendicular: X-P 

donde el período representa el producto escalar y | X-A | significa magnitud.

+0

Solo para aclarar el. representa el producto punto, ¿verdad? – user421215

+0

Derecha. Eso es lo que quise decir con "periodo" :) – Pablo

+0

lo perdí. De todos modos, parece que quiere funcionar, pero por alguna razón mi algoritmo SAT está un poco apagado. Las cosas están colisionando cuando no deberían. Estoy pensando que lo que me diste probablemente funcione, ya que las colisiones parecen "más correctas" ahora, y tengo todo tipo de marcadores que parecen estar más orientados ahora. Muchas gracias, pero desafortunadamente parece que cometí algún otro tipo de error en el código. – user421215

2

enter image description here

En la figura anterior, se tiene:

q = p + s --> s = q - p = q - (p2-p1) = q + p1 - p2 

==> s^ = |q - p2 - p1|/|s| (unitary vector) 

Also: |s| = |q| sin c = |q|sin(b-a) 

b = arcsin (qy/|q|); a = arcsin(p1y/|p1|) 

where: |q| = (qx^2 + qy^2)^1/2 
Cuestiones relacionadas