Génération d'un profil de montagne 2D et 3D en Python - fractale

<< retour accueil


Pour la petite histoire, ado, lorsque je programmais en BASIC, je m'étais déjà amusé à dessiner un profil de montagne en 2D. Mais le langage utilisé à l'époque je permettais pas la récursivité de l'opération et j'imbriquais forcément un nomtre limité de boucles

Aujourd'hui, cette récursivité est possible avec python, et je ne me prive pas de l'exploiter ici dans ce petit exercice, particulièrement adapté aux fractales tel que le profil d'un paysage en 2D puis en 3D.

Rappel: la récursivité est ici une fonction qui s'appelle elle-même:
  • Pour le paysage en 2D, je prends 2 points extrêmes A et C, je calcule la position du point B qui se trouve au milieu (moyenne des 2 hauteurs) et j'ajoute un nombre aléatoire à chacun de ces points, proportionnel à l'intervale qui sépare les 2 points extrêmes considérés (distance AC).
  • Je rappelle cette fonction, mais cette fois ci avec les points extrêmes A et B (pour y trouver le point milieu), puis la même chose avec les points B et C.
  • Le critère d'arrêt de la récursivité est lorsque la distance entre les points extrêmes vaut 1 (il n'y a plus de point intermédiaire prévus initialement dans mon tableau.
Pour que le calcul soit facile, je prends un nombre de points initial correspondant à une puissance de 2 (+1 pour être rigoureux)

Montagne fractale 2D:

Voici le programme python (îci Python 3.4, changer le chemin de sauvegarde du fichier SVG dans les premières lignes du programme)
>>fractale_montagne_2d.py

et vous devriez obtenir quelque chose comme cela:
montagne fractale 2D
>> le fichier SVG

(le fichier svg peut être ouvert avec  Chrome, Firefox, mais je vous conseille plutôt Inkscape )

Montagne fractale 3D:

L'exercice est similaire au premier, mais il faut ajouter une dimension, et pour un soucis de présentation, ajouter un dégradé de couleur allant du noir vers le blanc en passant pas les nuances de grey ;)

Le fichier Python se trouve ici >> Fractale_montagne_3D_web.py

et vous devriez obtenir une image similaire à celle-ci:
montagne fractale python 3D


>> le fichier SVG