Objectif : le parcours "goût des sciences"
L 'EN nous dit:
Classe de première de la voie générale
Objet d'étude pour lequel les œuvres sont renouvelées pour la première de l'année 2025-2026
La littérature d'idées du XVIe siècle au XVIIIe siècle
- Étienne de La Boétie, Discours de la servitude volontaire / parcours : « Défendre » et « entretenir » la liberté.
- Bernard Le Bouyer de Fontenelle, Entretiens sur la pluralité des mondes / parcours : le goût de la science.
- Françoise de Graffigny, Lettres d'une Péruvienne (en incluant les éléments de la seconde édition augmentée de 1752 suivants : l'introduction historique aux Lettres Péruviennes et les Lettres XXVIII, XXIX, XXX et XXXIV) / parcours : « un nouvel univers s’est offert à mes yeux ».
Notions
Équations célestes
Ecliptique
- Script écliptique python (création IA)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimation
from matplotlib.widgets import Button
# Paramètres
obliquity = 23.44 # inclinaison de l'écliptique en degrés
obliquity_rad = np.radians(obliquity)
theta = np.linspace(0, 2 * np.pi, 200)
# Sphère céleste
x_eq = np.cos(theta)
y_eq = np.sin(theta)
z_eq = np.zeros_like(theta)
x_ecl = np.cos(theta)
y_ecl = np.sin(theta) * np.cos(obliquity_rad)
z_ecl = np.sin(theta) * np.sin(obliquity_rad)
# Projection cylindrique : x = mois, y = déclinaison
months = [
"Mars", "Avr", "Mai", "Juin", "Juil", "Août", "Sept", "Oct", "Nov", "Déc", "Janv", "Fév", "Mars"
]
month_pos = np.linspace(0, 12, len(months))
lambda_ecl = np.linspace(0, 2 * np.pi, 200)
dec = np.arcsin(np.sin(obliquity_rad) * np.sin(lambda_ecl)) * 180 / np.pi
# Saisons (positions en mois)
seasons = {
"Équinoxe printemps": 0,
"Solstice été": 3,
"Équinoxe automne": 6,
"Solstice hiver": 9
}
fig = plt.figure(figsize=(10, 10))
gs = fig.add_gridspec(2, 1, height_ratios=[2, 1])
ax3d = fig.add_subplot(gs[0], projection='3d')
ax2d = fig.add_subplot(gs[1])
# Pour le bouton pause/play
is_paused = [False] # Utilisation d'une liste pour mutabilité dans la closure
def update(frame):
ax3d.cla()
ax2d.cla()
# Sphère céleste animée
ax3d.set_box_aspect([1, 1, 1]) # Sphère non déformée
ax3d.view_init(elev=30, azim=frame)
# Equateur céleste
ax3d.plot(x_eq, y_eq, z_eq, 'b', label="Équateur céleste")
# Écliptique
ax3d.plot(x_ecl, y_ecl, z_ecl, 'orange', label="Écliptique (23,44°)")
# Sphère de fond
u, v = np.mgrid[0:2*np.pi:20j, 0:np.pi:10j]
xs = np.cos(u)*np.sin(v)
ys = np.sin(u)*np.sin(v)
zs = np.cos(v)
ax3d.plot_wireframe(xs, ys, zs, color="gray", alpha=0.1)
# Terre au centre
u_s, v_s = np.mgrid[0:2*np.pi:10j, 0:np.pi:10j]
r_terre = 0.07
x_terre = r_terre * np.cos(u_s) * np.sin(v_s)
y_terre = r_terre * np.sin(u_s) * np.sin(v_s)
z_terre = r_terre * np.cos(v_s)
ax3d.plot_surface(x_terre, y_terre, z_terre, color='deepskyblue', alpha=1)
# Axe pointant vers le Soleil apparent sur l'écliptique
idx = frame % len(theta)
x_sol = np.cos(theta[idx])
y_sol = np.sin(theta[idx]) * np.cos(obliquity_rad)
z_sol = np.sin(theta[idx]) * np.sin(obliquity_rad)
ax3d.quiver(0, 0, 0, x_sol, y_sol, z_sol, color='red', linewidth=2, arrow_length_ratio=0.1)
ax3d.scatter([x_sol], [y_sol], [z_sol], color='red', s=60, label="Soleil apparent")
ax3d.legend()
ax3d.set_xlim([-1.2, 1.2])
ax3d.set_ylim([-1.2, 1.2])
ax3d.set_zlim([-1.2, 1.2])
ax3d.set_title("Plan de l'écliptique vs équateur céleste")
ax3d.set_axis_off()
# Projection cylindrique animée
x_proj = np.linspace(0, 12, len(dec))
ax2d.plot(x_proj, dec, color='orange', label="Déclinaison du Soleil")
for name, pos in seasons.items():
ax2d.axvline(pos, color='gray', linestyle='--', alpha=0.7)
ax2d.text(pos, 25, name, rotation=90, va='bottom', ha='center', fontsize=9, color='black')
x_point = x_proj[idx]
y_point = dec[idx]
ax2d.plot([x_point], [y_point], 'ro', markersize=10, label="Position du Soleil")
ax2d.axvline(x_point, color='red', linestyle=':', alpha=0.5)
ax2d.axhline(y_point, color='red', linestyle=':', alpha=0.5)
ax2d.set_xticks(month_pos)
ax2d.set_xticklabels(months)
ax2d.set_xlim(0, 12)
ax2d.set_ylim(-25, 25)
ax2d.set_ylabel("Déclinaison (°)")
ax2d.set_title("Projection cylindrique de l'écliptique (déclinaison du Soleil)")
ax2d.legend(loc='upper right')
def on_click(event):
is_paused[0] = not is_paused[0]
def gen():
frame = 0
while True:
if not is_paused[0]:
yield frame
frame = (frame + 1) % len(theta)
else:
yield frame
# Ajout du bouton pause/play
ax_button = plt.axes([0.8, 0.01, 0.1, 0.05])
button = Button(ax_button, 'Pause/Play')
button.on_clicked(on_click)
ani = FuncAnimation(fig, update, frames=gen, interval=50, cache_frame_data=False)
plt.subplots_adjust(bottom=0.08, top=0.97, hspace=0.25) # Laisse de la place pour le bouton
plt.show()
Aucun commentaire:
Enregistrer un commentaire
Tout commentaire nous engage ;)