首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中绘制海威龙时的空白区域

在Python中绘制海威龙时的空白区域
EN

Stack Overflow用户
提问于 2020-03-31 12:22:58
回答 1查看 60关注 0票数 0

所以我一直在做一些来自成熟考试的练习,其中一个是画一条海威龙。

程序应该集中在两对变量上:

x‘= -0,4*x - 1

y‘= -0,4*y + 0,1

x‘= 0,76*x -0,4*y

y‘= 0,4*x + 0,76*y

在x= 1和y=1开始时,使用上面所示的随机取对公式(50/50机会)计算一个新的x和y,并在图表上标记点(x,y)。每件事都重复5000次。

所以我尝试使用python,但问题是,当我最终画了一条龙,在图表上,我可以看到它不是一个不变的绘图,但它有空白的区域,如下图所示。还是我犯了什么错?有什么办法让它看起来像正确的吗?

我的图表

正确的比较

我的代码:

代码语言:javascript
复制
import matplotlib.pyplot as plt
import random


x = 1
y = 1
sumx = 0
sumy = 0
max_x = 0
max_y = 0

for i in range(5000):

    rand = random.randint(0, 1)
    if rand == 0:
        x = (-0.4 * x) - 1
        y = (-0.4 * y) + 0.1
    else:
        x = (0.76 * x) - (0.4 * y)
        y = (0.4 * x) + (0.76 * y)
    if i >= 100:
        sumx += x
        sumy += y
        plt.plot(x, y, c='black', marker='P', markersize=6)

        if x > max_x:
            max_x = x
        if y > max_y:
            max_y = y

plt.show()
avg_x = sumx / 5000
avg_y = sumy / 5000
print(round(avg_x, 1), round(avg_y, 1))
print('maximum x: ' + str(max_x) + ', maximum y: ' + str(max_y))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-31 15:57:02

如果坐标x'y'确实是按照上面所写的方式计算的,那么您的代码就可以了(尽管我不知道为什么您只在迭代100次之后才开始绘图)。

然而,,调用pyplot的绘图函数在计算上是很昂贵的,因此我建议如下:

  • 计算所有xy值并将它们存储在列表中
  • 在for循环之外调用plt.scatter一次

这样,代码的执行时间就大大提高了。我已经在下面的代码中这样做了,并且删除了i >= 100的条件。我还改变了生成随机数的方式,以查看这是否有效果,但它仍然产生了与原始代码非常相似的输出(参见下面的图像)。

代码语言:javascript
复制
import matplotlib.pyplot as plt
import random
import sys

x = 1
y = 1
sumx = 0
sumy = 0
max_x = 0
max_y = 0

x_values = []
y_values = []

for i in range(5000):
    rand = random.uniform(0,1)
    if rand <= 0.5:
        x = ((-0.4 * x) - 1)
        y = ((-0.4 * y) + 0.1)
        x_values.append(x)
        y_values.append(y)
    else:
        x = ((0.76 * x) - (0.4 * y))
        y = ((0.4 * x) + (0.76 * y))
        x_values.append(x)
        y_values.append(y)
    sumx += x
    sumy += y

    if x > max_x:
        max_x = x
    if y > max_y:
        max_y = y

plt.scatter(x_values, y_values, c='black', marker='P')
plt.ylim([-1, 0.4])
plt.xlim([-1.5, 0.5])
plt.show()

avg_x = sumx / 5000
avg_y = sumy / 5000
print(round(avg_x, 1), round(avg_y, 1))
print('maximum x: ' + str(max_x) + ', maximum y: ' + str(max_y))

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60950463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档