In [ ]:
from vpython import sphere, canvas, box, vec, color, rate
In [ ]:
win=600
L = 10. # container is a cube L on a side
gray = vec(0.7,0.7,0.7) # color of edges of container
up = vec(0, 0, 1)
In [ ]:
scene = canvas(title="Fans", width=win, height=win, x=0, y=0,
center=vec(0, 0, 0), forward=vec(1,0,-0.5),
up=up)
scene.autoscale = False
scene.range = 10
h = 0.1
mybox = box(pos=vec(0, 0, -h/2), length=L, height=h, width=L, up=up, color=gray)
m = 1 # kg
radius = 0.5 # arbitrary for now
dt = 1e-3
start = vec(0, 0, radius)
v0 = vec(0, 0, 10)
g = vec(0, 0, -9.81)
Fg = m*g
particles =[]
for position, c in zip([start, start+vec(0, 3*radius, 0)],
[color.red, color.blue]):
p = sphere(pos=position, radius=radius, color=c)
p.v = v0
p.update = True # to determine if needs position update
particles.append(p)
In [ ]:
k = 1
while True:
rate(500)
# update position first
for p in particles:
if p.update:
p.pos += p.v*dt
if p.pos.z < start.z:
p.update = False
# calculate friction force
Fd = -k * particles[1].v
Fnet = Fg + Fd
a = Fnet / m
particles[0].v += g*dt
particles[1].v += a*dt
if all([not p.update for p in particles]):
break
In [ ]: