Simulation de pluie avec Matplotlib

PythonPythonBeginner
Pratiquer maintenant

This tutorial is from open-source community. Access the source code

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire est un tutoriel étape par étape sur la manière de créer une simulation de pluie à l'aide de la bibliothèque Matplotlib de Python. La simulation animera l'échelle et l'opacité de 50 points de dispersion pour simuler des gouttes de pluie tombant sur une surface.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Notebook pour accéder à Jupyter Notebook pour pratiquer.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.

Créer une nouvelle figure et des axes

La première étape consiste à créer une nouvelle figure et des axes qui la remplissent. Ceci sera le canevas sur lequel la simulation sera dessinée.

fig = plt.figure(figsize=(7, 7))
ax = fig.add_axes([0, 0, 1, 1], frameon=False)
ax.set_xlim(0, 1), ax.set_xticks([])
ax.set_ylim(0, 1), ax.set_yticks([])

Créer des données de pluie

Ensuite, nous allons créer les données de pluie. Nous allons créer 50 gouttes de pluie en positions aléatoires, avec des taux de croissance aléatoires et des couleurs aléatoires.

n_drops = 50
rain_drops = np.zeros(n_drops, dtype=[('position', float, (2,)),
                                      ('size',     float),
                                      ('growth',   float),
                                      ('color',    float, (4,))])

rain_drops['position'] = np.random.uniform(0, 1, (n_drops, 2))
rain_drops['growth'] = np.random.uniform(50, 200, n_drops)

Construire le nuage de points

Maintenant, nous allons construire le nuage de points que nous mettrons à jour pendant l'animation au fur et à mesure que les gouttes de pluie évoluent.

scat = ax.scatter(rain_drops['position'][:, 0], rain_drops['position'][:, 1],
                  s=rain_drops['size'], lw=0.5, edgecolors=rain_drops['color'],
                  facecolors='none')

Créer la fonction de mise à jour

La fonction de mise à jour sera appelée par l'objet FuncAnimation pour mettre à jour le nuage de points lors de l'animation.

def update(frame_number):
    ## Obtenez un index que nous pouvons utiliser pour redémarrer la plus ancienne goutte de pluie.
    current_index = frame_number % n_drops

    ## Rendre toutes les couleurs plus transparentes au fur et à mesure que le temps passe.
    rain_drops['color'][:, 3] -= 1.0/len(rain_drops)
    rain_drops['color'][:, 3] = np.clip(rain_drops['color'][:, 3], 0, 1)

    ## Rendre tous les cercles plus grands.
    rain_drops['size'] += rain_drops['growth']

    ## Choisissez une nouvelle position pour la plus ancienne goutte de pluie, en remettant à zéro sa taille,
    ## sa couleur et son facteur de croissance.
    rain_drops['position'][current_index] = np.random.uniform(0, 1, 2)
    rain_drops['size'][current_index] = 5
    rain_drops['color'][current_index] = (0, 0, 0, 1)
    rain_drops['growth'][current_index] = np.random.uniform(50, 200)

    ## Mettez à jour la collection de points dispersés, avec les nouvelles couleurs, tailles et positions.
    scat.set_edgecolors(rain_drops['color'])
    scat.set_sizes(rain_drops['size'])
    scat.set_offsets(rain_drops['position'])

Créer l'animation

Enfin, nous allons créer l'animation en utilisant l'objet FuncAnimation, en passant la figure, la fonction de mise à jour, l'intervalle entre les trames en millisecondes et le nombre de trames à enregistrer.

animation = FuncAnimation(fig, update, interval=10, save_count=100)
plt.show()

Sommaire

Dans ce laboratoire, nous avons appris à créer une simulation de pluie à l'aide de la bibliothèque Matplotlib de Python. Nous avons créé une nouvelle Figure et des Axes, créé les données de pluie, construit le nuage de points, créé la fonction de mise à jour et créé l'animation en utilisant l'objet FuncAnimation.