# Last edited on 2019-01-24 16:18:51 by stolfilocal

programa mais importante: tomo_to_stl  

  Converte uma CDT tridimensional ("tomograma", arquivo ".tom") para uma malha de triângulos
  não estruturada (arquivo ".stl").
  
  Na memória, a CDT é representada por um ppv_array, uma matriz d-dimensional
  de amostras (samples) inteiras.  Veja ppv.h.
  
  O algoritmo usado é o que chamo de "marching octahedra".  
  
    0. Suponha que o domínio D (o espaço coberto pela CDT) é uma caixa d-dimensional
    dividida em "voxels", d-cubos regulares (quadrados em 2D, cubos em 3D, etc.), 
    cada um correspondente a um elemento da CDT.
    
    1. Suponha que o valor de cada elemento da CDT está localizado no centro do "voxel"
    correspondente. 
  
    2. Esses valores do (CDT) são interpolados (média de 2^d valores)
    de modo a obter novos valores nos vértices dos voxels.
    
    3. O espaço coberto pela CDT é re-dividido em "octaedros" ("cross-polytopes";
    quadrados rodados 45 graus no caso 2D, octaedros no caso 3D).
    Cada "octaedro" tem 2 + 2^{d-1} vértices, cada um com um valor distância.
    Dois vértices "originais" são centros de voxels adjacentes da CDT, com 
    os valores de distância originais.  Os outros 2^{d-1} vértices
    "interpolados" são vértices de voxels, com valores interpolados
    de distância. Cada octaedro fica metade em um
    voxel, metade em outro voxel. 
    
    4. Cada octaedro é dividido em "tetraedros" (d-simplexos;
    2 triângulos em 2D, 4 tetraedros em 3D).  Cada tetraedro tem 
    d+1 vértices, que são os dois vértices centrais mais d-1
    vértices interpolados.
    
    5. Em cada tetraedro cujos vértices tem valores positivos
    e negativos, determinam-se as arestas cujos vértices
    tem valores de sinais opostos, e determina-se o ponto
    da aresta em que a distância é zero, por interpolação afim.
    
    6. Esses pontos de zero formam um segmento no caso 2D,
    e um triângulo ou quadrilátero plano no caso 3D.  Neste caso,
    divide-se o quadrilátero em em 2 triãngulos por qualquer
    das diagonais.
    
    
    
