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:
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:
E se traçássemos um circulo imaginário que represente a relação entre um ponto e outro?
Agora, como seria a mediana?
Vamos ver como ficaria essa relação aplicada a todos os pontos.
Com todas as medianas.
Para facilitar, podemos limitar as medianas apenas às suas intersecções com as vizinhas.
O resultado desta operação é uma divisão do espaço muito parecido com células.
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.
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.
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 Region (ou Rectangle/Curve)
1- Primeiramente, precisamos de um conjunto de pontos que pode ser criado no Rhinoceros, por exemplo.
1.a- Esta lista de pontos pode ser conectada no input P(oints) do componente Voronoi.
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.
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).
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.
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).
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:
Bem, é isso por hoje. Espero que tenha servido de alguma ajuda a alguém.
Abraços e até a próxima!