Projeto Prolog - versão 1
entrega 26/11 via susy.
O projeto pode ser feito individualmente ou em grupos de até 3 pessoas.
Um segmento de reta pode ser interpretado como dois pontos: o primeiro ponto é onde o segmento começa e segundo é onde ele acaba. Obviamente a ordem é irrelevante, o segmento de reta representado pelos pontos A,B é o mesmo que o representado por B,A.
Leia um arquivo pelo stdin no formato
[ seg(N,X1,Y1,X2,X2) , seg(M, Z1,W1, Z2, W2), ... ].
onde:
Note que o arquivo de entrada contem apenas um termo em Prolog (terminado por .) que é uma lista de estruturas.
Imprima no stdout:
Uma boa fonte para computar interseções de segmentos de reta é a 1a resposta desta questão no stackoverflow https://stackoverflow.com/questions/563198/how-do-you-detect-where-two-line-segments-intersect
O seu programa rodará da seguinte forma: manual sobre linha de comando do swipl
swipl -q -f seu-prog.pr -t topo < arqtestes.in
O que é importante é que o predicado topo
(sem nenhum argumento) será o único predicado a ser chamado.
a entrada
[ seg(a,7,1,5,4),
seg(b,5,1,8,7),
seg(c,7,2,7,8),
seg(d,2,3,4,5),
seg(e,3,2,3,8),
seg(f,3,6,3,9),
seg(g,5,7,6,8)
].
que corresponde aos segmentos na imagem no meu programa, retorna
Intersecoes:
a e b, X = 5.857142857142858, Y = 2.7142857142857144
b e c, X = 7.0, Y = 5.0
d e e, X = 3.0, Y = 4.0
Colineares:
e e f