# Python Plot zur Musterlösung der Aufgabe 2 des Übungsblattes Nr.9
# Python Programm zum Plotten der Daten des Vector-Containers mit 70 Dingen (A9_2.cpp)
# 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 5 -i './Vector_Dinge_%03d.png' -c:v libx264 A9_2.mp4

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

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

fig, ax = plt.subplots()

ax.set_title(r'Container mit Teilchen')     # Titel der Abbildung
ax.set_ylabel('y')                          # Beschriftung y-Achse
ax.set_xlabel('x')                          # Beschriftung x-Achse

r = 200                                     # Radius eines Dings
plot_min=0                                  # Festlegung der x-Untergrenze (Abmessung Kiste)
plot_max=40                                 # Festlegung der x-Obergrenze (Abmessung Kiste)
anz_teilchen = int(len(data[0,:])/3)        # Definition der Anzahl der Dinge

cmap = plt.cm.nipy_spectral                          # Definition der Farbschattierung der Dinge
line_colors = cmap (np.linspace(0.2,1,anz_teilchen)) # Definition der Farbschattierung der Dinge
alp = 0.9                                            # Transparenz eines Dinges

Box = patches.Rectangle((0, 0), 40, 40, linewidth=3, edgecolor='grey', facecolor='none')
Box_klein = patches.Rectangle((0, 0), 5, 5, linewidth=1, edgecolor='red', facecolor='grey', alpha=0.6)

for it in range(len(data[:,0])):                     # for-Schleife fuer die zeitliche Entwicklung der Dinge in der Kiste
    print(it)                                        # Terminalausgabe der Erstellung des i-ten Bildes
    ax.cla()
    ax.add_patch(Box)
    ax.add_patch(Box_klein)
    for i in range(anz_teilchen):                    # for-Schleife ueber die Teilchen in der Kiste
        ax.scatter(data[it,3*i+3],data[it,3*i+4], marker='o', color=line_colors[i], s=r) # Kennzeichnung der Position des Dinges durch einen blauen Kreis
        ax.text(data[it,3*i+3],data[it,3*i+4], str(int(data[it,3*i+2])), fontsize=10, verticalalignment='center', horizontalalignment='center', color="white", alpha=alp) # Ding Nr.
    ax.set_xlim(plot_min-1,plot_max+1)               # Plot-Limit x-Achse
    ax.set_ylim(plot_min-1,plot_max+1)               # Plot-Limit y-Achse
    
    # Bild-Ausgabe mit Speicherung eines individuellen Iteration-Namens
    pic_name = "./Bilder/" + "Vector_Dinge_" + "{:0>3d}".format(it) + ".png" 
    plt.savefig(pic_name, dpi=200,bbox_inches="tight",pad_inches=0.05,format="png")
