# Python Programm zum Visualisieren der Daten des Pendel_Container.cpp Programms, 
# Mathematisches vs. physikalisches Pendel ohne Reibung
# Es werden hier mehrere Bilder der zeitlichen Entwicklung des Systems in einem Ordner 'Bilder' gespeichert
# !!!! Sie muessen vor der Ausfuehrung des Programms den Ordner Bilder erstellen !!!!
# Die einzelnen Bilder kann mann dann mittels des folgenden Terminalbefehls zu einem Video binden:
# ffmpeg -framerate 100 -i './Pendel_Container_%04d.jpg' -s 800x800  Pendel.mp4
# (die Framerate ergibt sich durch N_sim/b = 1000/5)
# Mehrere unterschiedliche Pendelsimuationen werden in einem vector-Container gespeichert

import matplotlib
import matplotlib.pyplot as plt         # Python Bibliothek zum Plotten (siehe https://matplotlib.org/ )
import numpy as np                      # Python Bibliothek fuer Mathematisches (siehe https://numpy.org/ )

grid_dim = 5
Anz_Pendel = grid_dim*grid_dim

data = np.genfromtxt("./Pendel_Container.dat")        # Einlesen der berechneten Daten von Pendel.cpp

for it in range(100):                                 # for-Schleife über die ersten hundert Iterationen
    print(it)                                         # Terminalausgabe der Erstellung des i-ten Bildes
    fig, axs =  plt.subplots(nrows=grid_dim, ncols=grid_dim, constrained_layout=False, figsize=(20,20)) 
    
    n=0
    for ax in axs.flat: 
        ax.cla()
        ax.axis('off')
        ax.set_xlim(-0.6, 0.6)                        # Limitierung der x-Achse
        ax.set_ylim(-0.6, 0.6)                        # Limitierung der y-Achse
        
        ax.scatter( 0, 0, s=5, marker='o', c="black")                                   # Zeichnen des Pendel-Koerpers
        ax.scatter( data[it,2+n*4], data[it,3 +n*4], s=70, marker='o', c="blue")        # Zeichnen des Pendel-Koerpers
        ax.plot( [0 , data[it,2+n*4]] , [0 , data[it,3 +n*4]] ,c="black",linewidth=0.8) # Zeichnen der Pendel-Stange
        
        n=n+1

    # Bild-Ausgabe mit Speicherung eines individuellen Iteration-Namens
    pic_name = "./Bilder/" + "Pendel_Container_" + "{:0>4d}".format(it) + ".jpg"
    plt.savefig(pic_name, dpi=200,bbox_inches="tight",pad_inches=0.05,format="jpg")
    plt.close()
