
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




 
g = new graphics
g.backgroundColor[0,0,0] // black
g.color[0,0.5,0] // green
 
x = 0
y = 0
 
for i = 1 to 100000
{
   g.fillEllipseCenter[x*10,y*-10,0.25,0.25]
   z = random[1, 100]
   if z == 1
   {
      xn = 0
      yn = 0.16 * y
   }
   if z >= 2 and z <= 86
   {
      xn = 0.85 * x + 0.04 * y
      yn = -0.04 * x + 0.85 * y + 1.6
   }
   if z >= 87 and z <= 93
   {
      xn = 0.2 * x - 0.26 * y
      yn = 0.23 * x + 0.22 * y + 1.6
   }
   if z >= 94 and z <= 100
   {
      xn = -0.15 * x + 0.28 * y
      yn = 0.26 * x + 0.24 * y + 0.44
   }
   x = xn
   y = yn
}
 
g.show[]
 