Re: Simple fractal
- To: mathgroup at smc.vnet.net
- Subject: [mg121812] Re: Simple fractal
- From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
- Date: Mon, 3 Oct 2011 04:23:21 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201110020636.CAA28033@smc.vnet.net>
Hi,
not the fastest/cleverest/best solution but hopefully an understandable
one:
First a function which takes a starting point and a scale and creates an
arbitrary *Triangle* object which contains the vertex points and the
scaling factor:
MakeTriangle[pos0_, scale_] :=
Triangle[Table[
pos0 + scale {Cos[i*120*Degree], Sin[i*120*Degree]}, {i, 1, 3}],
scale];
Second a function which executes exactly one recursion step. It takes a
triangle and gives the three new triangles which are one recursion depth
deeper:
TriangleRecursionStep[Triangle[points_, scale_]] :=
Function[MakeTriangle[#, scale]] /@ points
Third you make a recursion which starts with an initial triangle and a
wanted recursion depth. Note how the nested resulting list of triangles
is build implicitely after all recursions are done.
TriangleRecursion[triangle_, 0] := triangle;
TriangleRecursion[tri_Triangle, depth_Integer /; depth > 0] := {tri,
TriangleRecursion[#, depth - 1] & /@ TriangleRecursionStep[tri]}
To display the result you can easily replace a Triangle[...] object by
some graphical representation of your personal liking:
Graphics[{TriangleRecursion[MakeTriangle[{0, 0}, 0.5], 5] /.
Triangle[
points_, _] :> {With[{col =
ColorData["DarkBands", RandomReal[]]}, {EdgeForm[{Opacity[1],
Thin, Dashed, col}], FaceForm[{Opacity[0.1], col}],
Polygon[points]}]}}]
Cheers
Patrick
Easy to copy full code:
MakeTriangle[pos0_, scale_] :=
Triangle[
Table[pos0 + scale*{Cos[i*120*Degree], Sin[i*120*Degree]},
{i, 1, 3}], scale];
TriangleRecursionStep[Triangle[points_, scale_]] :=
(MakeTriangle[#1, scale] & ) /@ points;
TriangleRecursion[triangle_, 0] := triangle;
TriangleRecursion[tri_Triangle, depth_Integer /; depth > 0] :=
{tri, (TriangleRecursion[#1, depth - 1] & ) /@
TriangleRecursionStep[
tri]};
Graphics[{TriangleRecursion[MakeTriangle[{0, 0}, 0.5], 5] /.
Triangle[points_, _] :>
{With[{col = ColorData["DarkBands", RandomReal[]]},
{EdgeForm[{Opacity[1], Thin, Dashed, col}],
FaceForm[{Opacity[0.1], col}], Polygon[points]}]}}]
On Sun, 2011-10-02 at 02:36 -0400, Tom De Vries wrote:
> I am trying to create a very simple fractal, but I am not having any success.
>
> I'd like to learn how to do this recursively, and hoping someone can
> give me a bit of a push in the right direction.
>
> It's a simple triangle with triangles at each corner, with triangles
> at each corner, etc.
>
> Below, a simple "level 1" graphic.
>
> scale = 0.5;
>
> list1 = Table[{0, 0} + {Cos[i*120*Degree], Sin[i*120*Degree]}, {i, 1,
> sides + 1}];
>
> list2 = (Table[#1 + scale*{Cos[i*120*Degree], Sin[i*120*Degree]}, {i,
> 1, sides + 1}] & ) /@ list1;
>
> Graphics[{Line[list1], Line[list2]}]
>
>
> Ideally I'd like to have a Manipulate with a slider for the level of
> the fractal, the scale applied to each level, and the distance each
> corner triangle is from the centre triangle.
>
> Sorry, I know this is simple programming, but I don't have any ideas
> how to start.
>
> Tom De Vries
>
- References:
- Simple fractal
- From: Tom De Vries <tidetabletom@gmail.com>
- Simple fractal