【问题标题】:Why is vpython unable to display multiple spheres in some circumstances?为什么 vpython 在某些情况下无法显示多个球体?
【发布时间】:2020-04-03 20:22:56
【问题描述】:

我正在尝试用 Python 编写一个羊群心态模型 - “boids”。我在使用 vpython 3d 建模时遇到问题,因为它似乎无法一次显示多个球体,除非它们在代码中彼此相邻。

我的代码相关部分的基本内容是:

    def uniform_distr(x1, x2):
        x1, x2 = float(x1), float(x2)
        return x1 + random() * (x2 - x1)

    def random_position_vector():
        return vector(uniform_distr(-1, 1), uniform_distr(-1, 1), uniform_distr(-1, 1))

    def random_unit_vector():
        return norm(vector(random(), random(), random()))


    class Boid:
        def __init__(self,
                     initial_velocity = random_unit_vector(),
                     initial_position = random_position_vector()):

            self.velocity = initial_velocity

            self.position = initial_position

            self.model = sphere(pos = self.position, radius = 0.05, color = color.red,
                                    make_trail = False)


    boid_list = [Boid(), Boid(), Boid()]

我希望它显示三个随机放置的球体,但我只得到一个。我可以通过运行获得三个球体:

Ball1 = sphere(pos = vector(1,0,0), radius = 0.05)
Ball2 = sphere(pos = vector(0,1,0), radius = 0.05)
Ball3 = sphere(pos = vector(0,0,1), radius = 0.05)

造成这种情况的问题是什么?我已经阅读了很多文档,但我不明白为什么前面的代码中只显示了一个!

【问题讨论】:

    标签: python 3d vpython 3d-modelling


    【解决方案1】:

    请提供一个小而有效的程序。我不知道您使用的是什么环境,但我假设您使用的是 VPython 7(Jupyter notebook?Spyder?)并且您在代码前加上

    从 vpython 导入 * 随机导入 *

    我从这些行构建了一个程序,然后是您的第一个代码,然后是 3 个球体语句,我看到 3 个白色球体和 1 个红色球体。

    对于 VPython 问题,最好在 VPython 论坛上发帖,那里有更多的 VPython 用户会看到您的问题,而不是在 stackoverflow 上发帖:

    https://groups.google.com/forum/?fromgroups&hl=en#!forum/vpython-users

    【讨论】:

    • 我正在使用 Pycharm - 是的,我以此作为开头。顶部代码旨在提供三个球体,因为 Boid() 类被调用了 3 次。底部(单独的代码)旨在提供三个球体。我的问题是为什么顶部代码一次只能显示一个球体。
    • 我不完全理解它为什么会导致问题,但是对于 init 函数有 2 个参数对我来说看起来很奇怪,但是在创建时没有提供任何参数类实例。从 init 中删除这些参数,然后使用 self.position = random_position_vector() 和 self.velocity = random_unit_vector()。这似乎是 Python 问题,而不是 VPython 问题。如果您在当前代码中插入打印语句,您会看到确实创建了三个球体,但都具有相同的位置。顺便提一下,注意 VPython 向量类有一个函数 vector.random()
    • 当我想创建具有特定位置和速度而不是随机的 Boid 实例时,我使用了 init() 中的 args - 这是我对未来的想法之一。感谢 print() 的提示,我没有这样做!
    猜你喜欢
    • 2019-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2021-11-01
    • 2018-08-13
    • 1970-01-01
    相关资源
    最近更新 更多