В моей ООП-версии Солнечной системы мои планеты отображаются, но не движутся. Функции написаны, но почему-то это не работает. Я думаю, что это может быть что-то маленькое, но я не узнал об этом. Я уже пытался писать планеты строчными буквами везде, но это не помогло. В моей обычной версии это работало, но теперь генерируются только планеты, и больше ничего не происходит. Они просто застряли в исходном положении.
from vpython import *
#constants
#array
planets = []
class Sphere(object):
def __init__(self, pos, radius, make_trail):
self.pos = pos
self.radius = radius
self.make_trail = make_trail
class planet(Sphere):
def __init__(self, pos, radius, make_trail, mass, velocity):
super().__init__(pos, radius, make_trail)
self.mass = mass
self.velocity = velocity
planetSphere = sphere(pos = self.pos,
radius = self.radius,
make_trail = self.make_trail,
mass = self.mass,
velocity = self.velocity)
sun = planet(pos=vec(0,0,0), radius=s_rad1*1.5,
make_trail=True, mass=2e30,
velocity=vec(0,0,0))
mercury = planet(pos=vec(ae/3,0,0), radius=s_rad1/1.5,
make_trail=True, mass=3.25e23,
velocity=vec(0,0,-47000))
#...Other Planets
pluto = planet(pos=vec(ae*39.37,0,0), radius=s_rad1/2.4,
make_trail=True, mass=1.3e22,
velocity=vec(0,0,-4740))
planets.extend((mercury, venus, earth, mars, jupiter, saturn, uranus, neptun, pluto))
dt = 10000
time = 0.1
while (True):
rate(framerate)
g_forceS = vec(0,0,0)
for planet in planets:
g_force = g * sun.mass * planet.mass * (sun.pos - planet.pos).norm() / (sun.pos - planet.pos).mag2
g_forceS -= g_force
planet.velocity = planet.velocity + ( g_force / planet.mass) * dt
planet.pos += planet.velocity * dt
sun.velocity = sun.velocity + ( g_forceS / sun.mass) * dt
sun.pos += sun.velocity * dt