|
|
Das Sierpinski-Dreieck
> |
restart; with (geometry): |
Definition des gleichseitigen Dreiecks ABC
mit A = (0|0); B = (1|0) und
C = (0,5|0,5 ):
> |
A:= [0,0]:
B:= [1,0]:
C:= [1/2, 1/2*sqrt(3)]:
ABC:= [A, B, C]; |

Definition von drei zentrischen Streckungen f1, f2 und
f3:
> |
f[1]:= (x1,x2) -> 1/2*(x1,x2);
f[2]:= (x1,x2) -> 1/2*(x1,x2) + (1/2, 0);
f[3]:= (x1,x2) -> 1/2*(x1,x2) + (1/4, 1/4*sqrt(3)); |



Startmenge M der Sierpinski-Mengenfolge:
> |
M:= {ABC};
n:= nops (M); m:= 0; |



Iterationsvorschrift zur Erzeugung der Sierpinskifolge M0,
M1, M2, ...
> |
NextSet:= proc ()
local i, j; global M, n, m;
m:= m + 1;
n:= nops (M);
for i from 1 to n do Told||i:= op (i, M); od;
for i from 1 to n do
for j from 1 to 3 do
Tnew||i||j:=[[f[j](Told||i[1][1],Told||i[1][2])],
[f[j](Told||i[2][1],Told||i[2][2])],
[f[j](Told||i[3][1],Told||i[3][2])]];
M:= M union {Tnew||i||j};
od:
M:= M minus {Told||i};
od;
end:
|
> |
CreateTriangles:= proc (M)
local i, j;
global n, T, P1, P2, P3, Dreiecke;
n:= nops (M);
Dreiecke:= {};
for i from 1 to n do
for j from 1 to 3 do
point (P||i||j,op(j,op(i,M))[1],op(j,op(i,M))[2]);
od;
triangle (T||i, [P||i||1, P||i||2, P||i||3]);
Dreiecke:= Dreiecke union {T||i};
od;
end: |
Der Start der Sierpinski-Iteration mit dem oben definierten Dreieck ABC:
> |
CreateTriangles (M);
draw (Dreiecke, axes=none, color=black, filled=true); m; |

Der erste Iterationsschritt:
> |
NextSet (M);
CreateTriangles (M); draw (Dreiecke, axes=none, color=black, filled=true); m; |


Weitere Schritte:
> |
NextSet (M):
CreateTriangles (M): draw (Dreiecke, axes=none, color=black, filled=true); m; |

|