Simulation

 avatar
mejara171
abap
4 years ago
2.0 kB
60
No Index
#Importamos vpython para generar la animacion
from vpython import*
#definimos la distancia de los 
length = 30.

fric = 0.01
massball=1
mass=massball
radius=2.5

#Información del sistema
scene2 = canvas(title='Masa con dos sistemas', width=400, height=200, center=vector(0,0,0), background=color.white) 

#Información de la esfera
ball=sphere(pos=vector(2,0,0),velocity=vector(0,0,0),radius=radius,mass=massball, color=color.blue)

#Información de la pared derecha
wall_right=box(pos=vector(length,0,0), size= vector(0.2, 5, 5), color = color.green)

#Información de la pared izquierda
wall_left=box(pos=vector(-length,0,0), size= vector(0.2, 5, 5), color = color.green)

#información del resorte derecho
spring_right=helix(pos=wall_right.pos,axis=ball.pos - wall_right.pos,constant=1,coils = 10,thickness=0.2,radius=1, color = color.red)

#Información del resorte izquierdo
spring_left=helix(pos=wall_left.pos,axis=ball.pos-wall_left.pos,constant=1,coils = 10,thickness=0.2,radius=1, color = color.red)

#Interacción de la masa y resortes


def acc(): 
  dr_right = ball.pos - wall_right.pos
  force_right = -spring_right.constant*(mag(dr_right) - length)*norm(dr_right)
  dr_left = ball.pos - wall_left.pos
  force_left = -spring_left.constant*(mag(dr_left) - length)*norm(dr_left)
  return (force_right+force_left)/ball.mass


#sliders para cambiar variables
scene2.caption = "Variación de la masa: Variación del radio:"
sl = slider(min=0.3, max=10, value=massball, length=220, bind=acc(), right=15)

sl2 = slider(min=0.3, max=10, value=radius, length=220, bind=acc(), right=15)


ball.trail=curve(color=ball.color)
t=0
dt=0.01



#ciclo principal
while (t<100):
  rate(500)
  ball.velocity=ball.velocity+acc()*dt
  ball.pos=ball.pos+ball.velocity*dt
  spring_right.axis=ball.pos - wall_right.pos
  spring_left.axis=ball.pos - wall_left.pos
  ball.trail.append(pos=ball.pos)
  t=t+dt
Editor is loading...