diff options
Diffstat (limited to 'Demo/turtle/tdemo_planet_and_moon.py')
-rw-r--r-- | Demo/turtle/tdemo_planet_and_moon.py | 113 |
1 files changed, 0 insertions, 113 deletions
diff --git a/Demo/turtle/tdemo_planet_and_moon.py b/Demo/turtle/tdemo_planet_and_moon.py deleted file mode 100644 index 14c4bbc..0000000 --- a/Demo/turtle/tdemo_planet_and_moon.py +++ /dev/null @@ -1,113 +0,0 @@ -#!/usr/bin/env python3 -""" turtle-example-suite: - - tdemo_planets_and_moon.py - -Gravitational system simulation using the -approximation method from Feynman-lectures, -p.9-8, using turtlegraphics. - -Example: heavy central body, light planet, -very light moon! -Planet has a circular orbit, moon a stable -orbit around the planet. - -You can hold the movement temporarily by pressing -the left mouse button with mouse over the -scrollbar of the canvas. - -""" -from turtle import Shape, Turtle, mainloop, Vec2D as Vec -from time import sleep - -G = 8 - -class GravSys(object): - def __init__(self): - self.planets = [] - self.t = 0 - self.dt = 0.01 - def init(self): - for p in self.planets: - p.init() - def start(self): - for i in range(10000): - self.t += self.dt - for p in self.planets: - p.step() - -class Star(Turtle): - def __init__(self, m, x, v, gravSys, shape): - Turtle.__init__(self, shape=shape) - self.penup() - self.m = m - self.setpos(x) - self.v = v - gravSys.planets.append(self) - self.gravSys = gravSys - self.resizemode("user") - self.pendown() - def init(self): - dt = self.gravSys.dt - self.a = self.acc() - self.v = self.v + 0.5*dt*self.a - def acc(self): - a = Vec(0,0) - for planet in self.gravSys.planets: - if planet != self: - v = planet.pos()-self.pos() - a += (G*planet.m/abs(v)**3)*v - return a - def step(self): - dt = self.gravSys.dt - self.setpos(self.pos() + dt*self.v) - if self.gravSys.planets.index(self) != 0: - self.setheading(self.towards(self.gravSys.planets[0])) - self.a = self.acc() - self.v = self.v + dt*self.a - -## create compound yellow/blue turtleshape for planets - -def main(): - s = Turtle() - s.reset() - s.getscreen().tracer(0,0) - s.ht() - s.pu() - s.fd(6) - s.lt(90) - s.begin_poly() - s.circle(6, 180) - s.end_poly() - m1 = s.get_poly() - s.begin_poly() - s.circle(6,180) - s.end_poly() - m2 = s.get_poly() - - planetshape = Shape("compound") - planetshape.addcomponent(m1,"orange") - planetshape.addcomponent(m2,"blue") - s.getscreen().register_shape("planet", planetshape) - s.getscreen().tracer(1,0) - - ## setup gravitational system - gs = GravSys() - sun = Star(1000000, Vec(0,0), Vec(0,-2.5), gs, "circle") - sun.color("yellow") - sun.shapesize(1.8) - sun.pu() - earth = Star(12500, Vec(210,0), Vec(0,195), gs, "planet") - earth.pencolor("green") - earth.shapesize(0.8) - moon = Star(1, Vec(220,0), Vec(0,295), gs, "planet") - moon.pencolor("blue") - moon.shapesize(0.5) - gs.init() - gs.start() - return "Done!" - -if __name__ == '__main__': - msg = main() - print(msg) - #mainloop() |