Projeto Prolog - Versão 1

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.

Exemplo

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