Führen Sie zusätzliche sinnvolle Methoden ein, z.B. Länge eines Vektors, Winkel zwischen zwei Vektoren, Skalarprodukt, Vektorprodukt, Ausgabe, Vergleich.
Anschliessend sollte man diese Vektoren so benutzen können:
from ThreeVec import ThreeVec u = ThreeVec( 1., 0.5, 2.) v = ThreeVec( 1., 2.5, -1.) w = u.Add( v) t = u.Subtract( v) t = t.Scale( 2.) print ("Vector w = ", w.x, w.y, w.z) print ("Vector t = ", t.x, t.y, t.z) r = u.CrossProduct(v) x = w.ScalarProduct(v) print (w.Angle(u)) #
Und in späterer Variante mit
Operator Overloading und
__str__()
Methode:
from ThreeVec import ThreeVec u = ThreeVec( 1., 0.5, 2.) v = ThreeVec( 1., 2.5, -1.) w = u + v t = u - v t = t * 2. print ("Vector w = ", w) print ("Vector t = ", t) r = u.CrossProduct(v) x = w.ScalarProduct(v) angle = w.Angle(u) #
(Ausgearbeitetes Beispiel: py, html)
(b) Erweitern Sie
StatCalc.py um Methoden zur Ausgabe von Minimum und Maximum.
(c) In semester.dat
finden Sie die Semesterzahl
bis zum Physikdiplom für zufällig ausgewählte Studenten. Die ersten 100 Einträge sind von Studenten der LMU, die restlichen 100
von Studenten der TUM. Lesen Sie die Daten ein und füllen LMU bzw TUM Zahlen jeweils in ein
StatCalc Objekt.
Sind die Mittelwerte im Rahmen der Schwankungen konsistent ?
(d) Überlegen Sie wie man das Problem aus
(c) (mehrere Statistiken parallel führen) in einer prozeduralen Sprache (Fortran, C)
angehen könnte, d.h. ohne Klassen und Objekte, nur mit Arrays und Funktionen.
Benutzung:
a = LorentzVector(45.0002,0.,0.,45.0) b = LorentzVector(45.0002,31.8198,0.,31.8198) print ("Angle = " , a.Angle(b)) print ("Mass a = " , a.Mass()) print ("Mass b = " , b.Mass()) print ("Mass a+b = " , b.InvMass(a)) ...
(Ausgearbeitetes Beispiel: py, html)
from ThreeVec import ThreeVec import random # random numbers tvc = [] # empty list for i in range(100): # create random ThreeVec u = ThreeVec( random.gauss(0,1), random.gauss(0,1), random.gauss(0,1)) tvc.append(u) # store in list # tvc.sort() # sort ThreeVec-list for tv in tvc: print (tv.Length(), tv) # output length and Threevec (via __str__())
(a) Vervollständigen Sie die deklarierten __init__ Funktionen jeder Klasse.
(b) Erstellen Sie eine Member-Funktion
move ( dx, dy, dz) ,
die ein Particle um die angegebenen Werte in den drei Koordinaten verschiebt (also x+dx, y+dy, z+dz).
Hinweis: Überlegen Sie sich, wo diese Funktion überall deklariert/definiert werden muss,
um möglichst wenig Arbeit zu haben. Zum Test löschen Sie die Kommentarzeichen in Schleife
1 in main().
(Ausgearbeitetes Beispiel: py)
Erstellen Sie eine Python Klasse für Mondfähre, welche Datenelemente, welche Methoden werden benötigt?
Lösungsbeispiel nach Buch Coding for Fun mit C++ bzw Python mondlandung.py.
Modifizieren Sie das Programm, z.B. zufällige Starthöhe, zufällige Variation des Schubfaktors, etc.