1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
from vpython import *
scene.width = 400
scene.height = 760
# constants and data
g = 9.8 # m/s^2
mball = 0.03 # kg
Lo = 0.26 # m
ks = 1.8 # N/m
deltat = 0.01 # s
# objects (origin is at ceiling)
ceiling = box(pos=vector(0,0,0), length=0.2, height=0.01,
width=0.2)
ball = sphere(pos=vector(0,-0.3,0),radius=0.025,
color=color.orange)
spring = helix(pos=ceiling.pos, axis=ball.pos-ceiling.pos,
color=color.cyan,thickness=0.003,coils=40,
radius=0.010)
# initial values
pball = mball * vector(0,0,0) # kg m/s
Fgrav = mball * g * vector(0,-1,0) # N
t = 0
# improve the display
scene.autoscale = False # turn off automatic camera zoom
scene.center = vector(0,-Lo,0) # move camera down
scene.waitfor('click') # wait for a mouse click
# initial calculation loop
# calculation loop
while t < 10:
rate(100)
# we need the stretch
s = mag(ball.pos) - Lo
# we need the spring force
Fspring = ks * s * -norm(spring.axis)
Fnet = Fgrav + Fspring
pball = pball + Fnet * deltat
ball.pos = ball.pos + (pball / mball) * deltat
spring.axis = ball.pos - ceiling.pos
t = t + deltat
|