Python Syntax: Difference between revisions
Line 49: | Line 49: | ||
VPython is used to create computational models of various real world situations so that we can see how these equations used in the code can manipulate these situations. | VPython is used to create computational models of various real world situations so that we can see how these equations used in the code can manipulate these situations. | ||
==Examples== | |||
Simple: | |||
Creating Shapes: | |||
Sphere: | |||
sphere= sphere(pos=vector(-4,-2,5), radius=.4, color=color.red) | |||
Arrow: | |||
bt=arrow(pos=sphere.pos, axis=sphere2.pos-sphere.pos, color=color.cyan) | |||
Vector: | |||
vector=vector(0, 0, 0) | |||
Trail: | |||
trail = curve(color=sphere.color) | |||
trail.append(pos=sphere.pos) | |||
Setting Scene Range: | |||
scene.range=11*sphere.radius | |||
Helix: | |||
spring = helix(pos=ceiling.pos, color=color.cyan, thickness=.003, coils=40, radius=0.015) | |||
Intermediate: | |||
Graphs: | |||
## Setup graphing windows | |||
gdisplay(width=500, height=250, x=600, y=1) | |||
ygraph = gcurve(color=color.yellow) | |||
gdisplay(width=500, height=250, x=600, y=300) | |||
##Plotting | |||
pgraph = gcurve(color=color.blue) | |||
ygraph.plot(pos=(time, Fnet.y)) | |||
pgraph.plot(pos=(time, sphere.y)) | |||
Difficult: | |||
Using Loops to update Equations: | |||
# CONSTANTS | |||
G = ? | |||
mEarth = ? | |||
mmoon = ? | |||
mcraft = ? | |||
deltat = ? | |||
t = ? | |||
#OBJECTS AND INITIAL VALUES | |||
Earth = sphere(pos=vector(0,0,0), radius=6.4e6, color=color.cyan) | |||
scene.range=11*Earth.radius | |||
Moon = sphere(pos=(4e8, 0, 0), radius=1.75e6, color=color.white) | |||
# Add a radius for the spacecraft. It should be BIG, so it can be seen. | |||
craft = sphere(pos=vector(-6.656e7,-3.648e6,0), radius= 10000, color=color.yellow) | |||
vcraft = vector(206, 2645,0) | |||
pcraft = mcraft*vcraft | |||
pArrow=arrow(color=color.green) | |||
fArrow=arrow(color=color.cyan) | |||
dpArrow=arrow(color=color.red) | |||
Fnet_tangent_arrow = arrow(color=color.yellow) | |||
Fnet_perp_arrow= arrow(color=color.magenta) | |||
trail = curve(color=craft.color) # This creates a trail for the spacecraft | |||
scene.autoscale = 0 # And this prevents zooming in or out | |||
pscale=Earth.radius/mag(pcraft) | |||
fscale=Earth.radius/((G*mEarth*mcraft)*mag(craft.pos-Earth.pos)**2) | |||
dpscale=500*Earth.radius/mag(pcraft) | |||
print("p=", pcraft) | |||
# CALCULATIONS | |||
while t < 165240: #sets time for loop to run | |||
rate(10000) # This slows down the animation (runs faster with bigger number) | |||
# Add statements here for the iterative update of gravitational | |||
# force, momentum, and position. | |||
r = craft.pos-Earth.pos | |||
rmag = sqrt(r.x**(2)+r.y**(2)+r.z**(2)) | |||
Fmag= G*mEarth*mcraft/(rmag**2) | |||
rhat= r/rmag | |||
rmoon= craft.pos - Moon.pos | |||
rmoonmag= mag(rmoon) | |||
rmoonhat= norm(rmoon) | |||
Fmoonmag= G*mmoon*mcraft/(rmoonmag**2) | |||
Fmoon= -Fmoonmag*rmoonhat | |||
p_init= mag(pcraft) | |||
pcraft_i=pcraft+vector(0,0,0) | |||
Fearth= -Fmag*rhat | |||
Fnet= Fearth + Fmoon | |||
pcraft=Fnet*deltat+pcraft | |||
p_final=mag(pcraft) | |||
Fnet_tangent = (p_final-p_init)*norm(pcraft)/deltat | |||
Fnet_tangent_arrow.pos=craft.pos | |||
Fnet_tangent_arrow.axis=Fnet_tangent*fscale | |||
Fnet_perp = Fnet-Fnet_tangent | |||
Fnet_perp_arrow.pos=craft.pos | |||
Fnet_perp_arrow.axis=Fnet_perp*fscale | |||
vcraft=pcraft/mcraft | |||
craft.pos=vcraft*deltat+craft.pos | |||
pArrow.pos=craft.pos | |||
pArrow.axis=pcraft*pscale | |||
fArrow.pos=craft.pos | |||
fArrow.axis=Fnet*fscale | |||
deltap= pcraft-pcraft_i | |||
dpArrow.pos=craft.pos | |||
dpArrow.axis=deltap*dpscale | |||
scene.center=craft.pos | |||
scene.range=craft.radius*600 | |||
# Uncomment these two lines to exit the loop if | |||
# the spacecraft crashes onto the Earth. | |||
if rmag < Earth.radius: | |||
break | |||
trail.append(pos=craft.pos) | |||
t = t+deltat | |||
==Connectedness== | |||
vPython codes are extremely useful for modeling physics situations. However, the coding skills learned in this class can be applied to almost anything. For example, Aerospace Engineers are becoming increasingly dependent on computer simulations to test ideas before prototyping to reduce costs. | |||
==History== | |||
vPython was released in 2008. It was developed by researchers at Carnegie Mellon University. It is largely used for educational purposes especially modeling producing physics models. | |||
==References== | |||
http://vpython.org/contents/history.html |
Revision as of 09:35, 8 April 2017
The Main Idea
This page discusses basic vPython functions and how they can be used to produce a model. vPython uses the same syntax as regular Python; however, vPython also allows you to produce a 3D model simulating the equations and computations your code is producing.
Mathematical Model
Vpython can be used with any equation. However, you may find some of the following useful:
Momentum Update: pf = pi + Fnet*deltat
Position Update: objectf.pos = objecti.pos + (pcart/mcart)*deltat
Gravitational Force:
- CONSTANTS
G = 6.7e-11 mEarth = 6e24 mcraft = 15e3 deltat = 60 t = 0
r=craft.pos-Earth.pos #finds the change in position m=mcraft rmag= mag(r) #finds the magnitude of change in position Fmag=(G*mcraft*mEarth)/(rmag**2)
# ^^Calculates the new magnitude of gravitational force
rhat=r/rmag
#^^Calculates the direction of tbe change in position
Fnet=-Fmag*rhat
- ^^Calculates net force
Spring Force:
L0 = 0.3 Lvec = ball.pos - ceiling.pos Lhat = norm(Lvec) Lmag = mag(Lvec) Fspr = (-ks)*(Lmag - L0)*(Lhat)
Kinetic Energy:
Kinetic = (1/2)*(mball*(vel**2))
Computational Model
VPython is used to create computational models of various real world situations so that we can see how these equations used in the code can manipulate these situations.
Examples
Simple:
Creating Shapes:
Sphere: sphere= sphere(pos=vector(-4,-2,5), radius=.4, color=color.red)
Arrow:
bt=arrow(pos=sphere.pos, axis=sphere2.pos-sphere.pos, color=color.cyan)
Vector: vector=vector(0, 0, 0)
Trail: trail = curve(color=sphere.color) trail.append(pos=sphere.pos)
Setting Scene Range:
scene.range=11*sphere.radius
Helix:
spring = helix(pos=ceiling.pos, color=color.cyan, thickness=.003, coils=40, radius=0.015)
Intermediate:
Graphs:
- Setup graphing windows
gdisplay(width=500, height=250, x=600, y=1) ygraph = gcurve(color=color.yellow) gdisplay(width=500, height=250, x=600, y=300)
- Plotting
pgraph = gcurve(color=color.blue) ygraph.plot(pos=(time, Fnet.y)) pgraph.plot(pos=(time, sphere.y))
Difficult:
Using Loops to update Equations:
- CONSTANTS
G = ? mEarth = ? mmoon = ? mcraft = ? deltat = ? t = ?
- OBJECTS AND INITIAL VALUES
Earth = sphere(pos=vector(0,0,0), radius=6.4e6, color=color.cyan) scene.range=11*Earth.radius Moon = sphere(pos=(4e8, 0, 0), radius=1.75e6, color=color.white)
- Add a radius for the spacecraft. It should be BIG, so it can be seen.
craft = sphere(pos=vector(-6.656e7,-3.648e6,0), radius= 10000, color=color.yellow) vcraft = vector(206, 2645,0) pcraft = mcraft*vcraft pArrow=arrow(color=color.green) fArrow=arrow(color=color.cyan) dpArrow=arrow(color=color.red) Fnet_tangent_arrow = arrow(color=color.yellow) Fnet_perp_arrow= arrow(color=color.magenta)
trail = curve(color=craft.color) # This creates a trail for the spacecraft scene.autoscale = 0 # And this prevents zooming in or out pscale=Earth.radius/mag(pcraft) fscale=Earth.radius/((G*mEarth*mcraft)*mag(craft.pos-Earth.pos)**2) dpscale=500*Earth.radius/mag(pcraft) print("p=", pcraft)
- CALCULATIONS
while t < 165240: #sets time for loop to run
rate(10000) # This slows down the animation (runs faster with bigger number)
# Add statements here for the iterative update of gravitational # force, momentum, and position. r = craft.pos-Earth.pos rmag = sqrt(r.x**(2)+r.y**(2)+r.z**(2)) Fmag= G*mEarth*mcraft/(rmag**2) rhat= r/rmag rmoon= craft.pos - Moon.pos rmoonmag= mag(rmoon) rmoonhat= norm(rmoon) Fmoonmag= G*mmoon*mcraft/(rmoonmag**2) Fmoon= -Fmoonmag*rmoonhat p_init= mag(pcraft) pcraft_i=pcraft+vector(0,0,0) Fearth= -Fmag*rhat Fnet= Fearth + Fmoon pcraft=Fnet*deltat+pcraft p_final=mag(pcraft)
Fnet_tangent = (p_final-p_init)*norm(pcraft)/deltat Fnet_tangent_arrow.pos=craft.pos Fnet_tangent_arrow.axis=Fnet_tangent*fscale Fnet_perp = Fnet-Fnet_tangent Fnet_perp_arrow.pos=craft.pos Fnet_perp_arrow.axis=Fnet_perp*fscale vcraft=pcraft/mcraft craft.pos=vcraft*deltat+craft.pos pArrow.pos=craft.pos pArrow.axis=pcraft*pscale fArrow.pos=craft.pos fArrow.axis=Fnet*fscale deltap= pcraft-pcraft_i dpArrow.pos=craft.pos dpArrow.axis=deltap*dpscale scene.center=craft.pos scene.range=craft.radius*600
# Uncomment these two lines to exit the loop if # the spacecraft crashes onto the Earth. if rmag < Earth.radius: break
trail.append(pos=craft.pos) t = t+deltat
Connectedness
vPython codes are extremely useful for modeling physics situations. However, the coding skills learned in this class can be applied to almost anything. For example, Aerospace Engineers are becoming increasingly dependent on computer simulations to test ideas before prototyping to reduce costs.
History
vPython was released in 2008. It was developed by researchers at Carnegie Mellon University. It is largely used for educational purposes especially modeling producing physics models.