
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




nomainwin
WindowWidth=800
WindowHeight=600
open "Barnsley Fern" for graphics_nf_nsb as #1
#1 "trapclose [q];down;fill black;flush;color green"
 
for n = 1 To WindowHeight * 50
    r = int(rnd(1)*100)
    Select Case
      Case (r>=0) and (r<=84)
        xn=0.85*x+0.04*y
        yn=-0.04*x+0.85*y+1.6
      Case (r>84) and (r<=91)
        xn=0.2*x-0.26*y
        yn=0.23*x+0.22*y+1.6
      Case (r>91) and (r<=98)
        xn=-0.15*x+0.28*y
        yn=0.26*x+0.24*y+0.44
      Case Else
        xn=0
        yn=0.16*y
    End Select
    x=xn
    y = yn
    #1 "set ";x*80+300;" ";WindowHeight/1.1-y*50
  next n
  #1 "flush"
  wait
[q]
close #1
 