Introducción a la Programación
Trimestre 2004 Otoño --- Tarea 2

Lunes 25 de Octubre de 2004 a las 14:30 hrs

Intersección de Segmentos

Recordará 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á 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. Considere 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). Observe 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 su programa deberá ser intsegNN.c, donde NN es el número de equipo que les fue asignado. Los archivos intsegNN.o y intsegNN.exe no deben ser entregados. Notas: (a) Su programa no deberá leer ni escribir nada además de los datos mencionados. (b) Su programa no deberá usar nada que no hayamos visto en clase. (c) Para compilar su programa en UNIX usen la instrucción gcc intsegNN.c -o intseg y para probarlo usen la instrucción ./intseg y tecleen 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