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];
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));
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;
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:
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:
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:
> opts:= 'axes = none,
color = black,
filled = true,
size = [280, 280]':
color = black,
filled = true,
size = [280, 280]':
Der Start der Sierpinski-Iteration mit dem oben definierten Dreieck ABC:
> CreateTriangles(M);
draw(Dreiecke, opts);
m;
m;
0
Der erste Iterationsschritt:
> NextSet(M);
CreateTriangles(M);
draw(Dreiecke, opts);
m;
draw(Dreiecke, opts);
m;
1
Weitere Schritte:
> NextSet(M):
CreateTriangles(M):
draw(Dreiecke, opts);
m;
draw(Dreiecke, opts);
m;
2
> NextSet(M):
CreateTriangles(M):
draw(Dreiecke, opts);
m;
draw(Dreiecke, opts);
m;
3
> NextSet(M):
CreateTriangles(M):
draw(Dreiecke, opts);
m;
draw(Dreiecke, opts);
m;
4
> NextSet(M):
CreateTriangles(M):
draw(Dreiecke, opts);
m;
draw(Dreiecke, opts);
m;
5