[Calcul scientifique et technique par Python] Dessin de figures fractales [Triangle de Shelpinsky, fougère de Bernsley, arbre fractal]

introduction

** Connu comme une figure fractale typique utilisant Python **

** 1. Triangle de Shelpinsky ** ** 2. Fougère Burnsley ** ** 3. Arbre fractal **

Dessiner **. ** **

Je ne mentionnerai pas ici les mathématiques de la géométrie fractale (car l'auteur est superficiel dans le domaine). Cependant, j'espère que vous apprécierez de voir ** comment les figures fractales visibles naturellement sont générées à partir de règles simples **.


Contenu

(1) Triangle de Shelpinsky

** C'est un modèle trouvé dans les modèles de créatures marines telles que les coquillages. ** Dessinez un ensemble de points créés par les règles simples suivantes.

1.Dessinez un triangle régulier avec les coordonnées des trois sommets suivants.
Pic 1: (x1,y1)
Pic 2: (x2,y2)
Top 3: (x3,y3)

2.Tout point P à l'intérieur du triangle(x_0,y_0)Est le premier point.
3.Les nouveaux points sont définis comme suit.
Tracez un point PP au milieu entre P et le sommet 1(1/3 chances)
Tracez un point PP au milieu entre P et le sommet 2(1/3 chances)
Tracez un point PP au milieu entre P et le sommet 3(1/3 chances)
4.Répéter 3

(2) Fougère Burnsley

** Dessinez un motif comme une plante de fougère. ** Il est étrange qu'une fougère avec une symétrie élevée puisse être créée à partir d'éléments aléatoires. Dans la règle 2 pour faire un triangle de Shelpinsky en (1), Modifiez la règle pour générer un nouveau point $ (x_ {n + 1}, y_ {n + 1}) $ à partir de $ (x_n, y_n) $ comme suit.

Soit $ r $ un nombre aléatoire uniforme de [0,1]

$(x_{n+1},y_{n+1}) = $ (0.5, 0.27 y_n) \ \ (r<0.02) (-0.139 x_n+0.263 y_n +0.57, 0.246 x_n + 0.224 y_n - 0.036) \ \ (0.02\leqq r<0.17) (0.17x_n-0.215 y_n+0.408, 0.222 x_n+0.176 y_n +0.0893) \ \ (0.17\leqq r<0.3) (0.781 x_n + 0.034 y_n +0.1075, -0.032 x_n + 0.739 y_n + 0.27 \ \ (0.03\leqq r\leqq1)

Et.

(3) Arbre fractal

** Générez un motif en bois. ** **

Dans la règle 2 sur 1) Créer un triangle Sherpinsky Modifiez la règle pour générer un nouveau point $ (x_ {n + 1}, y_ {n + 1}) $ à partir de $ (x_n, y_n) $ comme suit.

$(x_{n+1},y_{n+1}) = $ $ (0,05, 0,6 y_n) $ (10% de chance) $ (0,05x_n, -0,5 y_n + 1,0 $ (probabilité 10%) $ (0,46x_n-0,15 y_n, 0,39 x_n + 0,38 y_n + 0,6 $ (probabilité 20%) $ (0,47x_n-0,15 y_n, 0,17 x_n + 0,42 y_n + 1,1 $ (probabilité de 20%) $ (0,43x_n + 0,28y_n, -0,25x_n + 0,45y_n + 1,0 $ (probabilité de 20%) $ (0,42x_n + 0,26y_n, -0,35x_n + 0,31y_n + 0,7 $ (probabilité de 20%)


Code (1): triangle de Shelpinsky


"""
Triangle de Shelpinsky

"""


import numpy as np
import matplotlib.pyplot as plt
from random import random, randrange
from math  import floor


fig=plt.figure()
anim=[]
#
a=np.zeros([3])
b=np.zeros([3])


X1,Y1=0,5
X2,Y2=5,0
X3, Y3=-5,0 

a[0], a[1], a[2] =X1, X2, X3
b[0],b[1], b[2]= Y1, Y2, Y3

plt.plot(a[0],b[0],'o',color='blue',markersize=1)
plt.plot(a[1],b[1],'o',color='blue',markersize=1)

plt.plot(a[2],b[2],'o',color='blue',markersize=1)

x=2.5
y=2.5
for i in range(15000):Boucle principale:Règles de production(1)
    if i%1000 ==0:
        print(i)

    n=randrange(3)
    x=(x+a[n])/2
    y=(y+b[n])/2
    plt.plot(x,y,'o',color='blue',markersize=1)

plt.show()

Résultat (1): triangle de Shelpinsky

t.png

Chaque partie est auto-similaire.


"""
Fougère Burnsley
"""

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation #Importer des méthodes pour créer des animations
from random import random, randrange
from math  import floor


fig=plt.figure()
anim=[]
#

x=0.5
y=0.5
for i in range(15000):Boucle principale:Règles de production(2)
    if i%1000==0:
        print(i)
    
    r=random()
    if r< 0.02:
        x,y = 0.5, 0.27*y
    
    elif 0.02 <= r <=0.17:
        x,y =  -0.139*x+0.263*y+0.57, 0.246*x+0.224*y-0.036
    
    elif 0.17 < r <=0.3:
        x,y = 0.17*x-0.215*y+0.408, 0.222*x+0.176*y+0.0893
    
    elif 0.3 < r <= 1:
        x,y = 0.781*x+0.034*y+0.1075, -0.032*x+0.739*y+0.27
    
    
    plt.plot(x,y,'o',color='blue',markersize=1)

plt.show()


Résultat (2): Burnsley Fern

t.png

Les feuilles élargies contiennent la même structure (auto-similitude). Cependant, comme vous pouvez le voir d'après la différence de feuilles entre les branches, la fougère entière n'a pas d'auto-similitude.



"""
Arbre fractal
13Aug. 2017
"""


import numpy as np
import matplotlib.pyplot as plt
from random import random, randrange
from math  import floor


fig=plt.figure()
anim=[]
#

x=0.5
y=0.5
for i in range(15000):Boucle principale:Règles de production(3)
    if i%1000==0:
        print(i)
    
    r=random()
    if r<= 0.1:
        x,y = 0.05, 0.6*y
    
    elif 0.1 < r <=0.2:
        x,y =  -0.05*x, -0.5*y+1.0
    
    elif 0.2 < r <=0.4:
        x,y = 0.46*x-0.15*y, 0.39 *x+0.38*y+0.6
    
    elif 0.4 < r <= 0.6:
        x,y = 0.47*x-0.15*y, 0.17*x+0.42*y+1.1
        
    elif 0.6 < r <= 0.8:
        x,y = 0.43*x+0.28*y, -0.25*x+0.45*y+1.0
        
    elif 0.8 < r <= 1.0:
        x,y = 0.42*x+0.26*y, -0.35*x+0.31*y+0.7
        
    
    plt.plot(x,y,'o',color='blue',markersize=1)
   # anim.append(im)

plt.show()



Résultat (3): Arbre fractal

tt.png


Addenda

● La géométrie fractale a des dimensions non entières ([Dimensions fractales](https://ja.wikipedia.org/wiki/%E3%83%95%E3%83%A9%E3%82%AF%E3%82%] BF% E3% 83% AB% E6% AC% A1% E5% 85% 83)). Il semble y avoir différentes définitions de cette dimension. Je pense que la définition de Hausdorf Beshikovic [1] est facile à comprendre. Soit la ligne droite unidimensionnelle, le triangle bidimensionnel et le solide tridimensionnel, et déterminez la dimension fractale de la figure symétrique.

● Mathématiquement, l'ensemble de points des arbres de fougères et de fractales à Burnsley est auto-affinité. Généré par une transformation avec [2]. Cela semble créer une autosimilitude.


Les références

[1] Yoshihide Okumura (Département de mathématiques, Faculté des sciences, Université de Shizuoka) pdf

[2] Page de commentaire par Mitoku Hayakawa (Division de l'éducation aux médias, Centre d'infrastructure d'information pédagogique, Université de Tohoku) )

Recommended Posts

[Calcul scientifique et technique par Python] Dessin de figures fractales [Triangle de Shelpinsky, fougère de Bernsley, arbre fractal]
[Calcul scientifique / technique par Python] Dessin d'animation de mouvement parabolique avec locus, matplotlib
[Calcul scientifique / technique par Python] Dessin de surface courbe 3D, surface, fil de fer, visualisation, matplotlib
[Calcul scientifique / technique par Python] Dessin, visualisation, matplotlib de lignes de contour 2D (couleur), etc.
[Calcul scientifique / technique par Python] Calcul de somme, calcul numérique
[Calcul scientifique / technique par Python] Calcul du produit de la matrice par l'opérateur @, python3.5 ou supérieur, numpy
[Calcul scientifique / technique par Python] Dérivation de solutions analytiques pour équations quadratiques et cubiques, formules, sympy
[Calcul scientifique / technique par Python] histogramme, visualisation, matplotlib
[Calcul scientifique / technique par Python] Interpolation de Lagrange, calcul numérique
Calcul des indicateurs techniques par TA-Lib et pandas
[Calcul scientifique / technique par Python] Calcul numérique pour trouver la valeur de la dérivée (différentielle)
[Calcul scientifique / technique par Python] Solution analytique sympa pour résoudre des équations
[Calcul scientifique / technique par Python] Graphique logistique, visualisation, matplotlib
[Calcul scientifique / technique par Python] Graphique de coordonnées polaires, visualisation, matplotlib
[Calcul scientifique / technique par Python] Tracé, visualisation, matplotlib de données 2D lues à partir d'un fichier
[Calcul scientifique / technique par Python] Solution numérique d'équations d'ondes unidimensionnelles et bidimensionnelles par méthode FTCS (méthode explicite), équations aux dérivées partielles bi-courbes
[Calcul scientifique / technique par Python] Interpolation spline de troisième ordre, scipy
[Calcul scientifique / technique par Python] Solution numérique d'une équation différentielle ordinaire du second ordre, problème de valeur initiale, calcul numérique
[Calcul scientifique / technique par Python] Intégration Monte Carlo, calcul numérique, numpy
[Calcul scientifique / technique par Python] Liste des utilisations des fonctions (spéciales) utilisées en physique en utilisant scipy
[Calcul scientifique / technique par Python] Vague "gémissement" et vitesse de groupe, superposition des vagues, visualisation, physique du lycée
[Calcul scientifique / technique par Python] Solution numérique d'un problème d'oscillateur harmonique unidimensionnel par vitesse Méthode de Berle
[Calcul scientifique / technique par Python] Solution numérique du problème des valeurs propres de la matrice par multiplication de puissance, algèbre linéaire numérique
[Calcul scientifique / technique par Python] Simulation de Monte Carlo par la méthode metropolis de la thermodynamique du système de spin ascendant 2D
[Calcul scientifique / technique par Python] Intégration numérique, loi trapézoïdale / Simpson, calcul numérique, scipy
[Calcul scientifique / technique par Python] Exemple de visualisation de champ vectoriel, champ magnétique électrostatique, matplotlib
[Calcul scientifique / technique par Python] Transformation de Fourier à grande vitesse discrète en 3D unidimensionnelle, scipy
[Calcul scientifique / technique par Python] Marche aléatoire 2D (problème de marche ivre), calcul numérique
[Calcul scientifique / technique par Python] Solution numérique d'une équation de conduction thermique non stationnaire unidimensionnelle par méthode Crank-Nicholson (méthode implicite) et méthode FTCS (méthode de solution positive)
[Calcul scientifique / technique par Python] Résolution d'équations différentielles ordinaires, formules mathématiques, sympy
[Ingénierie de contrôle] Calcul des fonctions de transfert et des modèles d'espace d'états par Python
[Calcul scientifique / technique par Python] Résolution du problème de la valeur aux limites des équations différentielles ordinaires au format matriciel, calcul numérique
[Calcul scientifique / technique par Python] Résolution de problèmes de valeurs propres (généralisés) en utilisant numpy / scipy, en utilisant des bibliothèques
[Calcul scientifique / technique par Python] Résolution de l'équation différentielle ordinaire du second ordre par la méthode Numerov, calcul numérique
[Calcul scientifique / technique par Python] Tracer, visualiser, matplotlib des données 2D avec barre d'erreur
[Calcul scientifique / technique par Python] Résolution de l'équation de Newton unidimensionnelle par la méthode Runge-Kutta du 4ème ordre
[Calcul scientifique / technique par Python] Génération de nombres aléatoires non uniformes donnant une fonction de densité de probabilité donnée, simulation Monte Carlo