巴恩斯利蕨用蟒蛇语言

时间:2015-02-23 14:04:48

标签: python-2.7

我需要帮助这个巴恩斯利蕨类植物计划。当我运行我的代码时,我根本没有得到叶子图片并得到错误运行时消息我知道我很接近但需要一些帮助

#! /usr/bin/env python


import matplotlib.pyplot as plt
import random

# starting values
x = 0.5
y = 0.0

for i in range(10000):
        rand = (random.randrange(0,1))
        if (rand < 0.02):
                x = 0.5
                y = 0.27*y
        if  ((0.02 <= rand) and (rand <= 0.17)):
                x = -0.139*x + 0.263*y + 0.57
                y = 0.246*x + 0.224*y - 0.036
        if  ((0.17 < rand) and (rand <= 0.3)):
                x = 0.17*x - 0.215*y + 0.408
                y = 0.222*x + 0.176*y + 0.0893
        if ((0.3 < rand) and (rand < 1.0)):
                x = 0.781*x + 0.034*y + 0.1075
                y = -0.032*x +0.739*y + 0.27


plt.plot(x,y,'.')
plt.show()

3 个答案:

答案 0 :(得分:2)

您的代码存在两个主要问题:

  1. random.randrange(0, 1)总是产生0。请尝试使用random.random()

  2. 您需要缩进plot命令才能在每次迭代中执行它。

  3. 此外,最好首先收集一个大型数组中的所有坐标,然后调用plot命令。这可能会更有时间效率,因为您只需要调用渲染引擎一次。

    enter image description here

答案 1 :(得分:0)

您只有一个点,因为您只向x提供一个y和一个plot。您需要将值放在列表中:

# starting values
x = 0.5
y = 0.0
# Lists of coordinates to plot
xlist = [x]
ylist = [y]
for i in range(10000):
        rand = (random.randrange(0,1))
        if (rand < 0.02):
                x = 0.5
                y = 0.27*y
        if  ((0.02 <= rand) and (rand <= 0.17)):
                x = -0.139*x + 0.263*y + 0.57
                y = 0.246*x + 0.224*y - 0.036
        if  ((0.17 < rand) and (rand <= 0.3)):
                x = 0.17*x - 0.215*y + 0.408
                y = 0.222*x + 0.176*y + 0.0893
        if ((0.3 < rand) and (rand < 1.0)):
                x = 0.781*x + 0.034*y + 0.1075
                y = -0.032*x +0.739*y + 0.27
        xvec.append(x)
        yvec.append(y)
plt.plot(x, y, '.')
plt.show()

答案 2 :(得分:0)

使用random.uniform(0,1)而不是random.randrange(0,1)。它将在0和1之间随机返回一个浮点数

import random
import matplotlib.pyplot as plt
# starting values
x = 0.5
y = 0.0
# Lists of coordinates to plot
xvec = [x]
yvec = [y]
for i in range(10000):
        rand = random.uniform(0, 1)
        if (rand < 0.02):
                x = 0.5
                y = 0.27*y
        if  ((0.02 <= rand) and (rand <= 0.17)):
                x = -0.139*x + 0.263*y + 0.57
                y = 0.246*x + 0.224*y - 0.036
        if  ((0.17 < rand) and (rand <= 0.3)):
                x = 0.17*x - 0.215*y + 0.408
                y = 0.222*x + 0.176*y + 0.0893
        if ((0.3 < rand) and (rand < 1.0)):
                x = 0.781*x + 0.034*y + 0.1075
                y = -0.032*x +0.739*y + 0.27
        xvec.append(x)
        yvec.append(y)
plt.plot(xvec, yvec, '.')
plt.show()