Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1819:programmcode

Dies ist eine alte Version des Dokuments!


Code

# -*- coding: utf-8 -*-
from model import World, WorldOutput
from file_model import WorldFileInput, WorldFileOutput
from physics_euler import PhysicsEngineEuler
from physics_rk4 import PhysicsEngineRK4
from physics_leapfrog import PhysicsEngineLeap
from physics_skyfield import PhysicsEngineSkyfield
from render import RenderEngineVPython
import sys
 
class WorldLogOutput(WorldOutput):
 
    def start(self):
        self.print_state()
 
    def step(self):
        self.print_state()
 
    def print_state(self):
        for key, wo in self.world.world_objects:
            print('{time},{key},{wo}'.format(
                    time=self.world.time, key=key, wo=wo))
 
input_type = sys.argv[1]
output_types = sys.argv[2].split(',')
end_time = float(sys.argv[3])
path = sys.argv[4]
world = World()
 
if input_type.startswith('file'):
    world.input = WorldFileInput(world, path)
elif input_type.startswith('euler'):
    #Init world
    o = WorldFileOutput(world, path)
    parts = input_type.split(':')
    dt = 1.0
    if len(parts) > 1:
        dt = float(parts[1])
    world.input = PhysicsEngineEuler(world, dt)
elif input_type.startswith('rk4'):
    #Init world
    o = WorldFileOutput(world, path)
    parts = input_type.split(':')
    dt = 1.0
    if len(parts) > 1:
        dt = float(parts[1])
    world.input = PhysicsEngineRK4(world, dt)
elif input_type.startswith('leapfrog'):
    #Init world
    o = WorldFileOutput(world, path)
    parts = input_type.split(':')
    dt = 1.0
    if len(parts) > 1:
        dt = float(parts[1])
    world.input = PhysicsEngineLeap(world, dt)
elif input_type.startswith('skyfield'):
    #Init world
    o = WorldFileOutput(world, path)
    parts = input_type.split(':')
    dt = 1.0
    if len(parts) > 1:
        dt = float(parts[1])
    world.input = PhysicsEngineSkyfield(world, dt)
 
for output_type in output_types:
    if output_type.startswith('vpython'):
        parts = output_type.split(':')
        time_scale = 1.0
        radius_scale = 1.0
        if len(parts) > 1:
            time_scale = float(parts[1])
        if len(parts) > 2:
            radius_scale = float(parts[2])
        world.outputs.append(RenderEngineVPython(world, time_scale, radius_scale))
    if output_type.startswith('file'):
        world.outputs.append(WorldFileOutput(world, path))
    if output_type.startswith('log'):
        world.outputs.append(WorldLogOutput(world))
 
world.start(end_time)
ws1819/programmcode.1551695215.txt.gz · Zuletzt geändert: 2019/03/04 11:26 von lennox99