Desenhando com algoritmos

Pinceladas nervosas feitas por um algoritmo. // Nervous brushstrokes made by an algorithm.

See English translation of this text below.

Inspirado pelo interessante trabalho do Alexandre Villares,  que está fazendo arte com algoritmos, resolvi experimentar algumas coisas semelhantes, só que em vez de programar em Processing, vou usar o GDL do ArchiCAD!

É ainda um experimento incipiente, mas os resultados são muitos divertidos. Se, por um lado, o GDL não oferece as mesmas possbilidades do Processing — que é (até onde eu sei) uma linguagem de programação pensada especificamente para produzir arte visual —, por outro lado o GDL oferece outras, que provavelmente o Processing não cobre, relacionadas com o universo 3D e o BIM.

Por enquanto, trabalhei apenas em 2D, mas já dá para imaginar as possibilidades em 3D e as possíveis aplicações dessas ferramentas em Arquitetura e Urbanismo.

Entre os trabalhos do Villares, os que mais me chamaram a atenção são os que exploram a transição suave de estruturas geométricas exatas e simétricas para formas mais orgânicas e fluidas (veja os sketches 074 a 080 na página dele). Eu tentei explorar essa transição com um algoritmo completamente diferente.

As imagens deste post são fotos de tela do ArchiCAD, mostrando um mesmo objeto GDL, que pode se transformar totalmente, dependendo de como os seus parâmetros são configurados. Chamei o objeto de Vegetal, por motivos que ficam evidentes a partir da observação das imagens. É uma estrutura inspirada nas ramificações cada vez menores e mais numerosas que observamos na raíz de uma planta ou na copa de uma árvore.

Tentei explicar os conceitos do algoritmo nas legendas das imagens abaixo (clique nelas para ampliar).

Se você quiser experimentar o Vegetal, pode baixar o objeto GDL aqui (necessário ter o ArchiCAD 21 istalado).

Agradeço Bruno Schiavo e Luis Fernando Campedelli pela ajuda com a função que calcula a quantidade de nós, fundamental para o desenvolvimento do código.

Drawing with Algorithms

Inspired by Alexandre Villares’ interesting work, who is doing art with algorithms, I decided to try some similar things, but instead of programming in Processing, I will use ArchiCAD GDL.

It's still an incipient experiment, but the results are a lot of fun. If, on the one hand, GDL does not offer the same possibilities as Processing - which is (as far as I know) a programming language specifically designed to produce visual arts - on the other hand GDL offers other possibilities not covered by Processing, related to the 3D universe and BIM.

For now, I have only worked on 2D, but you can already imagine the possibilities in 3D and possible applications of these tools in Architecture and Urbanism.

Among Villares' works, the ones that most caught my attention are those that explore the smooth transition from exact, symmetrical structures to more organic and fluid forms (see sketches 074-080 on his page). I've tried exploring this transition with a completely different algorithm.

The images in this post are screenshots of ArchiCAD 2D plan window, showing the same GDL object, which can be fully transformed depending on how parameters are set. I called the object Vegetal, for reasons that are evident from the observation of the images. It is a structure inspired by the smaller and smaller branches that we observe in the root of a plant or in the crown of a tree.

I tried to explain the concepts of the algorithm in the captions of the images below (click on them to enlarge).

If you want to try Vegetal, you can download the GDL object here.

I'd like to thank Bruno Schiavo and Luis Fernando Campedelli for helping with the function that calculates the quantity of nodes, required to create this code.

 

1. Esta imagem é boa para ilustrar o conceito adotado na programação. Basicamente, o objeto 'Vegetal' cria conjuntos de 'ramos'. Da extremidade de cada 'ramo' nasce um novo conjunto de ramos, cujas extremidades dão origem a novos conjuntos, e assim por diante. Aqui, um ramo é simplesmente uma linha reta, cada conjunto tem 5 ramos uniformemente distribuídos em um arco de 90º, que foram reproduzidos em 5 estágios, cada um de uma cor diferente e com tamanhos iguais a uma fração do estágio anterior. Repare a quantidade de linhas geradas por apenas conjuntos de 5 ramos e 5 estágios: são precisamente 3905 linhas! 

//

1. This image is good for illustrating the concept behind the code. Basically, 'Vegetal' creates sets of 'branches'. From the end of each 'branch' a new set of branches is born, whose ends give rise to new sets, and so on. Here, a branch is simply a straight line; each set has 5 branches evenly distributed in a 90° arc, which were reproduced in 5 stages, each one in a different color and sizes equal to a fraction of the previous stage. Notice the number of lines generated by sets of 5 branches and 5 stages: they are precisely 3905 lines!

2. Aqui, mudamos dois parâmetros: a quantidade de ramos por conjunto, de 5 para 4; e o ângulo de distribuição, de 90º para 360º. Tudo muito regular, exato e preciso.

//

2. Here, we changed two parameters: the number of branches per set, from 5 to 4; and the distribution angle, from 90° to 360°. All very regular and accurate.

3. O ingrediente que faltava para tornar essas estruturas mais orgânicas e naturais é a aleatoriedade. Veja o que acontece com a estrutura anterior de 4 ramos, quando multplicamos os ângulos de inserção dos ramos por um número randômico.

//

3. The missing ingredient to make these structures more organic and natural is randomness. Look what happens to the previous 4-branch structure when we multiply the insertion angles by a random number.

 

 

 

 

 

 

 

 

 

4. Trocamos as linhas por retângulos delgados e, em vez de randomizar os ângulos, usamos um randomizador nos comprimentos. São conjuntos de 6 ramos em 3 estágios (o primeiro estágio, cinza, está praticamente todo encoberto pelos outros). 

//

4. We swapped from lines to thin rectangles and, instead of randomizing angles, we used a randomizer for the lengths. There are 3 stages of 6-branch sets (the first stage, grey, is practically all covered by the other stages).

5. E se alternarmos randomicamente retângulos preenchidos e vazados, será que fica legal?

//

5. What if we randomly alternate filled and empty rectangles, isn’t that cool?

6. Aqui os ramos são trapézios, com ângulos de distribuição regulares e dimensões randomizadas. Gosto do efeito de 'simetria perturbada'. Conjuntos de 4 ramos, em 6 estágios. O último estágio — vermelho — só aparece eventualmente, com ramos muito pequenos.

//

6. Here the branches are trapezoids, with regular distribution angles and randomized dimensions. I like the effect of disturbed symmetry. 4-branch sets in 6 stages. The last stage - red - seldom appears, with very small branches.

7. Mas é claro que a parte mais divertida é aplicar a randomização tanto nos ângulos como nos comprimentos. É incrivel como esta imagem e a do lado lembram vistas de topo de árvores, com diferentes etapas de floração. 

//

7. But of course the funniest part is to apply randomness both in angles and lengths. It is amazing how this picture and the one beside look like top views of trees in different flowering stages.

8. Uma amiga chamou esse desenho de "algoritmo da erva-doce".

//

8. A friend called this drawing "the fennel equation".

9. Tente adivinhar quantos ramos por conjunto e quantos estágios têm esta composição. O segredo é moderar a dose de randomização para que a composição pareça natural mantendo uma certa organização.

//

9. Try guessing how many branches per set and how many stages this composition has. The secret is to moderate the dose of randomization so that the composition looks natural but keeping some level of organization.

10. Você pode substituir os ramos geométricos por formas mais irregulares.

//

10. You can replace geometric branches by more irregular shapes.

11. Aqui vemos três objetos com exatamente os mesmos parâmetros (clique para ampliar). Cada vez que o código é rodado, o resultado é diferente, graças aos randomizadores.

//

11. Here we see three objects woth exactly the same parameters (click to enlarge). Each time the code runs, the result is different, due to the randomizers.

12. E assim por diante... // And so on...

13. 

Compartilhe: 

Comentar