Eine fraktale Figur ist dieselbe wie die ursprüngliche Figur, egal wie stark sie vergrößert ist. Die Shelpinsky-Dichtung, eine typische fraktale Figur, ist unten dargestellt.
fractal.py
import matplotlib.pyplot as plt
import matplotlib.patches as pat
import math
#triangle = [(x1,y1),(x2,y2),(x3,y3)]
#Geben Sie die Koordinaten des Dreiecks im Eingabedreieck aus
def return_triangle(triangle):
x1 = (triangle[0][0] + triangle[1][0])/2
y1 = (triangle[0][1] + triangle[1][1])/2
x2 = (triangle[1][0] + triangle[2][0])/2
y2 = (triangle[1][1] + triangle[2][1])/2
x3 = (triangle[2][0] + triangle[0][0])/2
y3 = (triangle[2][1] + triangle[0][1])/2
new_triangle = [(x1,y1),(x2,y2),(x3,y3)]
return new_triangle
#Geben Sie den Abstand zwischen zwei Punkten aus
def distance(p1,p2):
return math.sqrt((p1[0]-p2[0])**2 + (p1[1]-p2[1])**2)
#Gibt ein Dreieck aus, das aus den beiden Punkten besteht, die dem Punkt p an den Punkten p und dem Dreieck am nächsten liegen
def select_neighbor_points(p, triangle):
distance1 = distance(p, triangle[0])
distance2 = distance(p, triangle[1])
distance3 = distance(p, triangle[2])
if distance1 > distance2:
if distance1 > distance3:
return [p, triangle[1], triangle[2]]
else:
return [p, triangle[0], triangle[1]]
else:
if distance2 > distance3:
return(p, triangle[0],triangle[2])
else:
return(p, triangle[0],triangle[1])
#Generieren Sie eine fraktale Figur. Je größer die Anzahl der Iterationen ist, desto komplizierter
def produce_fractal1(triangle, iteration):
if iteration == 0: return 0
p1 = triangle[0]
p2 = triangle[1]
p3 = triangle[2]
new_triangle = return_triangle(triangle)
p = pat.Polygon(xy = new_triangle,fc = "white", ec = "black")
ax.add_patch(p)
produce_fractal1(select_neighbor_points(p1,new_triangle), iteration-1)
produce_fractal1(select_neighbor_points(p2,new_triangle), iteration-1)
produce_fractal1(select_neighbor_points(p3,new_triangle), iteration-1)
triangle = [(0.2, 0.2), (0.8, 0.2), (0.5, 0.8)] #Anfängliche Dreieckskoordinaten
fig = plt.figure(figsize=(5, 5))
ax = fig.add_subplot(1,1,1)
p = pat.Polygon(xy = triangle,fc = "white", ec = "black")
ax.add_patch(p)
produce_fractal1(triangle,6)
fig.savefig("./fractal.png ") #Bild speichern
Einfache Implementierung mit rekursiver Verarbeitung. Die Ausführung erfolgte mit Jupyter.
fractal.py
produce_fractal1(triangle,iteration)
Durch Erhöhen der Anzahl der Iterationen werden Dreiecke tiefer erzeugt.
Durch die gute Implementierung des rekursiven Prozesses konnte ich eine Shelpinsky-Casquette erstellen. Durch Ändern des Inhalts des rekursiven Prozesses konnte ich andere fraktale Figuren erstellen.
Recommended Posts