Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
ss16:physiksimulation_log8 [2016/07/15 20:17] markumnus angelegt |
ss16:physiksimulation_log8 [2016/08/14 22:28] (aktuell) markumnus |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
+ | <html><center><a href="http://www.mintgruen.tu-berlin.de/mathesisWiki/doku.php?id=ss16:physiksimulation"> | ||
+ | Hauptseite des Projekts | ||
+ | </a></center></html> | ||
+ | |||
<- [[ss16:Physiksimulation_Log7|letzte Woche]] | <- [[ss16:Physiksimulation_Log7|letzte Woche]] | ||
+ | **[[ss16:Physiksimulation|Physiksimulation]]/[[ss16:Physiksimulation_Doc_Main|Dokumentation]]/[[ss16:Physiksimulation_Process|Projektverlauf]]/** | ||
=====Logbuch-Eintrag 8===== | =====Logbuch-Eintrag 8===== | ||
Zeile 6: | Zeile 11: | ||
====Zusammenfassung==== | ====Zusammenfassung==== | ||
- | K | + | In dieser Woche haben wir die Arbeiten an unserem Cython-Interface beendet, haben es //fehlerfrei// lauffähig gemacht und begonnen, es in unser Python-Programm zu integrieren. |
====Genauere Beschreibung==== | ====Genauere Beschreibung==== | ||
===C++=== | ===C++=== | ||
- | K | + | Mithilfe eines Fehlergraphen haben wir uns daran gemacht, die Anomalie zu lösen: Warum liefert der gleiche Code mit den gleichen Parametern unterschiedliche Ergebnisse, nur weil er einmal von Cython und einmal direkt aufgerufen wird? Dabei haben wir alle möglichen Fehlerquellen angeguckt. "Werden die Geschwindigkeiten in der Cython-Variante korrekt berechnet?" - nein. "Werden die Beschleunigungen richtig berechnet und die Änderungen werden nur nicht übernommen?"- nein.\\ |
+ | Letztendlich lag der Fehler in einer Eigenheit vom Cython-Compiler: Unsere Objekte haben eine bool-Variable //isFixed//, um sie an einer Stelle zu halten. <html><span style="color:red">Im Standardkonstruktor setzt C++ bool-Variablen auf false, Cython aber auf true</span></html>. Daraus entstand diese sehr merkwürdige Anomalie. Der Fehler konnte dann schnell beseitigt werden. | ||
===Cython=== | ===Cython=== | ||
- | K | + | Unser Cython-Interface haben wir der Übersichtlichkeit halber um eine eigene PyCObject-Klasse erweitert. Diese kann man nach Belieben und bequem ändern, bevor man sie an das Universum weitergibt. Hier kann man nun außerdem für jedes Objekt eine eigene Farbe angeben, die dann bei der Visualisierung genutzt wird. Die Änderungen am Interface sind recht klein: |
+ | <code Python> | ||
+ | # im PyCInterface.pyx | ||
+ | [...] | ||
+ | cdef class Zwischengesicht: | ||
+ | [...] | ||
+ | def add (self, o): | ||
+ | self.intfc.add (o.x, o.y, o.z, o.vx, o.vy, o.vz, o.m) | ||
+ | [...] | ||
+ | class PyCObject: | ||
+ | def __init__(self): | ||
+ | self.name = "" | ||
+ | self.color_r = (1,1,1) # white | ||
+ | self.x = 0 | ||
+ | self.y = 0 | ||
+ | self.z = 0 | ||
+ | self.vx = 0 | ||
+ | self.vy = 0 | ||
+ | self.vz = 0 | ||
+ | self.ax = 0 | ||
+ | self.ay = 0 | ||
+ | self.az = 0 | ||
+ | self.m = 0 | ||
+ | self.fixed = False | ||
+ | </code> | ||
===Python=== | ===Python=== | ||
- | K | + | Diese bessere Art des Objektehinzufügens haben wir nun in unserer Hauptklasse genutzt, um beim Klick auf den "Planten hinzufügen"-Button ein PyCObject zu erzeugen, es hin manipulieren und es mit "Okay" in das Universum zu übernehmen oder es bei "Cancel" zu verwerfen. Die wichtigsten Stellen dazu aus dem langen Hauptprogramm: |
+ | <code Python> | ||
+ | # das "Planeten hinzufügen"-Fenster | ||
+ | class PopupWindow0(QtGui.QWidget): | ||
+ | def __init__(self, parent=None, widget=None): | ||
+ | [...] | ||
+ | # ruft beim Klicken auf den "Okay"-Button die Methode output0 auf | ||
+ | QtCore.QObject.connect(btn0, QtCore.SIGNAL(_fromUtf8("accepted()")), self.output0) | ||
+ | [...] | ||
+ | def output0(self): | ||
+ | obj = PyCObject() | ||
+ | obj.x = float(PositionEditx0.text()) # übernimmt die Werte aus den Eingabefeldern | ||
+ | obj.y = float(PositionEdity0.text()) # und speichert sie in den Attributen des | ||
+ | obj.z = float(PositionEditz0.text()) # PyCObjects | ||
+ | [...] | ||
+ | interface.add (obj) | ||
+ | </code> | ||
====Ausblick==== | ====Ausblick==== | ||
- | In der nächsten Woche | + | In der [[ss16:Physiksimulation_Log9|nächsten Woche]], am letzten regulären Labortermin, bauen wir alle unsere Klassen zu einem kompletten Programm zusammen. Vom Hauptfenster aus wird man dann leicht Objekte erstellen können (ist ohnehin fast fertig) und mit einem Klick die Animation starten können. |