1.- PASO
# Crear la ventana
scene.width = 800
scene.height = 600
scene.autoscale = 0 # detiene el vpython de zoom dentro y fuera de su propio
scene.range = (100.100.100)
scene.center = (50,40,0) # centro en este punto
2.- PASO
# Crear nuestro objeto y el disco es establecer valores iniciales
puck = cilindro (pos = (0,0,0), eje = (0,2,0), radio = 2, color = color.green)
puck.velocity = vector (0,0,0)
puck.acceleration = vector (0,0,0)
puck.mass # = 1 kg
3.- PASO
# Crear un terreno para el disco
= cuadro de terreno (pos = (50, -1,1), size = (100,2,50))
# Crear una etiqueta de EE.UU. para poner información en
mylabel etiqueta = (pos = (50,60,0), height = 10, cuadro = 0)
# Estos son todos los vectores de la aceleración que se
# Actuando en nuestro disco (No haga caso de colisión la fuerza y la aceleración)
acceleration Gravity = vector (0, -9.8,0) # m / s ** 2
acceleration Normal = vector (0,0,0) # m / s ** 2, ninguno de visitas hasta el terreno
acceleration cinético Fricción = vector (0,0,0) # m / s ** 2, ninguno de visitas hasta el suelo
4.- PASO
# Creado algunas condiciones iniciales para la THROWNING Puck
velocity Thrown Magnitude # = 25 m / s
angleThrown # = 45 grados
angleThrown = angle Thrown * (pi/180) # convertir a radianes
# Convertir la velocidad lanzada ángulo y la magnitud
# En un vector
velocityThrown = vector (0,0,0)
velocityThrown.y = velocityThrownMagnitude * sin (angleThrown)
velocityThrown.x = velocityThrownMagnitude * cos (angleThrown)
velocityThrown.z = 0
# Configurar la velocidad del viento como un vector
velocityWind = vector (0,0, -3)
# Establezca el disco inicial de la velocidad y aceleración
puck.velocity = velocityThrown + velocityWind
puck.acceleration = accelerationGravity + accelerationNormal + accelerationKineticFriction
segundos = 0 # tiempo total comienza en cero
DT = .01 # .01 segundos (la diferencia en el tiempo)
acabado = False
mientras que no ha terminado:
tasa (100) # pasar por el bucle de no más de 100 veces / s
segundo dt + = # total de tiempo (no usarlo nunca más)
# Actualizamos la posición y la velocidad gradualmente
# Basado en la última calculado acceration y sus anteriores
# Velocidad y accleration (.01 segundos atrás).
# Ecuación de velocidad: vel = vel0 + aceleración * tiempo
# Posición de la ecuación: pos = + pos0 tiempo vel0 * + .5 * aceleración * tiempo ** 2
puck.velocity + = * puck.acceleration dt
puck.pos + = * puck.velocity dt + .5 * * puck.acceleration DT ** 2
# Si hemos chocar con el suelo que hacer frente a la fricción
si puck.pos.y <= 0:
# Estamos ignorando en la fuerza de la colisión, pero vamos a decir
# El resultado final de la colisión hará que la velocidad
# Y en la dirección igual a cero
puck.velocity.y = 0
puck.pos.y = 0
# Fuerza de magnitud debido a la fricción cinética = fuerza normal * CoefficientKinetic
CoefficientOfKineticFriction = .45
# La segunda ley de Newton: Fuerza = Masa * Aceleración
forceGravity = puck.mass * accelerationGravity
# La tercera ley de Newton: fuerzas vienen en pares, y estos dos
# Fuerzas son iguales en magnitud y en dirección opuesta
forceNormal =-forceGravity
# La segunda ley de Newton escrita como la aceleración = Fuerza / Masa
accelerationNormal = forceNormal / puck.mass
Figura # a la magnitud de la fricción fuerza
forceKineticFrictionMagnitude mag = (forceNormal * CoefficientOfKineticFriction)
Figura # a cabo la dirección de la fuerza de fricción
forceKineticFrictionDirection = norma (puck.velocity) * -1
Multiplicar # para obtener el vector de la fuerza de fricción
forceKineticFriction = forceKineticFrictionMagnitude * forceKineticFrictionDirection
# Utilizar la fuerza para encontrar la aceleración: la aceleración = Fuerza / Masa
accelerationKineticFriction = forceKineticFriction / puck.mass
# Actualización de la aceleración pucks
puck.acceleration = accelerationNormal + accelerationGravity + accelerationKineticFriction
# Fin del bucle cuando el disco deja de moverse
# Magnitud es siempre positiva a menos que cero
# Pero debido a la imprecisión en nuestro programa que es probable que
# Nunca será igual a cero a fin de evitar que cuando la velocidad es cercana a cero
si mag (puck.velocity) <= .02:
acabado = True
puck.velocity = (0,0,0)
# Mostrar información a medida que avanzamos a través del bucle
mensaje = "VPython Video Tutorial: Vectores (Fuerza, aceleración, velocidad, posición) y cinética de fricción \ n"
mensaje + = "Puck Info: \ n"
mensaje + = "posición es:" + str (puck.pos) + "\ n"
mensaje + = "la velocidad es:" + str (puck.velocity) + "\ n"
mensaje + = "aceleración es:" + str (puck.acceleration) + "\ n"
mensaje + = "magnitud del vector de velocidad es:" + str (MAG (puck.velocity)) + "m / s" + "\ n"
mensaje + = "norma del vector de velocidad es:" + str (norma (puck.velocity))
mylabel.text = mensaje
Suscribirse a:
Enviar comentarios (Atom)

No hay comentarios:
Publicar un comentario