Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- # -*- coding: utf8 -*-
- dimension=800 #(0.01 of A.U.)
- dt = 0.0001
- delay=1
- import numpy as np
- import Tkinter
- import itertools
- class Planet:
- def __init__(self,canv,x,y,vx,vy,color,index):
- self.x = float(x)
- self.y = float(y)
- self.vx = float(vx)
- self.vy = float(vy)
- self.color = color
- self.canv = canv
- self.index=index
- self.position=self.canv.create_oval(400+int(200*self.x)-5,400+int(200*self.y)-5,
- 400+int(200*self.x)+5,400+int(200*self.y)+5,fill=self.color,outline='white')
- self.energy = self.canv.create_text(100,100*self.index,text=str(0.5 * (self.vx**2+self.vy**2)),fill=self.color)
- def time_step(self):
- canv.delete(self.position)
- canv.delete(self.energy)
- self.energy = self.canv.create_text(100,100*self.index,text=str(0.5 * (self.vx**2+self.vy**2)),fill=self.color)
- self.canv.create_oval(400+int(200*self.x),400+int(200*self.y),
- 400+int(200*self.x),400+int(200*self.y),fill=self.color,outline=self.color)
- self.vx = self.vx - np.sign(self.x)/(self.x**2 + self.y**2) * dt
- self.vy = self.vy - np.sign(self.y)/(self.x**2 + self.y**2) * dt
- self.x = self.x + self.vx * dt
- self.y = self.y + self.vy * dt
- self.position=self.canv.create_oval(400+int(200*self.x)-5,400+int(200*self.y)-5,
- 400+int(200*self.x)+5,400+int(200*self.y)+5,fill=self.color,outline='white')
- root = Tkinter.Tk()
- canv = Tkinter.Canvas(root, width = dimension, height = dimension, bg = 'black')
- canv.pack(expand='yes',fill='both')
- canv.create_oval(400-10,400-10,400+10,400+10,fill="white",outline="white")
- mercury = Planet(canv,0.38710,0.,0.,2,"orange",1)
- venus = Planet(canv,0.72334,0.,0.,1.6,"yellow",2)
- earth = Planet(canv,1.00000,0.,0.,1.3,"blue",3)
- mars = Planet(canv,1.52371,0.,0.,1.0,"red",4)
- system=[]
- system.append(mercury)
- system.append(venus)
- system.append(earth)
- system.append(mars)
- def on_timer():
- for p in system:
- for _ in itertools.repeat(None, 100):
- p.time_step()
- root.after(delay, on_timer)
- on_timer()
- root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment