PUCRS
Programação de Software Básico
Faculdade de Informática



Trabalho I - 2007/1

Este trabalho poderá  ser desenvolvido por grupos de 2 alunos ou de forma individual

Data da entrega 17/05/2007



DESCRIÇÃO


Este trabalho tem por objetivo aplicar os conceitos de Programação Orientada a Objetos e Listas encadeadas vistos em aula.
O objetivo geral do programa a ser desenvolvido é gerenciar a execução de uma operação de diferença entre dois polígonos.
Todas os dados relativos aos polígonos devem ser armazenados em Listas Encadeadas, desenvolvidas pelos alunos do grupo.

DIFERENÇA ENTRE POLÍGONOS

A operação de diferença entre dois  polígonos PA e PB resulta em um terceiro polígono que representa os pontos do plano que estão em PA e que não estão em PB. Na figura abaixo, pode-se observar o resultado da operação de diferença entre dois polígonos.



O algoritmo para realização da operação de diferença entre dois polígonos é o seguinte:

  1. Assume-se que os vértices dos polígonos estão ordenados no sentido anti-horário;
  2. Calcular todas as interseções entre as arestas dos dos polígonos PA e PB;
  3. Inserir os pontos calculados como novos vértices dos polígonos PA e PB. Esta inserção deve ser feita de forma que estes polígonos continuem com seus vértices orientados no sentido anti-horário;
  4. Calcular o ponto médio PM(i) de cada um das arestas (i) dos dois polígonos;
  5. Determinar para cada ponto PM(i) do polígono PA se este ponto está dentro ou fora do polígono PB;
  6. Determinar para cada ponto PM(i) do polígono PB se este ponto está dentro ou fora do polígono PA;
  7. A diferença PA-PB é formada pelos vértices de PA classificados como FORA de PB e pelos vértices de PB classificados como DENTRO de PA.

FUNÇÕES

O programa deverá executar, pelo menos estas funções:

INTERSECÇÃO ENTRE SEGMENTOS DE RETA

O cálculo da interseção entre dois segmentos de reta pode ser realizado através do algoritmo descrito em : http://local.wasp.uwa.edu.au/~pbourke/geometry/lineline2d. Nesta página, você encontra inclusive uma implementação do método em C++.

Além desta página você pode encontrar inúmeras outras usando o google e procurando por line segment intersection.

TESTE DE INCLUSÃO DE PONTO EM POLÍGONO

A determinação de inclusão de um ponto em um polígono, pode ser realizada através do algoritmo descrito em http://local.wasp.uwa.edu.au/~pbourke/geometry/insidepoly. Nesta página, você encontra várias  implementações.

PROGRAMA PARA ENTRADA DE PONTOS COM MOUSE

Para obter um programa que premite a entrada de pontos através do mouse, clique aqui. Este programa foi projetado para ser usado no wxDevCPP. Descompacte o arquivo .Zip e abra o projeto Poly.dev.
Para marcar os vértices do polígono, utilize o botão esquerdo do mouse. Para fechar o polígono, clique com o botão direito.

ENTREGA E APRESENTAÇÃO

A apresentação do trabalho deve ser feita na aula do dia 17 de maio de 2007.