import numpy as np
import matplotlib.pyplot as plt

# Physikalische Parameter
g = 9.81   # Erdbeschleunigung [m/s^2]
m = 1.0    # Masse [kg] (nur fuer omega0 relevant)
d = 0.5    # Abstand Schwerpunkt - Drehpunkt [m]
I = 0.4    # Traegheitsmoment um den Drehpunkt [kg*m^2]

# Anfangsauslenkung (kleiner Winkel) in Grad
phi0_deg = 10.0
phi0 = np.deg2rad(phi0_deg)  # Anfangswinkel in rad

# Eigenkreisfrequenz des physikalischen Pendels (Kleinwinkelnäherung)
omega0 = np.sqrt(m * g * d / I)

# Zeitachse: mehrere Perioden
T = 2.0 * np.pi / omega0        # Periodendauer
t_max = 5.0 * T                 # z.B. 5 Perioden
t = np.linspace(0, t_max, 1000)

# Weg-Zeit-Funktionen (Winkel und Bogenlaenge)
phi = phi0 * np.cos(omega0 * t)           # Winkel
s = d * phi                               # Bogenlaenge des Schwerpunkts

# Geschwindigkeits-Zeit-Funktionen
phi_dot = -phi0 * omega0 * np.sin(omega0 * t)  # Winkelgeschwindigkeit
v_tan = d * phi_dot                           # tangentiale Geschwindigkeit

# Beschleunigungs-Zeit-Funktionen
phi_ddot = -phi0 * omega0**2 * np.cos(omega0 * t)  # Winkelbeschleunigung
a_tan = d * phi_ddot                               # tangentiale Beschleunigung

# 1) Weg-Zeit-Funktion (Winkel)
plt.figure()
plt.plot(t, phi)
plt.xlabel("Zeit t [s]")
plt.ylabel("Winkel phi(t) [rad]")
plt.title("Physikalisches Pendel: Winkel-Zeit-Funktion (Kleinwinkelnäherung)")
plt.grid(True)

# Optional: Bogenlaenge s(t)
plt.figure()
plt.plot(t, s)
plt.xlabel("Zeit t [s]")
plt.ylabel("Bogenlaenge s(t) [m]")
plt.title("Physikalisches Pendel: Bogenlaenge s(t)")
plt.grid(True)

# 2) Geschwindigkeit-Zeit-Funktion
plt.figure()
plt.plot(t, phi_dot)
plt.xlabel("Zeit t [s]")
plt.ylabel("Winkelgeschwindigkeit dphi/dt [rad/s]")
plt.title("Physikalisches Pendel: Winkelgeschwindigkeit-Zeit-Funktion")
plt.grid(True)

# Optional: Tangentialgeschwindigkeit
plt.figure()
plt.plot(t, v_tan)
plt.xlabel("Zeit t [s]")
plt.ylabel("Tangentialgeschwindigkeit v_tan(t) [m/s]")
plt.title("Physikalisches Pendel: Tangentialgeschwindigkeit")
plt.grid(True)

# 3) Beschleunigungs-Zeit-Funktion
plt.figure()
plt.plot(t, phi_ddot)
plt.xlabel("Zeit t [s]")
plt.ylabel("Winkelbeschleunigung d2phi/dt2 [rad/s^2]")
plt.title("Physikalisches Pendel: Winkelbeschleunigung-Zeit-Funktion")
plt.grid(True)

# Optional: Tangentialbeschleunigung
plt.figure()
plt.plot(t, a_tan)
plt.xlabel("Zeit t [s]")
plt.ylabel("Tangentialbeschleunigung a_tan(t) [m/s^2]")
plt.title("Physikalisches Pendel: Tangentialbeschleunigung")
plt.grid(True)

plt.show()
