Bonjour,
je me présente, je suis en école d'architecture et je dois, dans le cadre d'un cours de programmation, créer un programme Rhino Grasshopper intégrant du Python avec une application architecturale. Je suis débutant en Python et n'ait comme expérience que le formation OC.
Avec mes collègues, nous avons choisi comme principe de s'inspirer des automates cellulaires (plus particulièrement de la fourmi de Langton).
Ce modèle dans notre discours permettrait de générer en série des façades uniques.
J'ai commencé à créer le programme dans Rhino/Grasshopper dans lequel j'ai intégré mes codes pythons.
Je vous explique comment j'ai pensé le programme (c'est peut-être la base du problème) :
- je voulais générer des carrés, aléatoires dans leurs attributs mais ordonnés dans une trame, qui formeraient une grille (de facade de base).
Il y aura 3 attributs possibles : "materiau1", "materiau2", et "fenetre".
De là se pose deux possibilités (je ne sais pas laquelle est la plus simple):
- la mieux : que l'on puisse choisir l'emplacement des carrés "fenetre" et que le reste des carrés soient aléatoires
- la moins bien : que tout soit aléatoire
J'imagine que la grille pourrait être générée avec un bouton booléen True/False.
Et qu'on puisse aussi choisir le % d'aléatoire (dans le sens où toute la grille pourrait être materiau1 de base et que ca soit le nombre de materiau2 et de fenetre varie).
Ca ca pourrait être une première partie de programme qui pourrait s'arrêter là si pas assez de temps pour réaliser celle d'après.
La deuxième partie inclurait l'automate de Langton :
Je me suis dis qu'on pouvait faire une liste des attributs des carrés de la première grille, et faire parcourir un automate qui lit les attributs et effectuent une action en fonction de l'attribut par exemple :
if positionarrivee = carreau1:
aller à gauche, transformer la case de départ en carreau2
elseif positionarrivee = carreau2:
aller à droite, transformer la case de départ en carreau1
else:
aller en arrière.
Et qu'on avait un slider pour indiquer le nombre de déplacements qu'on veut lui faire faire.
Voici la tête du début de la bête :
Contenu de la boite Python_basics :
Contenu de la boite Python :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 import rhinoscriptsyntax as rs print pt pt = rs.coerce3dpoint(pt)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 import rhinoscriptsyntax as rs from Rhino.Geometry import Point3d def boxMaker(firstPoint, recursion): a.append(firstPoint) if recursion < 10: movedPoint1 = firstPoint + Point3d(1, 0, 0) boxMaker(movedPoint1, recursion + 1) movedPoint2 = firstPoint + Point3d(0, 1, 0) boxMaker(movedPoint2, recursion + 1) firstPoint = rs.coerce3dpoint(startPoint) a = [] boxMaker(firstPoint,0)
Premières questions qui se posent :
- comment faire en sorte que la forme soit carrée et non en escalier ?
j'ai essayé de modifier dans la recursion en mettant 1,1,0 à chaque copie mais j'ai l'impression que le résultat est étrange
- comment implanter mon caractère aléatoire ? Je suppose qu'il faut importer la biblio random par un (import random) mais ensuite quelle fonction utiliser ?
- et ensuite j'ai aucune idée de comment aborder l'automate, si vous pouviez me donner des pistes.
Je vous remercie d'avance, je sais que c'est une grosse partie. Il ne s'agit pas de tout faire à ma place mais de me donner les clefs pour que je puisse trouver par moi même.
Partager