"""
""" #! /usr/bin/python3 # -*- coding: utf-8 -*- import os import sys from math import pi, cos, sin, asin import matplotlib.pyplot as pyplot # pour : figure, plot, title, xlabel, ylabel, show doc = """ ################################################################################ # ballon 1d (m,k) : une masse (m) sur un ressort (k) rebondit sur le sol # on ne tient pas compte de la longueur du ressort, # c'est comme s'il était dans le sol : # le ballon s'enfonce dans le sol avant de rebondir # paramètre numérique : # dt : pas de temps constant à régler pour obtenir un calcul précis ################################################################################ """ g = -9.81 def ballon_1d( masse, k, z0, v0, tmax, dt ) : """ chute d'un ballon élastique depuis la hauteur h : z(t) (z0, v0) : position et vitesse verticales initales dt : pas de temps à régler suffisamment petit pour obtenir un calcul précis """ tab_t, tab_z, tab_v, tab_a = [], [], [], [] t = 0 z = z0 v = v0 debut_rebond = None # nombre d'itérations n = int(tmax/dt) for i in range(n) : t += dt # force f = masse * g if z < 0 : # compression du ressort if debut_rebond == None : print(f" début rebond : iteration={i:3d} z={z:6.3f} t={t:6.3f}") debut_rebond = i f -= k * z else : # z >= 0 if debut_rebond != None : print(f" fin rebond : iteration={i:3d} z={z:6.3f} t={t:6.3f}") duree_rebond = i - debut_rebond if duree_rebond < 10 : print(f" duree_rebond = {duree_rebond} itérations < 10 : pas assez d'itérations") debut_rebond = None # accélération a = f / masse # vitesse if i == 0 : v += a * dt/2 else : v += a * dt # position z += v * dt # print(t, z, v, a) tab_t.append( t ) # tab_a.append( a ) # tab_v.append( v ) tab_z.append( z ) pyplot.plot(tab_t, tab_z) # pour visualiser l'écoulement du temps : 1 point toutes les 10 itérations tab_t1 = [ tab_t[i] for i in range(0,n,10) ] tab_z1 = [ tab_z[i] for i in range(0,n,10) ] pyplot.plot(tab_t1, tab_z1, 'ro') # ronds rouges return def ballon_1d_test() : fig = pyplot.figure(1, figsize=(6, 6)) pyplot.title(" 3 lancers de ballon : horizontal, vers le haut, vers le bas") tmax = 10 ballon_1d( 0.5, 10, 100, 0, tmax, 0.05 ) ballon_1d( 0.5, 10, 100, -50, tmax, 0.05 ) ballon_1d( 0.5, 10, 100, +20, tmax, 0.05 ) pyplot.xlabel("t ou x") pyplot.ylabel("z") pyplot.plot( [0,tmax], [0,0], color="black") pyplot.show() return None if __name__ == "__main__" : print( doc ) ballon_1d_test() """"""