Python Syntax: Difference between revisions

From Physics Book
Jump to navigation Jump to search
Line 8: Line 8:


Momentum Update:
Momentum Update:
pf = pi + Fnet*deltat
pf = pi + Fnet*deltat


Position Update:
Position Update:
objectf.pos = objecti.pos + (pcart/mcart)*deltat
objectf.pos = objecti.pos + (pcart/mcart)*deltat




Gravitational Force:
Gravitational Force:
# CONSTANTS
 
CONSTANTS
 
G = 6.7e-11
G = 6.7e-11
mEarth = 6e24
mEarth = 6e24
mcraft = 15e3
mcraft = 15e3
deltat = 60
deltat = 60
t = 0
t = 0


r=craft.pos-Earth.pos  #finds the change in position
Finds the change in position:
 
r=craft.pos-Earth.pos   
m=mcraft
m=mcraft
rmag= mag(r)      #finds the magnitude of change in position
 
Finds the magnitude of change in position:
 
rmag= mag(r)       
 
Calculates the new magnitude of gravitational force:
 
Fmag=(G*mcraft*mEarth)/(rmag**2)
Fmag=(G*mcraft*mEarth)/(rmag**2)
# ^^Calculates the new magnitude of gravitational force
 
 
Calculates the direction of tbe change in position:


rhat=r/rmag
rhat=r/rmag
#^^Calculates the direction of tbe change in position
 
 
Calculates net force:
 
Fnet=-Fmag*rhat
Fnet=-Fmag*rhat
#^^Calculates net force
 
 


Spring Force:
Spring Force:
Line 44: Line 66:


Kinetic = (1/2)*(mball*(vel**2))
Kinetic = (1/2)*(mball*(vel**2))


==Computational Model==
==Computational Model==

Revision as of 09:40, 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

Finds the change in position:

r=craft.pos-Earth.pos m=mcraft

Finds the magnitude of change in position:

rmag= mag(r)

Calculates the new magnitude of gravitational force:

Fmag=(G*mcraft*mEarth)/(rmag**2)


Calculates the direction of tbe change in position:

rhat=r/rmag


Calculates net force:

Fnet=-Fmag*rhat


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:

    1. 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)

    1. Plotting

pgraph = gcurve(color=color.blue) ygraph.plot(pos=(time, Fnet.y)) pgraph.plot(pos=(time, sphere.y))


Difficult:

Using Loops to update Equations:


  1. CONSTANTS

G = ? mEarth = ? mmoon = ? mcraft = ? deltat = ? t = ?


  1. 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)

  1. 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)

  1. 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 producing physics models.

References

http://vpython.org/contents/history.html