Générateur de configuration linéaire à la Mies Van Der Rohe

  Sketch Processing


  • Utilisez les touches 1, 2 et 3 pour alterner entre les modes.
  • Use the 1, 2 & 3 keys to alternate between the modes.

La prémisse de ce projet, c'est un magnifique livre intitulé "L'architecture moderne depuis 1900" par William J.R. Curtis reçu en cadeau à Noël. Sur la couverture est illustré un plan simplifié d'un des projets de maison de Mies Van Der Rohe, architecte phare du 20e siècle. Cet amalgame de lignes possède un attrait visuel tout particulier : il se situe à la frontière entre l'organisation et l'aléatoire. L'idée était donc d'analyser ce type configuration afin de construire un générateur Processing capable d'en reproduire l'essence. Et quelles sont ces caratéristiques souhaitables à traduire sous forme algorithmique? Un petit nombre de longues lignes "extérieures", un nombre plus important de courtes lignes regroupées vers le centre, un espacement minimal entre elles et l' arrêt dès qu'il y a intersection afin de prévenir le croisement et les espaces clos; cela devrait suffir à la tâche.

The premise of this project is the wonderful book "Modern Architecture Since 1900" by William J. R. Curtis. On the cover, we can see a simplified plan for one of Mies Van Der Rohe's housing project. This amalgam of lines is visually very interesting because it is on the frontier of organisation and randomness. Consequently, the idea was to analyze this type of configuration in order to build a Processing generator capable of emulating it. And what are these characteristics that needed to be translated into code? A small number of long exterior ligns, a larger amount of shorter ligns grouped around the center, a minimal spacing between them and a mechanism to stop them at their intersection to prevent crossing and closed spaces; that should do it.

À la base, le programme combine deux types de lignes placées dans des positions semi-aléatoires. Les plus longues partes des bords pour se diriger vers le centre alors que les plus courtes se situent autour de l'origine, celle-ci précédemment déplacée près du centre de l'image.

At its core, this program is the combination of two types of lines placed in "controlled random" positions. The longer ones start from the edges and get toward the center while the shorter ones are situated along the origin which is displaced somewhere near the center.

Notez que l'espacement entre les lignes n'est pas purement aléatoire. La fonction suivante engendre une grille d'alignement et un espacement minimal.

You can notice that the spacing between the lines is not purely random. The alignment grid and the minimal spacing are achieved using the following function.

int clipOnGrid(float value, int unit){
  int i = int(value);
  int result = (i+(unit/2))/unit*unit;
  return result;
}

Il s'en suit la programmation de la détection d'intersection en utilisant les équations paramétriques de base (ainsi, le tout fonctionnerait tout aussi bien avec des lignes diagonales).

Next up, the programming of the line intersection detection mechanism which uses basic parametric equations (therefore it would still work with diagonal lines).

Puis, en utilisant la détection de collision (chaque fois qu'une ligne est dessinée, une instance de la classe "segment" est créée et utilisée pour la détection), chaque ligne est arrêtée aussitôt qu'elle en croise une autre en utilisant la collision la plus rapprochée. De plus, ils n'est pas permis aux lignes de se superposer.

Then using the collision detection class (each time a line is drawn, it would instantiate a "segment" and check for collision), every line stops as soon as it crosses another one using the nearest collision. Moreover, lines are not allowed to be superposed.