Ho scritto codice che disegna il frattale di Sierpinski. È molto lento poiché utilizza la ricorsione. Qualcuno di voi sa come potrei scrivere lo stesso codice senza ricorsione per essere più veloce? Qui è il mio codice:Generare il triangolo Sierpinski in modo iterativo in Mathematica?
midpoint[p1_, p2_] := Mean[{p1, p2}]
trianglesurface[A_, B_, C_] := Graphics[Polygon[{A, B, C}]]
sierpinski[A_, B_, C_, 0] := trianglesurface[A, B, C]
sierpinski[A_, B_, C_, n_Integer] :=
Show[
sierpinski[A, midpoint[A, B], midpoint[C, A], n - 1],
sierpinski[B, midpoint[A, B], midpoint[B, C], n - 1],
sierpinski[C, midpoint[C, A], midpoint[C, B], n - 1]
]
edit:
ho scritto con l'approccio del Caos gioco nel caso in cui qualcuno è interessato. Grazie per le tue fantastiche risposte! ecco il codice:
random[A_, B_, C_] := Module[{a, result},
a = RandomInteger[2];
Which[a == 0, result = A,
a == 1, result = B,
a == 2, result = C]]
Chaos[A_List, B_List, C_List, S_List, n_Integer] :=
Module[{list},
list = NestList[Mean[{random[A, B, C], #}] &,
Mean[{random[A, B, C], S}], n];
ListPlot[list, Axes -> False, PlotStyle -> PointSize[0.001]]]
Dai un'occhiata a http://stackoverflow.com/questions/159590/way-to-go-from-recursion-to-iteration –
Quando stavo disegnando queste cose ho scoperto che il rendering della grafica può richiedere molto più tempo di calcolare le posizioni dei triangoli. Ho anche usato un approccio ricorsivo (se un po 'diverso). – Szabolcs