Polígonos em Listas
Duplamente Encadeadas


Descrição

O objetivo deste trabalho é  manipular polígonos que são lidos de arquivo, armazenados em uma lista duplamente encadeada, manipulados e salvos novamente em disco.

Os polígonos são armazenados em disco conforme o exemplo deste arquivo, cujo conteúdo é apresentado a seguir. Na primeira linha aparece o número de vértices e nas demais linhas as coordenadas X e Y de cada vértice.

10
2 8
7 5
11 8
15 7
13 0
10 2
5 1
4 4
2 1
0 4

Após a leitura, os vértices devem ser armazenados em uma lista duplamente encadeada de objetos da classe Nodo, apresentada a seguir.

#ifndef _NODO
#define _NODO
// ****************************
class Nodo{
public:
    float x,y;
    Nodo *prox;
    Nodo *prev;
   
    Nodo();
    Nodo (float x, float y);
    void setInfo
(float x, float y);
    void getInfo(
float &x, float &y);
    void setProx(Nodo *p);
    Nodo* getProx();
    void setPrev(Nodo *p);
    Nodo* getPrev();
   
};

#endif

Após o armazenamento dos vértices na lista, deve ser possível realizar as seguintes operações:

Após a realização de qualquer uma das operações o polígono deve poder ser manipulado novamente, sem erro.


Alocação e Remoção de Nodos

Para alocação e remoção de nodos da lista o programa deve utilizar a função AlocaNodo descrita a seguir.

Nodo* AlocaNodo(float x, float y)
{
  NodosAlocados ++;
  return new Nodo (x,y);
}

void DestroiNodo(Nodo *n)
{
  delete n;
  NodosAlocados--;
}


Detalhes do comando Split

A ideia do comando split é que o par de vértices informados no comando gera uma nova aresta no polígono.
Imagine que se tenha um polígono com vértices A B C D E F G H, confome a figura a seguir.
Considere que o A é o vértice de índice 0 e os demais são numerados no sentido horário (H = 7).


A partir deste polígono, a tabela a seguir apresenta o resultado de algumas execuções do comando split.
ComandoResultadosImagem
Split(2,4)
A B C E F G H   e  C D E
Split (0,3)
A B C D  e  D E F G H A
Split (3,7)
A B C D H  e  D E F G H

   

Data de Entrega

O trabalho, que poderá ser desenvolvido em duplas, deverá ser entregue no dia 29/10/2020, durante o horário da aula.