Dies ist eine alte Version des Dokuments!
# -*- 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)