Barnsley Fern in Python
Last Updated :
22 Oct, 2018
Barnsley fern is a fractal shape created by mathematician Michael Barnsley. The geometric features of this fractal resemble a natural fern and hence it gets its name. Barnsley fern is created by iterating over a large number of times on four mathematical equations, introduced by Barnsley, known as
Iterated Function System (IFS).
The transformation Barnsley used had the formula :
where, the letters had following value :
a |
b |
c |
d |
e |
f |
p |
PART |
0 |
0 |
0 |
0.16 |
0 |
0 |
0.01 |
Stem |
0.85 |
0.04 |
-0.04 |
0.85 |
0 |
1.60 |
0.85 |
Small Leaflet |
0.20 |
-0.26 |
0.23 |
0.22 |
0 |
1.60 |
0.07 |
Large Leaflet(Left) |
-0.15 |
0.28 |
0.26 |
0.24 |
0 |
0.44 |
0.07 |
Large Leaflet(Right) |
and “p” is the probability.
Thus the four equations are:
With the help of above equations, the fern is created. Now lets see the Python3 implementation for the same.
import matplotlib.pyplot as plt
from random import randint
x = []
y = []
x.append( 0 )
y.append( 0 )
current = 0
for i in range ( 1 , 50000 ):
z = randint( 1 , 100 )
if z = = 1 :
x.append( 0 )
y.append( 0.16 * (y[current]))
if z> = 2 and z< = 86 :
x.append( 0.85 * (x[current]) + 0.04 * (y[current]))
y.append( - 0.04 * (x[current]) + 0.85 * (y[current]) + 1.6 )
if z> = 87 and z< = 93 :
x.append( 0.2 * (x[current]) - 0.26 * (y[current]))
y.append( 0.23 * (x[current]) + 0.22 * (y[current]) + 1.6 )
if z> = 94 and z< = 100 :
x.append( - 0.15 * (x[current]) + 0.28 * (y[current]))
y.append( 0.26 * (x[current]) + 0.24 * (y[current]) + 0.44 )
current = current + 1
plt.scatter(x, y, s = 0.2 , edgecolor = 'green' )
plt.show()
|
Output :
Note: The whole output depends upon the coefficients of the equations. One experiment might be to change the coefficients and get a new pattern every time.
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...