
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




'Barnsley Fern - Run BASIC
  'http://rosettacode.org/wiki/Barnsley_fern#Run_BASIC
  'copy code and run it at http://www.runbasic.com
  '
  ' -----------------------------------
  ' Barnsley Fern
  ' -----------------------------------maxpoints	= 20000
graphic #g, 200, 200
#g fill("blue")
FOR n	= 1 TO maxpoints
p	= RND(0)*100
IF p <= 1 THEN 
	nx	= 0 
	ny	= 0.16 * y
else if p <= 8 THEN 
	nx	= 0.2 * x - 0.26 * y
	ny	= 0.23 * x + 0.22 * y + 1.6
else if p <= 15 THEN 
	nx	= -0.15 * x + 0.28 * y
	ny	= 0.26 * x + 0.24 * y + 0.44
else
	nx	= 0.85 * x +0.04 * y
	ny	= -0.04 * x +0.85 * y + 1.6
end if
x	= nx
y	= ny
#g "color green ; set "; x * 17 + 100; " "; y * 17
 
NEXT n
render #g
#g "flush"