Making a solar system using python

Recently I tried learning about turtle module of python, so that I can make some graphics using it.
Though I’m not really interested in turtle module but I made something like ‘solar’ system.
Check it out :

NOTE : If you find any problem related to modules. Try:

  • sudo pip install math
  • sudo pip install turtle
  • Download the code : Solar System
    OR
    Have a look on the code :

    
    import turtle
    import math
    
    class SolarSystem:
        def __init__(self, width, height):
            self.thesun = None
            self.planets = []
            self.ssturtle = turtle.Turtle()
            self.ssturtle.hideturtle()
            self.ssscreen = turtle.Screen()
            self.ssscreen.setworldcoordinates(-width/2.0,-height/2.0,width/2.0,height/2.0)
            self.ssscreen.tracer(50)
    
        def addPlanet(self, aplanet):
            self.planets.append(aplanet)
    
        def addSun(self, asun):
            self.thesun = asun
    
        def showPlanets(self):
            for aplanet in self.planets:
                print(aplanet)
    
        def freeze(self):
            self.ssscreen.exitonclick()
    
        def movePlanets(self):
            G = .1
            dt = .001
    
            for p in self.planets:   
               p.moveTo(p.getXPos() + dt * p.getXVel(), p.getYPos() + dt * p.getYVel())
    
               rx = self.thesun.getXPos() - p.getXPos()
               ry = self.thesun.getYPos() - p.getYPos()
               r = math.sqrt(rx**2 + ry**2)
    
               accx = G * self.thesun.getMass()*rx/r**3
               accy = G * self.thesun.getMass()*ry/r**3
    
               p.setXVel(p.getXVel() + dt * accx)
    
               p.setYVel(p.getYVel() + dt * accy)
    
    class Sun:
       def __init__(self, iname, irad, im, itemp):
           self.name = iname
           self.radius = irad
           self.mass = im
           self.temp = itemp
           self.x = 0
           self.y = 0
    
           self.sturtle = turtle.Turtle()
           self.sturtle.shape("circle")
           self.sturtle.color("yellow")
    
       def getName(self):
           return self.name
    
       def getRadius(self):
           return self.radius
    
       def getMass(self):
           return self.mass
    
       def getTemperature(self):
           return self.temp
    
       def getVolume(self):
           v = 4.0/3 * math.pi * self.radius**3
           return v
    
       def getSurfaceArea(self):
           sa = 4.0 * math.pi * self.radius**2
           return sa
    
       def getDensity(self):
           d = self.mass / self.getVolume()
           return d
    
       def setName(self, newname):
           self.name = newname
    
       def __str__(self):
           return self.name
    
       def getXPos(self):
           return self.x
    
       def getYPos(self):
           return self.y
    
    class Planet:
    
       def __init__(self, iname, irad, im, idist, ivx, ivy, ic):
           self.name = iname
           self.radius = irad
           self.mass = im
           self.distance = idist
           self.x = idist
           self.y = 0
           self.velx = ivx
           self.vely = ivy
           self.color = ic
    
           self.pturtle = turtle.Turtle()
           self.pturtle.up()
           self.pturtle.color(self.color)
           self.pturtle.shape("circle")
           self.pturtle.goto(self.x,self.y)
           self.pturtle.down()
    
       def getName(self):
           return self.name
    
       def getRadius(self):
           return self.radius
    
       def getMass(self):
           return self.mass
    
       def getDistance(self):
           return self.distance
    
       def getVolume(self):
           v = 4.0/3 * math.pi * self.radius**3
           return v
    
       def getSurfaceArea(self):
           sa = 4.0 * math.pi * self.radius**2
           return sa
    
       def getDensity(self):
           d = self.mass / self.getVolume()
           return d
    
       def setName(self, newname):
           self.name = newname
    
       def show(self):
            print(self.name)   
    
       def __str__(self):
           return self.name
    
       def moveTo(self, newx, newy):
           self.x = newx
           self.y = newy
           self.pturtle.goto(newx, newy)
    
       def getXPos(self):
           return self.x
    
       def getYPos(self):
           return self.y
    
       def getXVel(self):
           return self.velx
    
       def getYVel(self):
           return self.vely
    
       def setXVel(self, newvx):
           self.velx = newvx
    
       def setYVel(self, newvy):
           self.vely = newvy
    
    
    def createSSandAnimate():
       ss = SolarSystem(2,2)    
    
       sun = Sun("SUN", 5000, 10, 5800)
       ss.addSun(sun)
    
    
       m = Planet("MERCURY", 19.5, 1000, .25, 0, 2, "blue")
       ss.addPlanet(m)
    
       m = Planet("EARTH", 47.5, 5000, 0.3, 0, 2.0, "green")
       ss.addPlanet(m)
    
       m = Planet("MARS", 50, 9000, 0.5, 0, 1.63, "red")
       ss.addPlanet(m)
    
       m = Planet("JUPITER", 100, 49000, 0.7, 0, 1, "black")
       ss.addPlanet(m)
    
       m = Planet("Pluto", 1, 500, 0.9, 0, .5, "orange")
       ss.addPlanet(m)
    
       m = Planet("Asteroid", 1, 500, 1.0, 0, .75, "cyan")
       ss.addPlanet(m)
    
       numTimePeriods = 20000
       for amove in range(numTimePeriods):
            ss.movePlanets()
    
       ss.freeze()
    
    createSSandAnimate()
    your source code goes here
    

    Save the code as solar.py and run it via terminal/sublime text or whatever editor you use.

    Advertisements

    3 thoughts on “Making a solar system using python

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s