import numpy as np import matplotlib.pyplot as plt import time from colour import Color t0 = 0 tf = 20 # tf=3 dt = 0.5 t = t0 U = 1.25 # vitesse m.s-¹ Wm = 0.3 # distance minimale entre la voiture et celle qui la précède m Ws = 0.9 # m def rainbow_gradient(num_colors): colors = [] base_color = Color("violet") gradient = list(base_color.range_to(Color("red"), num_colors)) for color in gradient: hex_code = color.hex_l colors.append(hex_code) return colors colors = rainbow_gradient(11) def phi(ww): # prend en entrée la distance entre les deux véhicules PHI = (U*(1 - np.exp(- (ww-Wm)/Ws))) return (ww >= Wm)* PHI # retourne la vitesse du véhicule y = np.linspace(0, 0, 11) xxbase = np.linspace(0, 1, 11) def position(fposition, newv): newp = fposition + newv * dt return newp def vitesses(fposition): dist = np.diff(fposition) vitesses = phi(dist) newv = np.insert(vitesses, 10, 1.25) return newv xxold = xxbase.copy() while(t<tf): plt.figure(1,figsize=[16,9]) plt.clf() plt.xlim([-1,20]) plt.ylim([-0.5, 1.5]) vt = vitesses(xxold) xx = position(xxold, vt) # color = ['#ff0000', '#ff5300', '#ffa500', '#ffd200', '#ffff00', '#80c000', '#008000', '#004080', '#0000ff', '#2600c1', '#4b0082'] plt.scatter(xx, vt) plt.scatter(xx, y, c=colors) plt.plot([0,20],[1.25, 1.25], color='k', linestyle='-', linewidth=1) plt.xlabel('distance w en m') plt.ylabel('vitesse en m.s-¹') plt.title('Evolution de la vitesse des voitures\nvitesse du leader : ' + str(U) + 'm.s-¹\ndistance minimale entre deux voitures : ' + str(Wm) + 'm') plt.draw() # plt.savefig(str(t)+'.png') plt.pause(0.00001) t += dt xxold = xx.copy()