Advertisement
Guest User

Untitled

a guest
Mar 20th, 2019
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. import turtle
  2. import math
  3.  
  4. class SolarSystem:
  5.  
  6. def __init__(self, width, height):
  7. self.thesun = None
  8. self.planets = []
  9. self.ssturtle = turtle.Turtle()
  10. self.ssturtle.hideturtle()
  11. self.ssscreen = turtle.Screen()
  12. self.ssscreen.bgcolor("black") # RA
  13. self.ssscreen.title("Solar System") # RA
  14. self.ssscreen.setup(1000,600)
  15. self.ssscreen.setworldcoordinates(-width/2.0,-height/2.0,width/2.0,height/2.0)
  16. self.ssscreen.tracer(2)# RA
  17.  
  18. def addPlanet(self, aplanet):
  19. self.planets.append(aplanet)
  20.  
  21. def addSun(self, asun):
  22. self.thesun = asun
  23.  
  24. def showPlanets(self):
  25. for aplanet in self.planets:
  26. print(aplanet)
  27.  
  28. def freeze(self):
  29. self.ssscreen.exitonclick()
  30.  
  31. def movePlanets(self):
  32. G = .1
  33. dt = .001
  34.  
  35. for p in self.planets:
  36. p.moveTo(p.getXPos() + dt * p.getXVel(), p.getYPos() + dt * p.getYVel())
  37.  
  38. rx = self.thesun.getXPos() - p.getXPos()
  39. ry = self.thesun.getYPos() - p.getYPos()
  40. r = math.sqrt(rx**2 + ry**2)
  41.  
  42. accx = G * self.thesun.getMass()*rx/r**3
  43. accy = G * self.thesun.getMass()*ry/r**3
  44.  
  45. p.setXVel(p.getXVel() + dt * accx)
  46.  
  47. p.setYVel(p.getYVel() + dt * accy)
  48.  
  49. class Sun:
  50. def __init__(self, iname, irad, im, itemp):
  51. self.name = iname
  52. self.radius = irad
  53. self.mass = im
  54. self.temp = itemp
  55. self.x = 0
  56. self.y = 0
  57.  
  58. self.sturtle = turtle.Turtle()
  59. self.sturtle.shape("circle")
  60. self.sturtle.color("yellow")
  61.  
  62. def getName(self):
  63. return self.name
  64.  
  65. def getRadius(self):
  66. return self.radius
  67.  
  68. def getMass(self):
  69. return self.mass
  70.  
  71. def getTemperature(self):
  72. return self.temp
  73.  
  74. def getVolume(self):
  75. v = 4.0/3 * math.pi * self.radius**3
  76. return v
  77.  
  78. def getSurfaceArea(self):
  79. sa = 4.0 * math.pi * self.radius**2
  80. return sa
  81.  
  82. def getDensity(self):
  83. d = self.mass / self.getVolume()
  84. return d
  85.  
  86. def setName(self, newname):
  87. self.name = newname
  88.  
  89. def __str__(self):
  90. return self.name
  91.  
  92. def getXPos(self):
  93. return self.x
  94.  
  95. def getYPos(self):
  96. return self.y
  97.  
  98. class Planet:
  99.  
  100. def __init__(self, iname, irad, im, idist, ivx, ivy, ic):
  101. self.name = iname
  102. self.radius = irad
  103. self.mass = im
  104. self.distance = idist
  105. self.x = idist
  106. self.y = 0
  107. self.velx = ivx
  108. self.vely = ivy
  109. self.color = ic
  110.  
  111. self.pturtle = turtle.Turtle()
  112. self.pturtle.speed(0)#
  113. self.pturtle.up()
  114. self.pturtle.color(self.color)
  115. self.pturtle.shape("circle")
  116. self.pturtle.goto(self.x,self.y)
  117. self.pturtle.down()
  118.  
  119. def getName(self):
  120. return self.name
  121.  
  122. def getRadius(self):
  123. return self.radius
  124.  
  125. def getMass(self):
  126. return self.mass
  127.  
  128. def getDistance(self):
  129. return self.distance
  130.  
  131. def getVolume(self):
  132. v = 4.0/3 * math.pi * self.radius**3
  133. return v
  134.  
  135. def getSurfaceArea(self):
  136. sa = 4.0 * math.pi * self.radius**2
  137. return sa
  138.  
  139. def getDensity(self):
  140. d = self.mass / self.getVolume()
  141. return d
  142.  
  143. def setName(self, newname):
  144. self.name = newname
  145.  
  146. def show(self):
  147. print(self.name)
  148.  
  149. def __str__(self):
  150. return self.name
  151.  
  152. def moveTo(self, newx, newy):
  153. self.x = newx
  154. self.y = newy
  155. self.pturtle.goto(newx, newy)
  156.  
  157. def getXPos(self):
  158. return self.x
  159.  
  160. def getYPos(self):
  161. return self.y
  162.  
  163. def getXVel(self):
  164. return self.velx
  165.  
  166. def getYVel(self):
  167. return self.vely
  168.  
  169. def setXVel(self, newvx):
  170. self.velx = newvx
  171.  
  172. def setYVel(self, newvy):
  173. self.vely = newvy
  174.  
  175.  
  176. def createSSandAnimate():
  177. ss = SolarSystem(2,2)
  178.  
  179. sun = Sun("SUN", 5000, 10, 5800)
  180. ss.addSun(sun)
  181.  
  182.  
  183. m = Planet("MERCURY", 19.5, 1000, .25, 0, 2, "blue")
  184. ss.addPlanet(m)
  185.  
  186. m = Planet("EARTH", 47.5, 5000, 0.3, 0, 2.0, "green")
  187. ss.addPlanet(m)
  188.  
  189. m = Planet("MARS", 50, 9000, 0.5, 0, 1.63, "red")
  190. ss.addPlanet(m)
  191.  
  192. m = Planet("JUPITER", 100, 49000, 0.7, 0, 1, "grey")
  193. ss.addPlanet(m)
  194.  
  195. m = Planet("Pluto", 1, 500, 0.9, 0, .5, "orange")
  196. ss.addPlanet(m)
  197.  
  198. m = Planet("Asteroid", 1, 500, 1.0, 0, .75, "cyan")
  199. ss.addPlanet(m)
  200.  
  201. numTimePeriods = 10000
  202. for amove in range(numTimePeriods):
  203. ss.movePlanets()
  204.  
  205. ss.freeze()
  206.  
  207. createSSandAnimate()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement