Receitas Clássicas: Voronoi

Receitas Clássicas: Voronoi

Bem, eu demorei para postar sobre este tema tão famoso e utilizado no design e na arquitetura por ser algo que me incomoda profundamente. Não me entendam mal, acho interessantíssimo a teoria e algoritmo por trás deste tal padrão chamado “voronoi”. Contudo, me incomoda a maneira como as pessoas, em geral, o utilizam.

É comum ver em partidos arquitetônicos de projeto, uma justificativa da escolha do voronoi por conta de um mambo jambo de “biomimética”. Essa atitude me parece uma super simplificação de um campo extremamente complexo. Nas palavras de Shiva Khoshtinat, que tem uma publicação extremamente didática sobre o tema:

There are certainly projects that have been based on a very detailed understanding of natural forms and have used this to great effect. The key, I believe, is whether the design engages with the function delivered by a particular natural adaptation. If it does, then it is fair to label it as biomimetic; if it does not, then I think it is correct to say it is biomorphic
— KHOSHTINAT, Shiva, 2015, p. 5.
Certamente existem projetos que tem sido baseados em um detalhado entendimento das formas naturais e o utilizaram de maneira bastante efetiva. A chave, eu acredito, é se o design engaja com um função exercida por uma particular adaptação natural. Se sim, então é justo chamá-la de biomimética; caso contrário, então eu acho que é correto chamá-la de biomórfica.
— Tradução minha.

Mas chega de ser hater e ir finalmente ao tema deste post. O que é Voronoi? Segundo a definição no site do IME, voronoi é:

“Dado um conjunto S de n pontos no plano queremos determinar para cada ponto p de S qual é a região V(p) dos pontos do plano que estão mais próximos de p do que de qualquer outro ponto em S. Neste caso o conjunto S seria o conjunto dos postos de correio, o plano seria a cidade e as regiões V(p) seria o conjunto de casas da cidade que seriam atendidos pelo posto p. As regiões determinadas por cada ponto formam uma partição do plano chamada de Diagrama de Voronoi.” (IME, 1999)

Agora tentando ser um pouco mais didático, imagine um monte de pontos no espaço:

Tipo assim.

Tipo assim.

E se traçássemos um circulo imaginário que represente a relação entre um ponto e outro?

Mais ou menos assim.

Mais ou menos assim.

Agora, como seria a mediana?

Começando a fazer sentido huh?

Começando a fazer sentido huh?

Vamos ver como ficaria essa relação aplicada a todos os pontos.

Círculo para todos os pontos.

Círculo para todos os pontos.

Com todas as medianas.

Uau, não da para entender nada!

Uau, não da para entender nada!

Para facilitar, podemos limitar as medianas apenas às suas intersecções com as vizinhas.

Está ficando um pouco mais claro.

Está ficando um pouco mais claro.

O resultado desta operação é uma divisão do espaço muito parecido com células.

Enfim, voronoi.

Enfim, voronoi.

A relação das menores distâncias possíveis entre pontos é o que faz as pessoas associarem o voronoi à padrões da natura – a busca pelo caminho de menor esforço. No Grasshopper, dentro das diversas possibilidades de tratar geometria, existe um componente que por sí só cria um voronoi.

Mesh > Triangulation > Voronoi

Mesh > Triangulation > Voronoi

Por este motivo o próprio David Rutten, criador do Grasshopper, zombou do voronoi em versões mais antigas do plugin, antes de ter sido incorporado ao Rhinoceros e quando ele ainda podia ser menos formal.

Quando se usava demais o voronoi, esta mensagem aparecia.

Quando se usava demais o voronoi, esta mensagem aparecia.

Na verdade eu muito bem poderia ter colocado este post sob a categoria “Quem é este componente”, pois se trata de uma receita que fundamentalmente exige apenas o componente do Voronoi. Contudo, optei por não só mostrar a receita mas também me estender um pouco mais sobre o assunto e mostrar um extra.

Vamos lá então, o que precisamos para esta definição funcionar?

  • 1 Lista de Pontos

  • 1 Plane

  • 1 Number Slider

  • 1 Region (ou Rectangle/Curve)

voronoi-receita.png

1- Primeiramente, precisamos de um conjunto de pontos que pode ser criado no Rhinoceros, por exemplo.

Pontos feitos no Rhinoceros.

Pontos feitos no Rhinoceros.

1.a- Esta lista de pontos pode ser conectada no input P(oints) do componente Voronoi.

Notem que agora o Voronoi ja funciona pelos valores default,

Notem que agora o Voronoi ja funciona pelos valores default,

2- O R(radius) representa o raio de influência que os pontos exercem sobre os vizinhos, e por isso pode ser alimentado por um Number Slider.

receita-2.png
Reparem que se o raio for pequeno demais, os círculos não colidem.

Reparem que se o raio for pequeno demais, os círculos não colidem.

Olha agora com alguns colidindo.

Olha agora com alguns colidindo.

Com todos.

Com todos.

3- Agora reparem que eu poderia crescer os círculos infinitamente. Para esta situação, o Grasshopper nos dá a possibilidade de limitar a região do nosso voronoi com o input B(oundary). Este B, refere-se a um retângulo, que pode ser criado no Rhinoceros ou no Grasshopper (no caso desta receita, eu criei 1 retângulo de 10x10 no Rhinoceros).

receita-3.png
Vejam como fica o diagrama voronoi limitado em um retângulo de 10x10.

Vejam como fica o diagrama voronoi limitado em um retângulo de 10x10.

4- Como um extra, nós poderíamos colocar um Plane no input P(lane), que diz ao componente em que plano este diagrama voronoi será criado. Neste caso, como eu defini o P como o {0,0,0} do arquivo, nada será alterado em relação à ultima parte.

receita-4.png

Bem, a receita básica acaba aqui. Contudo vou fazer uma especulação neste ultimo trecho do post, sem pretensão alguma em seguir rigor acadêmico e declaro não ter compromisso algum com fatos a partir de agora, portanto os engenheiros de plantão me corrijam se eu estiver errado.

Sabemos que o diagrama de voronoi é basicamente uma briga de pontos por território. Esta briga levada ao limite resulta em um sistema fechado estático e portanto, cada um dos pontos apenas influencia a célula que os contêm pois passado deste limite, a responsabilidade passa a ser do ponto vizinho.

Onde já vimos uma relação de influências parecidas? Pois é, lembra muito a influência de pilares sobre uma laje (imagine que cada ponto é um pilar).

Veja cada vetor de influência.

Veja cada vetor de influência.

Seguindo essas linhas de vetor, vou tentar criar pilares que influenciam cada 1 das células. Não vou entrar em detalhes, pois seria muita coisa para explicar, mas ficaria algo parecido com isso:

Posso criar um post a parte sobre a definição depois.

Posso criar um post a parte sobre a definição depois.

Uma estrutura sem rigor científico algum!

Uma estrutura sem rigor científico algum!

Bem, é isso por hoje. Espero que tenha servido de alguma ajuda a alguém.

Abraços e até a próxima!

Archicad: Zonas Customizadas

Archicad: Zonas Customizadas

Ensaios: DeepDream

Ensaios: DeepDream