# -*- coding: utf-8 -*-
# Chapitre 13 — Vecteurs vitesse et accélération d'un ballon (CORRIGÉ)
# Pointage vidéo réel : positions (x, z) du centre du ballon toutes les
# 0,04 s. On calcule les coordonnées de v puis de a par taux de variation
# vers le point suivant, et on trace les vecteurs le long de la trajectoire.

import matplotlib.pyplot as plt

dt = 0.04
t = []
for i in range(26):
    t.append(dt * i)
x = [0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4,
     2.6, 2.8, 3.0, 3.2, 3.4, 3.6, 3.8, 4.0, 4.2, 4.4, 4.6, 4.8, 5.0]
z = [1.800, 2.032, 2.249, 2.449, 2.635, 2.804, 2.958, 3.096, 3.218,
     3.325, 3.416, 3.491, 3.551, 3.595, 3.623, 3.636, 3.633, 3.614,
     3.580, 3.530, 3.464, 3.383, 3.285, 3.173, 3.044, 2.900]

# --- vitesses : taux de variation vers le point suivant ---
vx = []
vz = []
for i in range(len(t) - 1):
    vx.append((x[i+1] - x[i]) / dt)   # À COMPLÉTER
    vz.append((z[i+1] - z[i]) / dt)   # À COMPLÉTER

# --- accélérations : même principe, sur les vitesses ---
ax = []
az = []
for i in range(len(vx) - 1):
    ax.append((vx[i+1] - vx[i]) / dt)
    az.append((vz[i+1] - vz[i]) / dt)

vx_min = vx[0]
vx_max = vx[0]
for valeur in vx:
    if valeur < vx_min:
        vx_min = valeur
    if valeur > vx_max:
        vx_max = valeur
az_min = az[0]
az_max = az[0]
somme_az = 0.0
for valeur in az:
    if valeur < az_min:
        az_min = valeur
    if valeur > az_max:
        az_max = valeur
    somme_az = somme_az + valeur
print("vx : de", vx_min, "à", vx_max, "m/s")
print("az : de", az_min, "à", az_max, "m/s2")
print("az moyen :", somme_az / len(az), "m/s2")

# --- tracé : trajectoire + vecteurs (1 point sur 3) ---
plt.plot(x, z, "k.", ms=4)
for i in range(0, len(ax), 3):
    plt.arrow(x[i], z[i], 0.06 * vx[i], 0.06 * vz[i],
              head_width=0.03, color="teal")
    plt.arrow(x[i], z[i], 0.02 * ax[i], 0.02 * az[i],
              head_width=0.03, color="red")
plt.xlabel("x (m)")
plt.ylabel("z (m)")
plt.title("v (bleu) tangent, a (rouge) vertical vers le bas")
plt.axis("equal")
plt.grid(True)
plt.show()
