ETikhonov

Another not good solar system

Jul 6th, 2014
181
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.98 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf8 -*-
  3. dimension=800 #(0.01 of A.U.)
  4. dt = 0.0001
  5. delay=1
  6. import numpy as np
  7. import Tkinter
  8. import itertools
  9. class Planet:
  10.     def __init__(self,canv,x,y,vx,vy,color,index):
  11.         self.x = float(x)
  12.         self.y = float(y)
  13.         self.vx = float(vx)
  14.         self.vy = float(vy)
  15.         self.color = color
  16.         self.canv = canv
  17.         self.index=index
  18.         self.position=self.canv.create_oval(400+int(200*self.x)-5,400+int(200*self.y)-5,
  19.         400+int(200*self.x)+5,400+int(200*self.y)+5,fill=self.color,outline='white')
  20.         self.energy = self.canv.create_text(100,100*self.index,text=str(0.5 * (self.vx**2+self.vy**2)),fill=self.color)
  21.     def time_step(self):
  22.         canv.delete(self.position)
  23.         canv.delete(self.energy)
  24.         self.energy = self.canv.create_text(100,100*self.index,text=str(0.5 * (self.vx**2+self.vy**2)),fill=self.color)
  25.         self.canv.create_oval(400+int(200*self.x),400+int(200*self.y),
  26.         400+int(200*self.x),400+int(200*self.y),fill=self.color,outline=self.color)
  27.         self.vx = self.vx - np.sign(self.x)/(self.x**2 + self.y**2) * dt
  28.         self.vy = self.vy - np.sign(self.y)/(self.x**2 + self.y**2) * dt
  29.         self.x = self.x + self.vx * dt
  30.         self.y = self.y + self.vy * dt
  31.         self.position=self.canv.create_oval(400+int(200*self.x)-5,400+int(200*self.y)-5,
  32.         400+int(200*self.x)+5,400+int(200*self.y)+5,fill=self.color,outline='white')   
  33. root = Tkinter.Tk()
  34. canv = Tkinter.Canvas(root, width = dimension, height = dimension, bg = 'black')
  35. canv.pack(expand='yes',fill='both')
  36. canv.create_oval(400-10,400-10,400+10,400+10,fill="white",outline="white")
  37. mercury = Planet(canv,0.38710,0.,0.,2,"orange",1)
  38. venus = Planet(canv,0.72334,0.,0.,1.6,"yellow",2)
  39. earth = Planet(canv,1.00000,0.,0.,1.3,"blue",3)
  40. mars = Planet(canv,1.52371,0.,0.,1.0,"red",4)
  41. system=[]
  42. system.append(mercury)
  43. system.append(venus)
  44. system.append(earth)
  45. system.append(mars)
  46. def on_timer():
  47.     for p in system:
  48.         for _ in itertools.repeat(None, 100):
  49.             p.time_step()
  50.     root.after(delay, on_timer)
  51. on_timer()
  52. root.mainloop()
Advertisement
Add Comment
Please, Sign In to add comment