initial commit
This commit is contained in:
commit
24b956961f
1 changed files with 82 additions and 0 deletions
82
abaqueCuve.py
Normal file
82
abaqueCuve.py
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Created on Mon Feb 10 16:29:16 2025
|
||||||
|
|
||||||
|
@author: Maël Dbq
|
||||||
|
"""
|
||||||
|
|
||||||
|
import numpy as np
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import matplotlib.dates as mdates
|
||||||
|
from scipy.optimize import root_scalar
|
||||||
|
import datetime
|
||||||
|
|
||||||
|
# Fonction pour calculer l'aire du segment de disque pour une flèche donnée
|
||||||
|
def segment_area(f, R):
|
||||||
|
if f == 0:
|
||||||
|
return 0
|
||||||
|
return R**2 * np.arccos((R - f) / R) - (R - f) * np.sqrt(2 * R * f - f**2)
|
||||||
|
|
||||||
|
# Fonction pour trouver la flèche correspondant à une aire donnée
|
||||||
|
def find_f(A, R):
|
||||||
|
if A <= 0:
|
||||||
|
return 0
|
||||||
|
if A >= np.pi * R**2:
|
||||||
|
return 2 * R # Cas d'un disque plein
|
||||||
|
try:
|
||||||
|
sol = root_scalar(lambda f: segment_area(f, R) - A, bracket=[0, 2*R], method='bisect')
|
||||||
|
return sol.root if sol.converged else None
|
||||||
|
except ValueError:
|
||||||
|
return None # Retourne None si aucun zéro trouvé
|
||||||
|
|
||||||
|
# Demande du rayon et de la longueur avec conversion de la virgule
|
||||||
|
rayon_cuve = float(input("Entrez le rayon de la cuve (m) : ").replace(",", "."))
|
||||||
|
longueur_cuve = float(input("Entrez la longueur de la cuve (m) : ").replace(",", "."))
|
||||||
|
|
||||||
|
# Capacité maximale de la cuve (cylindre entier)
|
||||||
|
volume_max = np.pi * rayon_cuve**2 * longueur_cuve
|
||||||
|
|
||||||
|
# Liste des volumes espacés de 0.1 m³
|
||||||
|
volumes = np.arange(0, volume_max + 0.1, 0.1)
|
||||||
|
|
||||||
|
# Calcul des hauteurs de flèche associées
|
||||||
|
flèches = [find_f(v / longueur_cuve, rayon_cuve) for v in volumes]
|
||||||
|
|
||||||
|
# Supprimer les valeurs None (au cas où)
|
||||||
|
volumes = np.array([v for i, v in enumerate(volumes) if flèches[i] is not None])
|
||||||
|
flèches = np.array([f for f in flèches if f is not None])
|
||||||
|
|
||||||
|
# Création d'une échelle temporelle : une valeur par mois sur un an
|
||||||
|
dates = [datetime.date.today() + datetime.timedelta(days=30*i) for i in range(len(volumes))]
|
||||||
|
|
||||||
|
# Espacement en flèche pour avoir des graduations équidistantes en volume
|
||||||
|
nb_grad = 10 # Nombre de graduations voulues
|
||||||
|
volumes_grad = np.linspace(0, volume_max, nb_grad)
|
||||||
|
flèche_grad = [find_f(v / longueur_cuve, rayon_cuve) for v in volumes_grad]
|
||||||
|
|
||||||
|
# Tracer le graphe
|
||||||
|
fig, ax1 = plt.subplots(figsize=(10, 6))
|
||||||
|
|
||||||
|
# Axe principal : Volume en fonction des mois
|
||||||
|
ax1.plot(dates, volumes, label="Volume (m³)", color='b', linewidth=2)
|
||||||
|
ax1.set_xlabel("Temps (mois)")
|
||||||
|
ax1.set_ylabel("Volume (m³)", color='b')
|
||||||
|
ax1.tick_params(axis='y', labelcolor='b')
|
||||||
|
ax1.xaxis.set_major_formatter(mdates.DateFormatter("%b %Y")) # Format mois année
|
||||||
|
ax1.xaxis.set_major_locator(mdates.MonthLocator()) # Une graduation par mois
|
||||||
|
plt.xticks(rotation=45)
|
||||||
|
|
||||||
|
# Deuxième axe pour les hauteurs de flèche
|
||||||
|
ax2 = ax1.twinx()
|
||||||
|
ax2.plot(dates, flèches, label="Hauteur de remplissage (m)", color='r', linestyle='dashed', linewidth=2)
|
||||||
|
ax2.set_ylabel("Hauteur de remplissage (m)", color='r')
|
||||||
|
ax2.tick_params(axis='y', labelcolor='r')
|
||||||
|
|
||||||
|
# Ajouter un quadrillage qui colle aux hauteurs
|
||||||
|
ax2.set_yticks(flèche_grad) # Aligner les graduations de l'axe de droite sur les hauteurs
|
||||||
|
ax2.grid(visible=True, linestyle='--', alpha=0.6, which='both') # Quadrillage en pointillé
|
||||||
|
|
||||||
|
# Légende et titre
|
||||||
|
fig.suptitle("Évolution du remplissage de la cuve au fil du temps")
|
||||||
|
fig.tight_layout()
|
||||||
|
plt.show()
|
Loading…
Add table
Add a link
Reference in a new issue