adventures in 3d modeling using vpython ictcm 2009russherman.com/talks/vpython_ictcm_2009.pdf · we...
TRANSCRIPT
Adventures in 3D Modeling Using VPython ICTCM 2009
Russell HermanGabriel Lugo
UNC WilmingtonWilmington, NC
http://www.enzim.hu/~szia/emanim/emanim.htm
3D – Fast and Furious!Visual Python
Open SourcePython BasedMultiple OS
Summer Ventures in Science and Mathematics
State-wide Program14 Talented HS StudentsMath Modeling CourseFour Week Culminating in
Presentation
http://www.phy.syr.edu/~salgado/vpython/dillard/
http://bio.physics.drexel.edu/VPython.html
Course Web Site
http://people.uncw.edu/hermanr/SVSM.htm
First Two weeks of course:1. Modeling2. Examples3. Software Excel, Maple, Vpython, and more
the process of representing a real-world phenomenon as a set of mathematical equations
FieldsNatural sciences, engineering, social sciencesMathematics, economics, and more
ClassificationsLinear vs nonlinearDeterministic vs stochasticContinuous vs discrete
What is Mathematical Modeling?
TypesObservationExperimentComputationTheory
Processing SimulationVisualizationData Analysis
End ProductsPredictionVerificationNew Models
Using Computers to do science … Shodor
Methods in Science
What is Needed?SoftwareNumerical Computation 3*5+16 =Symbolic Analysis (x+y)^2 = Visualization
Mathematics Algebra Trigonometry Graphing Functions Calculus Linear Algebra Differential Equations … and more
Examples of Models
Given a roll of paper find (without unrolling it) the total length of the paper on the roll. A single sheet may be provided for measuring.
Projectile Motion
http://ffden-2.phys.uaf.edu/211_fall2004.web.dir/Brendan_Karchere/Body%20Pages%20(2-5)/Page%203.html
Gravitation and Planetary Motion
http://www.bnsc.gov.uk/lzcontent.aspx?nid=4709 OscillationsMass-SpringPendulaNonlinear Systems
gravity.py
springmass.py
incline.py
http://www.andrewclem.com/Chaos.html
http://en.wikipedia.org/wiki/Asteroid_belt
Fractal CoastlinesFractal MusicIterated Function SystemsXaos ExplorationMandelbrot and Julia Sets
http://home.pacbell.net/bulens/SelfSimi.htm
http://www.evl.uic.edu/aej/488/diagrams/fractal.gif
http://www.sustainablescale.org/AreasofConcern/Population/PopulationandScale/QuickFacts.aspx
http://council.wisconsinforestry.org/deer/deerpop.php
transmission dynamics of communicable diseaseshttp://www.scholarpedia.org/article/Image:Animated_SIR_Epidemic.gif
sir.py
Rate of Change of a Quantity = Rate in – Rate outRate of Change = (Population Change)/TimeRate in = Birth rate = bPRate out = Mortality rate = dP
Rate of Change of a Quantity = Rate in – Rate out
P bP dP kPt
∆ = − ≡∆
1 00 1 0 0/
P P ktkP P P Pt N N
− = ⇒ = +
Let Time = [0, t] in N steps: ∆t = t/N Pn=n∆t , n=0,1,2,…,N
2
2 1 01 1kt ktP P PN N
= + = +
01N
NktP PN
= +
1 01 1N
j j Nkt ktP P P PN N−
= + ⇒ = +
As N gets large, PN is what?
0( ) ktP t P e=
Plot Data -MS ExcelFit given function – Regression CurveDetermine Parameters (like k)Modifying Model
LOGISTIC GROWTH
2 2P bP dP mP kP mPt
∆ = − − ≡ −∆
Spinning Tennis BallVibrations of Hollow Core BatsDriving Cars with High Center of GravityProjectiles with Air DragSky DivingAnd more
pinpongtable.py
pool.py
bungee.pybasketball.py
Separate out harmonic frequencies from signals
http://www.thayerbirding.com/dnn/v39Features/Spectrogram/tabid/756/Default.aspx
http://physics.ucsc.edu/lecturedemonstrations/waves/sound.html
Brownian Motion is the random movement of particles suspended in a liquid or gas or the mathematical model used to describe such random movements
plotrand.py
the behavior of connected clusters in a random graphExamples
Forest FiresGalaxy FormationOil FieldsElectrical Resistance
http://ccl.northwestern.edu/netlogo/models/Percolation
percolation.py
BabyloniansClassic FormulaBinary vs HexadecimalMonte Carlo
http://zoonek2.free.fr/UNIX/48_R/16.html
montecarlo.py
Happy π Day: 3-14-2009
A cellular automaton is an array of identically programmed automata, or “cells”, which interact with one another.
http://vlab.infotech.monash.edu.au/resources/tutorials/cellular-automata/
http://people.uncw.edu/hermanr/mat367/FCABook/Book/ComplexI.pdf
Modeling in VPython
“3D Programming for Ordinary Mortals”http://vpython.org/
- based on Python http://www.python.org/ - David Scherer, David Andersen, Jonathan
Brandmeyer, Ruth Chabay, Ari Heitner, Ian Peters, Bruce Sherwood.
- for physics instructionEasy to learn, 3D Interactive modelingRecently updated to Version 5
Install Python and then VPythonRun IDLEFirst line
from visual import *Next line
sphere()Save – CTRL-S
Save as test.pyRun – F5
Colorsphere(color=color.red)
Radius sphere(radius=0.5,color=color.red)
Nameball = sphere(radius=0.5,color=color.red)
Positionball = sphere(pos=(0,2,0),radius=0.5,color=color.red)
Change positionball.pos = (1,2,3)
... And navigate Zoom: Hold middle button and move mouse
Or, hold both left and right buttons Rotate: Hold right button
from visual import *
#Create a sphereball = sphere(pos=(0,2,0),color=color.yellow,radius=1)
#Create a boxfloor = box(length=10, height=2, width=4,color=color.blue)
Cartesian CoordinatesLocate points with (x,y,z)
VectorsDraw arrow from originVectors have magnitude and
direction(1,2,3)
General VectorDraw from one point to another
ExamplesPosition, velocity, force
Draw arrow from origin to center of ballarrow(pos=(0,0,0), axis=ball.pos)Begins at posEnds at axis
Arbitrary arrowarrow(pos=(1,2,3), axis=(0,2,-1))
Arrow attributesarrow(pos=(1,2,3), axis=(0,2,-1),
shaftwidth=1,headwidth=2,headlength=3)
Moving Ball – Constant Velocity
Goal: Make ball move and bounce off wallCreate new program
File – New WindowSave as motion.py
Create scene
Run Example
VelocityVelocity = displacement/elapsed timev = ∆x/∆t
Rewrite∆x=new position – old position∆x=v∆tnew position = old position + v∆t
In Vpythonball.pos = ball.pos + ball.velocity*dt
Need several time stepsUse while loop
Keep executing commands over and overAdditional Information
Specify dt and velocityNeed rate – while loop executed 100 times/sec
Run Example
Logical TestsIf the ball moves to far to right, reverse its direction.
If statementIf ball.x > wallR.x:Then what?
Reverse directionball.velocity = -ball.velocity
Run Example
Assignment 1Add wallL on left at (-6,00)Add test to have ball bounce off this wall too.
Assignment 2Change ball velocity to move ball at an angle
with no z-component
Assignment 3Add a ceiling and a floor that touch vertical wallsAdd back wallAdd invisible front wall (i.e., only use if statement)Run program with ball bouncing off all walls.
Run Example
Uniform Motion – Adding Acceleration
Goal: Drop a ball that bounces on the floor.Free fall
All objects near the surface of the Earth fall with an acceleration -9.8 m/s2, or -32 ft/s2 (or a = -g).
Accelerationa = ∆v/∆t
Rewrite for VPythonnew velocity = old velocity + a ∆tball.velocity = ball.velocity + ball.acceleration*dt
Free fall with constant horizontal velocity.
bounce.py
floor = box(length=300, height=0.5, width=4, color=color.blue)ball = sphere(pos=(-90,100,0),radius=2, color=color.red)ball.velocity = vector(30,0,0)ball.trail = curve(color=color.yellow)
ball2 = sphere(pos=(-90,100,0),radius=2, color=color.red)ball2.velocity = vector(30,0,0)ball2.trail = curve(color=color.green)
ball3 = sphere(pos=(-90,100,0),radius=2, color=color.red)v = vector(30,0,0)ball3.trail = curve(color=color.blue)a = vector(0,-9.8,0)
dt = 0.01while 1: rate(100) ball.pos = ball.pos + ball.velocity*dt if ball.y < 1: ball.velocity.y = -ball.velocity.y else: ball.velocity.y = ball.velocity.y - 9.8*dt ball.trail.append(pos=ball.pos)
ball.pos = ball.pos + ball.velocity*dt vel0=ball2.velocity if ball2.y < 1: ball2.velocity.y = -ball2.velocity.y else: ball2.velocity.y = ball2.velocity.y - 9.8*dt ball2.pos = ball2.pos + (vel0+ball2.velocity)*dt/2 ball2.trail.append(pos=ball2.pos)
if ball3.y < 1: v.y= -v.y else: v += a * dt ball3.pos += v* dt + .5 * a * dt**2 ball3.trail.append(pos=ball3.pos)bounces.py
Mass-Spring System
Hooke’s Law for Springs F = -kx
Newton’s 2nd Law of Motion F = ma Or, a = F/m
from visual import *
scene.range = (1,1,1)scene.center = (0,.1,0)scene.width = 800scene.height = 275scene.background = (1,1,1)
x0 = vector(.65,0,0)Surface = box(size=(2,.02,.5),pos=(0,-.1,0))wall = box(size=(.04,.5,.3),pos=(-.77,.15,0))spring = helix(pos=(-.75,0,0),axis=x0,
radius=.08,coils=6,thickness=.01,color=color.blue)block = box(pos=(0,0,0),size=(.2,.2,.2),color=color.red)
k = 10m = 10b=2v = vector(0,0,0)a = vector(0,0,0)F = vector(0,0,0)
block.pos=(0.25,0,0) # Set Initial position of block and connect spring x = block.posspring.axis = x0 + x
finished = False dt = .01 while not finished: rate(100) F = -k*x - b*v a = F/m v += a * dt x += v + .5 * a * dt**2
block.pos = x spring.axis = x0 + x
spring.py springmass.py
What happens when the mass is changed?What happens when k is changed?Change the initial block position
i.e., block.pos=(0.25,0,0)Do you need to change other settings?
NOW – EXPLORE AND MODIFY
Adding More ...
LotkaVolterra.py
Rubik's Cube
Rubik5.exeStand Alone Application
Stochastic Spatial Dynamics of Epidemic Models
EpidemicLooperWallsQuad.py.py
More Examples?
bounce.pygravity.py
springmass.pyspring.py
bounces.pymotion.py
motioninbox.pycouposc.py
balls.pypool.py
basket.pybasketball.py
More Python
Scientific Computing with Python ...NumPySciPyMatplotlibSymPyhttp://www.pythonxy.com
...
Thank You!Further information can be found at
http://people.uncw.edu/hermanr/SVSM.htm or [email protected]
ABSTRACT
We demonstrate the use of Vpython for developing and analyzing mathematical models of real world continuous and discrete processes with minimal training and graphics programming. VPython lets students focus on computations without having to write explicit graphics statements while creating their own 3D visualizations. We will provide examples, taken mostly from a summer course for high school students, of how easy it is to simulate projectile motion, nonlinear dynamics, the spread of epidemics, percolation and cellular automata. Such simulations can be used well into applied courses in the undergraduate mathematics and science curriculum.