|
||
Title: Trimming trees for fractal fun Post by ecoist on Apr 8th, 2007, 10:37am Sierpinski's Triangle is generated by dissecting an equilateral triangle into four congruent equilateral triangles. Then the center part is removed, the remaining three parts dissected, the center triangle of each part removed, the remaining 9 parts dissected, the center parts of each part removed, and so on, ad infinitum. What if a corner part is removed as above? You get [img][/img] Or, instead of removing parts, you change the color of parts? I've experimented with this idea of massaging the Sierpinski Triangle trick and obtained some nice looking fractals (and designs). Has anyone else played with this idea? |
||
Title: Re: Trimming trees for fractal fun Post by towr on Apr 8th, 2007, 10:49am I played around with other shapes than triangles a bit.. And various scaling factors. Nothing noteworthy though.. |
||
Title: Re: Trimming trees for fractal fun Post by ecoist on Apr 8th, 2007, 10:57am Thanks, towr. Looking for inspiration from you guys. Here's one with color. [img][/img] |
||
Title: Re: Trimming trees for fractal fun Post by ecoist on Apr 12th, 2007, 3:10pm Found another one! Looks like a shaggy dog. towr, I've tried other shapes too, isosceles right triangle, self-similar in two parts, and a 30-60-90 degree triangle, self-similar in three parts.[img][/img] |
||
Title: Re: Trimming trees for fractal fun Post by towr on Apr 12th, 2007, 3:34pm Well, any triangle is just an affine transformation of the regular one. It doesn't really change the end result much. http://math.bu.edu/DYSYS/applets/fractalina.html has a nice applet to make fractals starting from any given set of points. |
||
Title: Re: Trimming trees for fractal fun Post by ecoist on Apr 12th, 2007, 5:30pm My experience is limited but it tells me that Iterated Function Systems (IFS) are powerful enough to reproduce virtually any fractal, but they lack the simplicity of fractals produced by punching holes in self-similar figures (the original construction of Sierpinski's Triangle). This simplicity comes at a cost, because self-similarity is not preserved by affine transformations. Also, this simplicity both eases the creation of fractals and increases the challenge in creating "organic" fractals. |
||
Title: Re: Trimming trees for fractal fun Post by ecoist on Apr 15th, 2007, 11:58am Here's the program that created all the pictures. The data in the two arrays, fsm and clr, determine what picture is drawn. The data exhibited below defines a new picture reminiscent of Escher designs. option angle degrees FOR i=0 to 215 LET r=mod(i,6)/5 LET q=int(i/6) LET g=mod(q,6)/5 LET b=int(q/6)/5 SET COLOR MIX (i+16) r,g,b NEXT i let c=1/2 dim fsm(0 to 3,0 to 9) for i=0 to 3 for j=0 to 9 read fsm(i,j) next j next i data 1,0,2,3,4,0,6,7,8,9 ! Finite state mschine array data 0,2,2,3,4,0,6,7,8,9 data 0,0,2,3,4,0,6,7,8,9 data 0,3,2,3,4,6,6,7,8,9 dim clr(0 to 9) for i=0 to 9 read clr(i) next i data 0,0,43,43,43,0,45,14,30,11 ! Colors assigned to states of fsm dim tree(0 to 80) dim state(40,4) ! Program set window 0,4,0,3 do print"Number of iterations."; input depth if depth<0 then exit do clear let level=1 let lvl=1 let tree(lvl)=0 let sc=2.8 let x=.4 let y=.1 let trn=30 call sierpnsk(depth) loop ! subroutines sub word(a) ! Subroutine which associates position in let f=tree(lvl) ! recursion tree with fsm state. In short, let lvl=lvl+1 ! identifies the "holes". let tree(lvl)=fsm(a,f) end sub sub scale(b) let sc=sc*b end sub sub turn(a) let trn=trn+a end sub sub draw(s) !draw a line forward let dx=sc*s*cos(trn) let dy=sc*s*sin(trn) plot x,y;x+dx,y+dy let x=x+dx let y=y+dy end sub sub move(s) !move forward let dx=sc*s*cos(trn) let dy=sc*s*sin(trn) let x=x+dx let y=y+dy end sub sub push !save the graphics state let state(level,1)=sc let state(level,2)=x let state(level,3)=y let state(level,4)=trn let level=level+1 end sub sub pop !restore the graphics state let level=level-1 let sc=state(level,1) let x=state(level,2) let y=state(level,3) let trn=state(level,4) end sub sub sierpnsk(depth) !recursively draw triangle fill if depth=1 then set color clr(tree(lvl)) call draw(1) else call scale(c) call word(0) call sierpnsk(depth-1) let lvl=lvl-1 call move(1) call push call turn(-120) call word(1) call sierpnsk(depth-1) let lvl=lvl-1 call pop call push call turn(180) call word(2) call sierpnsk(depth-1) let lvl=lvl-1 call pop call push call turn(120) call word(3) call sierpnsk(depth-1) let lvl=lvl-1 call pop call scale(1/c) end if end sub end |
||
Powered by YaBB 1 Gold - SP 1.4! Forum software copyright © 2000-2004 Yet another Bulletin Board |