Introducción a la Programación
Trimestre 2011 Primavera --- Tarea 2 versión A

Intersección de Segmentos

Recordarás que dos puntos distintos en el plano determinan una única recta. Similarmente dos puntos en el plano determinan un segmento, el cual consiste únicamente de los puntos en la recta que los une y que se encuentran entre ellos (incluyéndolos). También recordarás que dos rectas en el plano o bien son paralelas o bien se intersectan en un único punto. Con los segmentos ocurre algo distinto, pues es posible que no se intersecten aún sin ser paralelos. Considera por ejemplo los tres segmentos P determinado por los puntos extremos (2,1) y (3,2), Q determinado por los puntos extremos (1,3) y (3,4) y R determinado por los puntos extremos (4,1) y (1,4). Observa que P y Q no se intersectan, P y R se intersectan en (3,2) y Q y R se intersectan en (5/3, 10/3) = (1.666666..., 3.333333...). Dados dos segmentos cualesquiera (que no sean paralelos y ninguno de los cuales sea horizontal ni vertical) determinados por sus puntos extremos, deberás determinar si estos se intersectan o no y, en su caso, deberás calcular las coordenadas del punto de intersección.

Especificación

La entrada consiste de ocho números positivos de punto flotante: x1, y1, x2, y2, x3, y3, x4, y4. Los extremos del segmento P son los puntos de coordenadas (x1, y1) y (x2, y2). Los extremos del segmento Q son los puntos de coordenadas (x3, y3) y (x4, y4). La salida consiste de dos números x, y de punto flotante separados por un espacio. Si P y Q se intersectan, entonces (x, y) son las coordenadas del punto de intersección. En caso contrario, x = y = -1. El nombre de tu programa deberá ser intsegNN.c, donde NN es el número de lista que les fue asignado.

Notas
: (a) Tu programa no deberá leer ni escribir nada además de los datos mencionados. (b) Tu programa no deberá usar nada que no hayamos visto en clase. (c) Para compilar tu programa en UNIX usa la instrucción gcc intsegNN.c -o intseg y para probarlo usa la instrucción ./intseg y teclea la entrada deseada seguida de un enter.

Ejemplos

ENTRADA: 2 1 3 2 1 3 3 4     ENTRADA: 2 1 3 2 4 1 1 4       ENTRADA: 4 1 1 4 1 3 3 4
SALIDA:  -1 -1               SALIDA:  3.000000 2.000000     SALIDA:  1.666667 3.333333

Si quieres hacer más ejemplos puedes usar esta página de prueba.