Python中的巴恩斯利蕨类植物
巴恩斯利蕨类植物是由数学家迈克尔巴恩斯利创造的分形形状。这种分形的几何特征类似于天然蕨类植物,因此得名。 Barnsley fern 是通过对 Barnsley 引入的四个数学方程(称为迭代函数系统 (IFS))进行大量迭代而创建的。
巴恩斯利使用的变换有以下公式:
其中,字母具有以下值:
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) |
“p”是概率。
因此,四个方程是:
在上述方程的帮助下,蕨类植物被创造出来。现在让我们看看 Python3 的实现。
# importing necessary modules
import matplotlib.pyplot as plt
from random import randint
# initializing the list
x = []
y = []
# setting first element to 0
x.append(0)
y.append(0)
current = 0
for i in range(1, 50000):
# generates a random integer between 1 and 100
z = randint(1, 100)
# the x and y coordinates of the equations
# are appended in the lists respectively.
# for the probability 0.01
if z == 1:
x.append(0)
y.append(0.16*(y[current]))
# for the probability 0.85
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)
# for the probability 0.07
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)
# for the probability 0.07
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()
输出 :
注意:整个输出取决于方程的系数。一个实验可能是改变系数并每次都得到一个新的模式。