Um toque artístico com triangulação de Delaunay

O problema

Este ano, a 63ª RBras acontece em Curitiba. Para fazer a logo do evento, decidimos combinar elementos dos cartões postais da cidade com aqueles referentes ao seu tema: Biometria e aprendizado estatístico na era da informação. Fazendo buscas por referências na internet, a imagem de um cérebro feito com triangulação criou uma sugestão: representar a estátua do Jardim Botânico usando a triangulação. Essa estátua é uma mãe segurando um bebê nos braços.


O código abaixo faz o download da imagem para o seu diretório de trabalho. Usaremos essa imagem para produzir a triangulação.

Criar os vértices

Vou ser bem sincero aqui. A minha primeira tentativa foi fazer o desenho na mão. Ou seja, criar os pontos e as ligações apenas utilizando o Inkscape. Porém, assim que comecei, percebi que levaria tempo e estaria sujeito a imperfeição. Meu lado programador e curioso despertou trazendo recordações relacionadas a SPDE feito com o INLA. A imagem a seguir veio à mente, sugerindo um possível atalho para o que eu pretendia fazer.

Pensei então que eu pudesse cortar caminho fazendo as ligações entre pontos com o R, aplicando o mesmo algoritmo usado para triangular dentro do polígono do Paraná, visto na imagem anterior. Então eu consultei o especialista em INLA do LEG, Elias Teixeira Krainski – possivelmente o autor dessa imagem – que me auxilou com alguns códigos mas que, infelizmente, ainda não resolviam por completo meu problema.

Eu continuei as buscas usando variações dos termos “triangular mesh 2D coordinates array”. Com isso, passei por implementações feitas em Python e tutoriais no Wolfram. Até que em um dos resultados encontrei o nome do algoritmo. Meus problemas acabaram e encontrei imediatamente o pacote deldir, para R, que implementa a triangulação de Delaunay.

O pacote deldir é desenvolvido pelo professor acadêmico honorário Rolf Turner da Univesidade de Auckland, Nova Zelândia. Esse pacote tem funções que calculam a triangulação de Delaunay e a tecelagem de Voronoi para um conjunto de pontos no plano 2D (exatamente o que eu procurava). A triangulação de Delaunay e a tecelagem de Voronoi são conceitos relacionados e ambos são utilizados em estatística espacial. A triangulação em 3 dimensões é usada para a e modelagem 3D de objetos, como ilustração de projetos arquitônicos e filmes de animação.

Com os códigos da seção examples da documentação, rapidamente entendi como usar as funções. O que eu precisava era das coordenadas dos pontos para gerar a triangulação. Abaixo estão as etapas percorridas no Inckscape para gerar os pontos.

  1. Criar duas camadas (layers). Uma para a foto (foto) e outra para os pontos (pontos).
  2. Importar a imagem para a camada foto e ajustar tamanho dentro do espaço de edição.
  3. Com a camada pontos ativa, criar os pontos de demarcação. Para isso eu fiz um círculo de 6 px de diâmetro (círculos amarelos) e com cópias do círculo (ctrl-c e ctrl-v) fui demarcando o desenho (ver figura abaixo).
  4. Por fim, salvei o arquivo com o nome sugerido, drawing.svg.

O SVG significa Scalable Vector Graphics é um formato vetorial de imagem baseado em XML. Abra o arquivo SVG em um editor de texto para ver o código fonte. Você irá vislumbrar que as informações geométrica estão descritas no arquivo. E são essas as informações de que preciso. Na figura a seguir, destaco os valores para as coordenadas de um dos círculos.

O arquivo SVG foi lido no R para extração das coordenadas dos círculos que são os valores dos atributos cx e cy dos nós com nome circle. O código abaixo descreve esse passo.

A aplicação da triangulação de Delaunay é a parte mais fácil. É simplesmente aplicar a função sobre a matriz de coordenadas. Por fim, os gráfico resultante é exportado para SVG novamente para que algumas ligações sejam manualmente eliminadas lá no Inkscape.

Como o SVG é um fomato vetorial, é possível editar propriedades de gráficos gerados no R com editores vetoriais como o Inkscape e Corel Draw. É possível modificar desde fontes usadas nos texto até o prechimento de pontos de barras nos gráficos. As revistas científicas poderiam solcitar arquivos em SVG para publicação pois seria muito mais fácil dar acabamento. Por razões que desconheço, as revistas pedem formatos bitmap.

O acabamento

Para eliminar algumas ligações, volto novamente para o Inkscape. A foto original foi importada para indicar quais ligações remover. Na figura a seguir, os seguimentos em rosa foram eliminados.

A próxima figura é o resultado do processo todo. Essa imagem agora será usada para compor a logo da 63ª RBras. Confira o resultado final na página do evento: http://rbras.org.br/rbras63/.


Share

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">