2010-10-27 16 views
5

¿Cómo puedo detectar si una línea (dirección d y -d desde el punto p) y un segmento de línea (entre los puntos p1 y p2) se cruzan en 2D? Si lo hacen, ¿cómo puedo obtener su punto de intersección?Intersección del segmento de línea y línea

Hay muchos ejemplos de cómo detectar si dos segmentos de línea se cruzan, pero esto debería ser aún más simple.

I encontraron esta pero no entienden lo que es un lado del operador: http://www.loria.fr/~lazard//ARC-Visi3D/Pant-project/files/Line_Segment_Line.html

+0

Por favor, publique sus expresiones para la línea y el segmento, para que podamos alinear las respuestas. Tnx! –

+0

¿Es esto una tarea en 2D o en 3D? – user434507

Respuesta

5

Si esta es una tarea 2D (la línea y la mentira segmento en el mismo plano y que se especifican por 2-dimensional coordenadas), es fácil.

Construya un vector que sea normal a d (la dirección de la línea).

Calcular productos dot d * (p1-p) y d * (p2-p). Si tienen el mismo signo, no hay intersección. Si tienen signos opuestos, hay una intersección. Con un poco de pensamiento, puede averiguar cómo calcular la ubicación de la intersección en términos de p, p1-p y p2-p.

+0

¿Por qué necesitas construir un vector que sea normal a d? Parece que no utilizas en la explicación siguiente ... –

+0

Creo que lo que llamas "d" en los siguientes productos de punto es en realidad la dirección normal. –

3

Puede simplemente verificar si dos líneas (su línea y una línea del segmento de línea) intersectan y evalúan el punto de intersección.

línea 1: (x, y) (t) = p + t * d; línea 2: (x, y) (t) = P1 + k * (p2 - p1)

En el punto de intersección: p + t * d = p1 + k * (p2 - p1) - dos ecuaciones (por x y por año)

De esas ecuaciones simplemente puede encontrar los parámetros kyt.Si 0 < k < 1 el punto de intersección es de (p1, p2)

Si sabe k o T puede simplemente calcular el punto de intersección de (x, y) (t) = p + t * d o (x, y) (t) = p1 + k * (p2 - p1)

0

dejó p(x,y) y a su dirección la ecuación de línea es D = a.x+b donde b = y - a.x

vamos p1(x1,y1) y p2(x2,y2) un segmento que ecuación es D' = a'.x+b' para cualquier x en [x1;x2] donde a' = (y2-y1)/(x2-x1) y b' = y2 - a'.x2 = y1 - a'.x1

que tienes una intersección si hay un x entre [x1;x2] para los que D = D' tanto si pertenecen a X = (b'-b)/(a-a')[x1;x2] continuación Y = a.X+b = a'.X+b le da el punto P(X,Y)

intersección por ejemplo:

dejar p(255,255), a = 1 =>b = 0

vamos p1(60,179) y p2(168,54)

=>a' = -125/108

=>b' = 24596/99

=>X = (24596/99 - 0)/(1+125/108) = 115,1587983

=>Y = (24596/99 - 0)/(1+125/108) = 115,1587983

X es entre 60 y 168 por lo que no es una intersecarse ion point at P(X,Y)

Cuestiones relacionadas