# -*- coding: utf-8 -*-
# Chapitre 16 — Bilan énergétique du lancer de basket
# Le pointage réel du chapitre 13, relu à l'énergie : on calcule Ec,
# Epp et Em au fil du vol. Attention : v_i est la vitesse ENTRE M_i et
# M_i+1 — on la compare donc à l'altitude du MILIEU.

import matplotlib.pyplot as plt

m = 0.62       # masse du ballon (kg)
g = 9.81
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]

tm = []
Ec = []
Epp = []
Em = []
for i in range(len(t) - 1):
    vx = (x[i+1] - x[i]) / dt
    vz = (z[i+1] - z[i]) / dt
    zmil = (z[i] + z[i+1]) / 2          # altitude du MILIEU de l'intervalle
    Ec.append(0)                           # énergie cinétique  # À COMPLÉTER
    Epp.append(0)                          # énergie potentielle  # À COMPLÉTER
    Em.append(Ec[i] + Epp[i])
    tm.append(t[i] + dt / 2)

somme_Em = 0.0
for energie in Em:
    somme_Em = somme_Em + energie
moy = somme_Em / len(Em)
Em_min = Em[0]
Em_max = Em[0]
ecart_max = 0.0
for energie in Em:
    if energie < Em_min:
        Em_min = energie
    if energie > Em_max:
        Em_max = energie
    ecart = energie - moy
    if ecart < 0:
        ecart = -ecart
    if ecart > ecart_max:
        ecart_max = ecart
print("Em : min =", Em_min, "J ; max =", Em_max, "J ; moyenne =", moy, "J")
print("écart max à la moyenne :", 100 * ecart_max / moy, "%")

plt.plot(tm, Ec, "o-", ms=3, label="Ec")
plt.plot(tm, Epp, "o-", ms=3, label="Epp (origine au sol)")
plt.plot(tm, Em, "o-", ms=3, label="Em = Ec + Epp")
plt.axhline(moy, color="gray", linestyle="--", lw=1)
plt.xlabel("t (s)")
plt.ylabel("énergie (J)")
plt.legend()
plt.grid(True)
plt.title("Le bilan énergétique du lancer (pointage réel)")
plt.show()
