Sierpinski carpet

*To*: mathgroup at smc.vnet.net*Subject*: [mg76741] Sierpinski carpet*From*: "Anolethron" <theverybastard at tin.it>*Date*: Sat, 26 May 2007 04:47:22 -0400 (EDT)

What I'm trying to do is basically constructing a Sierpinski's carpet with an algorithm that can be generalized to the construction of a Menger Sponge. e1 = {1, 0}; e2 = {0, 1}; p1 = {0, 0}; p2 = {1, 0}; p3 = {1, 1}; p4 = {0, 1}; Sierpinski[{p1_, p2_, p3_, p4_}] := Delete[Flatten[ Table[{p1 + m e1 + n e2, p2 + m e1 + n e2, p3 + n e2 + m e1, p4 + m e1 + n e2}, {n, 0, 2}, {m, 0, 2}], 1], 5]; Sierpinski1 = Sierpinski[{p1, p2, p3, p4}] Sierpinski2[ls_] := Flatten[Map[Sierpinski, ls], 1] S2 = Sierpinski2[Sierpinski1] Sierpinski3[n_] := Nest[Sierpinski2, {{p1, p2, p3, p4}}, n] Sierpinski3[3] Now, I'm not good enough to think of a much more complicated construction and the problem is that with this algorithm the lengths of the squares I construct at each step does not scale down with the level of the carpet I'm constructing: e.g. He builds 9 squares from the big one at the beginning and deletes the central one, it's ok. But as I Iterate the process at each smaller square It builds squares of the same size, so what I get is just a big black figure. It obviously does this way because in the algorithm there's no instruction to decrease the size of the base vectors (e1,e2). Thing is I can't think of a way to give mathematica that instruction inside the Nest or in the definition of the basic "Sierpinski" function. I need some help. Thanks in advance. This is the expected result: http://mathworld.wolfram.com/SierpinskiCarpet.html