Я пытаюсь создать орбитальный симулятор с помощью vpython, но когда я запускаю его, я просто получаю черный экран - PullRequest
0 голосов
/ 06 ноября 2018

Я использовал видео YouTube для основы своего кода и настроил его так, чтобы он включал в себя классы и объект. Оригинальный код из видео работает отлично. Моя версия кода возвращает черный экран, и даже когда я пытаюсь это исправить, мне больше всего повезло, что два объекта отображаются без движения. Я также попытался запустить его на glowscript IDE и winpython. Спасибо всем, кто может помочь!

from vpython import *

class Planet:

    def __init__(self, radius, colour, mass, x, y, z, vx, vy, vz):

        self.radius = int(radius)
        self.colour = colour
        self.mass = int(mass)
        self.x = int(x)
        self.y = int(y)
        self.z = int(z)
        self.vx = int(vx)
        self.vy = int(vy)
        self.vz = int(vz)

    def run_planet(self):

        r = self.radius
        c = self.colour
        px = self.x
        py = self.y
        pz = self.z
        vx = self.vx
        vy = self.vy
        vz = self.vz

        p = sphere(pos = vec(px, py, pz), radius = r, color = color.white, make_trail = True)

        v = vec(vx, vy, vz)

        for i in range(1000):
            rate(100)
            p.pos = p.pos + v
            dist = (p.pos.x**2 + p.pos.y**2 + p.pos.z**2)**0.5
            RadialVector = (p.pos - sun.pos)/dist
            Fgrav = -(6.674*10**11)*self.mass*(1.989*10**30) * RadialVector/dist**2
            v = v + Fgrav
            p.pos += v
            if dist <= sun.radius: break     

###############################################################################

sun = sphere(pos = vec(0,0,0), radius = 100, color = color.orange)
p1 = Planet(10, "blue", 20, -200, 0, 0, 0, 0, 5)

p1.run_planet()

Оригинальный код из видео:

sun = sphere(pos = vec(0,0,0), radius = 100, color = color.orange)
earth = sphere(pos = vec(-200,0,0), radius = 10, color = color.white, make_trail = True)

earthv = vec(0,0,5)

for i in range(10000000):
    rate(100)
    earth.pos = earth.pos + earthv
    dist = (earth.pos.x**2 + earth.pos.y**2 + earth.pos.z**2)**0.5
    RadialVector = (earth.pos - sun.pos)/dist
    Fgrav = -10000 * RadialVector/dist**2
    earthv = earthv + Fgrav
    earth.pos += earthv
    if dist<= sun.radius: break

Ps: любые физические исправления также будут очень благодарны!

1 Ответ

0 голосов
/ 15 ноября 2018

Расстояние между (центром) Солнца и (центром) планеты составляет всего 200 метров, поэтому рассчитанная сила является гигантской, а новое v имеет порядок от 10 до 38, поэтому сразу же планета находится так далеко от солнца, что камера ДВИЖЕТСЯ назад, чтобы попытаться показать всю сцену, оставляя экран черным, поскольку объекты теперь находятся очень далеко.

...