Ich habe mir das so gedacht, dass ich das mit einer 2-Fachen for Schlaufe schaffen könnte. Also eine in der anderen. Ich habe das mal versucht aber leider funktioniert es nicht. Könnt ihr mir vlt. weiterhelfen. Ich glaube das Problem liegt auch darin das ich vorher immer einen festen Fixpunkt (Sonne) hatte und jetzt steht halt immer Planet.
Hier ist mein Code
Code: Alles auswählen
from vpython import *
#Konstanten zum rechnen
s_rad0 = 6.9e8
s_rad1 = 10 * s_rad0
e_rad = s_rad1 * 0.65
m_rad = e_rad * 0.4
ae = 200 * s_rad0 #1 Astr. Einheit bezieht sich auf Ent. Sonne-Erde
ae2 = 200 * s_rad0 #bezieht sich auf Ent. Sonne-Mond
g = 6.6725e-11
framerate = 100
#array liste von Planeten
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))
venus = planet(pos=vec(ae/1.6,0,0), radius=s_rad1/1.3, make_trail=True, mass=4.9e24, velocity=vec(0,0,-35000))
earth = planet(pos=vec(ae,0,0), radius=e_rad, mass=5.9e24, make_trail=True, velocity=vec(0,0,-25000))
mars = planet(pos=vec(ae*1.52,0,0), radius=s_rad1/1.8, make_trail=True, mass=6.4e23, velocity=vec(0,0,-24000))
jupiter = planet(pos=vec(ae*5.18,0,0), radius=s_rad1/1.2, make_trail=True, mass=10e27, velocity=vec(0,0,-9678))
saturn = planet(pos=vec(ae*9.5,0,0), radius=s_rad1/1.4, make_trail=True, mass=5.7e26, velocity=vec(0,0,-7678))
uranus = planet(pos=vec(ae*19.13,0,0), radius=s_rad1/1.7, make_trail=True, mass=8.7e25, velocity=vec(0,0,-6772))
neptun = planet(pos=vec(ae*30,0,0), radius=s_rad1/1.7, make_trail=True, mass=1.02e26, velocity=vec(0,0,-5344))
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)
#for-Schlaufe für Berechnung jedes einzelnen Planeten
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
for planet in planets:
g_force = g * planet.mass * planet.mass * (planet.pos - planet.pos).norm() / (planet.pos - planet.pos).mag2
#Sonne
g_forceS -= g_force
#Änderung des Velocity Vektor wird zum alten addiert
#Da a=F/m // V = a*t(a*dt) 2 Geschw. vektoriell durch F/m ausgedrückt.
planet.velocity = planet.velocity + ( g_force / planet.mass) * dt #Richtungsänderung
#Diese Änderung wird zur alten Position addiert = neue Position
planet.pos += planet.velocity * dt
sun.velocity = sun.velocity + ( g_forceS / sun.mass) * dt #Richtungsänderung
sun.pos += sun.velocity * dt