Segundo Trabalho

Objetivo

Cartas topográficas de terrenos normalmente apresentam as informações de elevação através de curvas de nível. Uma curva de nível nada mais é do que a curva resultante da interseção entre a superfície do terreno e um plano z = constante. O trabalho consiste em montar uma representação de um terreno e computar curvas de interseção.

Dados de Entrada

O terreno é dado por um arquivo de texto contendo as coordenadas x, y, z de pontos do terreno. Seu programa deverá ler esse arquivo e montar uma triangulação de Delaunay correspondente. Para tanto você deve usar a classe Delaunay_triangulation_2 do CGAL. Como na verdade não estamos triangulando pontos em 2D mas sim terrenos, você deve usar  Projection_traits_xy_3 como classe de "traits". O capítulo sobre triangulações Delaunay do manual do CGAL mostra um exemplo simples de como fazer isso.

Os planos para os quais você deve computar a interseção estarão também armazenados num arquivo de texto. Cada linha desse arquivo contém 4 números: a, b, c, d,  que são os coeficientes de um plano dado por ax + by + cz + d = 0.

Implementação Padrão

Para facilitar o trabalho, o código necessário para ler os arquivos, montar a superfície do terreno, bem como desenhar tanto o terreno quanto as curvas de interseção já foi feito! Os arquivos se encontram abaixo:

Eis uma imagem da janela com o terreno desenhado (é possível girar o terreno clicando e arrastando o mouse na janela).

Como Usar a Implementação Padrão

O código dado acima será explicado em sala de aula. Você não precisa usá-lo de todo, e tem liberdade para modificá-lo à vontade. Também não é garantido que ele não contenha bugs. Se você optar por aproveitar a implementação padrão, analise as estruturas de dados usadas. Observe principalmente as declarações das variáveis globais:

/**
* Global variables
**/
Delaunay dt; // A Delaunay Triangulation
PlaneSet planes; // Planes for which intersection curves are computed
PolylineSet curves; // Intersection curves

A variável dt  contém o terreno montado como uma triangulação Delaunay montada a partir dos pontos do arquivo terraindata.txt.

A variável planes é uma lista de planos lidos do arquivo planedata.txt.

A variável curves é uma lista de listas de pontos. Cada lista de pontos representa uma linha poligonal correspondente a uma curva de interseção. Esta variável deve ser computada por você (inicialmente é uma lista nula). O local onde você deve inserir seu código está marcado no programa fonte:

//
// Given dt and planes, store intersection curves into curves
//

O restante do código se encarregará de exibir numa janela o resultado dos seus esforços. As curvas de interseção serão desenhadas em azul.