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