
A Barnsley fern is a fractal named after British mathematician Michael Barnsley and can be created using an iterated function system (IFS).



Task

Create this fractal fern, using the following transformations:

 ƒ1   (chosen 1% of the time)
        xn + 1 = 0
        yn + 1 = 0.16 yn

 ƒ2   (chosen 85% of the time)
        xn + 1 = 0.85 xn + 0.04 yn
        yn + 1 = −0.04 xn + 0.85 yn + 1.6

 ƒ3   (chosen 7% of the time)
        xn + 1 = 0.2 xn − 0.26 yn
        yn + 1 = 0.23 xn + 0.22 yn + 1.6

 ƒ4   (chosen 7% of the time)
        xn + 1 = −0.15 xn + 0.28 yn
        yn + 1 = 0.26 xn + 0.24 yn + 0.44.

Starting position: x = 0, y = 0




 
{def fern 
 {lambda {:size :sign}
  {if {> :size 2}
   then M:size
        T{* 70 :sign}
          {fern {* :size 0.5} {- :sign}}
        T{* {- 70} :sign}
        M:size
        T{* {- 70} :sign}
          {fern {* :size 0.5} :sign}
        T{* 70 :sign}
        T{* 7 :sign}
          {fern {- :size 1} :sign}
        T{* {- 7} :sign}
        M{* -:size 2}
   else }}}
 
{def F {fern 25 1}}
 
 