thinkcspy
Search
Table of Contents
Book Index
User
Course Home
Assignments
Practice
Peer Instruction (Instructor)
Peer Instruction (Student)
Change Course
Instructor's Page
Progress Page
Edit Profile
Change Password
Register
Login
Dark Mode
Scratch Activecode
Help
FAQ
Instructors Guide
About Runestone
Report A Problem
This Chapter
Astronomy Animation
Turtle Racing Lab
Drawing a Circle
Lessons from a Triangle
Counting Letters
Letter Count Histogram
Approximating the Value of Pi
Python Beyond the Browser
Experimenting With the 3n+1 Sequence
Plotting a sine Wave
Astronomy Animation
¶
Object-oriented programming
¶
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.speed('fast') 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 = 10000 for amove in range(numTimePeriods): ss.movePlanets() ss.freeze() createSSandAnimate()
You have attempted
of
activities on this page