Aller au contenu

Simulation de la croissance des flocons de neige dans BlocksCAD

Envoyer à un Conseiller

Description du modèle 3D

Ceci implémente une modification de l'algorithme de croissance des flocons de neige à cellules hexagonalesReiter dans BlocksCAD. L'algorithme utilise un automate cellulaire à valeur réelle qui modélise la diffusion et l'accrétion de l'humidité. En haute résolution, le modèle peut produire des flocons de neige étonnamment réalistes, mais BlocksCAD ne peut pas gérer plus d'un rayon d'environ 50 (et même cela est lent) de la grille hexagonale pour l'évolution.

Je recommande fortement d'utiliser Firefox au lieu de Chrome pour ces grands projets BlocksCAD. Firefox est beaucoup plus réactif.

Le modèle a ces paramètres principaux :

Alpha : contrôle la vitesse de diffusion de l'humidité

bêta : contrôle le niveau d'humidité de fond (avec variation locale aléatoire facultative)

gamma : contrôle le taux d'accrétion aux endroits gelés (avec variation temporelle aléatoire facultative)

Les modifications de variation aléatoire, qui ne sont pas dans l'algorithme original de Reiter, ont fini par produire de très beaux effets - ou du moins la variation bêta l'a fait (la variation gamma ne semble pas en faire autant).

Il existe quatre versions du code BlocksCAD : rayon 20, rayon 30, rayon 40 et rayon 50. Jusqu'au rayon 40, il fonctionne bien sur Firefox, et sur Chrome jusqu'au rayon 30. Radius 50 est lent sur Firefox, et je ne l'ai même pas essayé sur Chrome. Firefox est beaucoup plus rapide pour BlocksCAD.

Vous pouvez varier l'épaisseur du flocon de neige en fonction de la valeur de masse simulée à un point donné pour un effet 3D supplémentaire (changer l'épaisseur minimale pour être inférieure à l'épaisseur maximale pour cet effet), ou vous pouvez introduire des crêtes symétriques pour un effet visuel 3D agréable (faire que l'angle de crêtes soit de 3-10 degrés environ).

Les flocons de neige sont facilement imprimables -- voir les photos. Je recommande une épaisseur d'environ 2,5 mm et l'utilisation d'un rasoir pour gratter les paillettes du lit de l'imprimante.

Le personnalisateur Thingiverse a été produit en exportant le code de BlocksCAD vers OpenSCAD et en déplaçant les paramètres vers le haut. Le code OpenSCAD exporté a également généré l'animation et la mosaïque.

BlocksCAD ne supporte pas les tableaux. Et c'est un langage fonctionnel. L'évolution est donc gérée par un gigantesque module `evolve', qui prend 421 arguments (dans la version radius 40) : le nombre d'itérations, et les données pour toutes les 420 cellules simulées (seul 1/12 de la carte complète doit être simulée - le reste est reconstruit par symétrie). Le module s'appelle alors récursivement, avec un nombre d'itérations décrémenté et des cellules évoluées. En raison de l'absence de réseaux, l'évolution de chaque cellule a un appel codé en dur à une fonction d'évolution cellulaire. Une fois que le nombre d'itérations atteint zéro, toutes les cellules qui comptent comme gelées (valeur des données au moins 1) sont dessinées, ainsi que leurs (typiquement) 11 copies symétriques, par le module "dessin".

Il y a aussi un grand module go' qui initialise les arguments pourevolve'.

Alors qu'on pourrait, bien que ce serait fou, glisser-déposer tout le code d'évolution codé en dur, je viens d'écrire un script python (inclus : le code principal est reiter.scad) qui génère le xml BlocksCAD pour les modules evolve' etgo'. Le code de dessin, le code d'évolution des cellules individuelles et le code d'initialisation des paramètres ont été écrits à la main dans BlocksCAD.

https://youtu.be/kZH0ZB992ZY

https://youtu.be/812HeHZrEhk

  • Format du fichier 3D : STL

Mots-clefs

Créateur

License

CC BY

Page traduite par traduction automatique. Voir la version originale.

Contenus correspondants


Ajouter un commentaire