C-Uebung

Bibliotheken

elektronische Abgabe | | elektronische Abgabe

Handübung zum Umgang mit Bibliotheken:

Implementieren Sie mit der Open-Source Bibliothek Qt ein Programm, welches den Baum des Pythagoras zeichnet.

wikipedia.org

Frame Work

Als Ausgangsbasis für Ihre Implementierung verwenden Sie das Qt Framework.

svn co svn://schorsch.efi.fh-nuernberg.de/qt-framework

Letzteres checken Sie bitte außerhalb Ihres Repositories aus.

Wenn Sie das Framework in Ihr eigenes Repository integrieren wollen, verwenden Sie den “export” Modus von SVN wie folgt:

cd "your repo"
svn export svn://schorsch.efi.fh-nuernberg.de/qt-framework qt-framework
svn add qt-framework
svn commit -m "import qt-framework"

Hinweise zur Installation von Qt:

Das Framework setzt eine Installation der Qt Klassen-Bibliothek voraus

  • Starten zuerst das Skript “./build.sh” aus dem Framework. Dieses versucht die Installation auf Ubuntu und MacOS X automatisch vorzunehmen.
  • Erst wenn dieses Skript nicht erfolgreich abläuft, müssen Sie Qt manuell selber installieren:
    • Auf Ubuntu installieren Sie diese Bibliothek mit “sudo apt-get install libqt4-dev”
    • Unter MacOS X folgen Sie bitte diesen Installationshinweisen

Wenn Qt ordnungsgemäß installiert wurde, funktioniert die Ãœbersetzung des Frameworks wie gewohnt mit “cmake . && make”.

Vorzugsweise arbeiten Sie jedoch mit der Qt-Entwicklungsumgebung. Dazu öffnen Sie mit dem Qt Creator das “qt-framework.pro” file.

Nun zur Ãœbung mit Qt

Verändern Sie die paintEvent() Methode der Klasse “PainterWidget” in painterwidget.cpp, so dass Sie die QPainter Klasse zum Zeichnen des Baums wie folgt verwenden:

Detaillierte Hinweise zur Programmieraufgabe:

  • Verändern Sie die PainterWidget::paintEvent Methode wie folgt:
    • Zeichnen Sie den Hauptstamm des Baums, mit QPainter, z.B. eine einfache diagonale Linie.
    • Zeichnen Sie nun ein “Y”. Verwenden Sie dazu Koordinatentransformationen, d.h. die Methoden “translate” und “rotate” von QPainter.
    • Am einfachsten funktioniert dies, wenn sie das Koordinatensystem zuallererst von der linken oberen Ecke nach unten in die Mitte verschieben und um 180 Grad rotieren.
    • Zeichnen Sie anschließend anstelle eines einfachen “Y” nun auch die übrigen Verästelungen des Baums mit Hilfe von Rekursion.

Detaillierte Hinweise zur Rekursion:

  • Verwenden Sie Rekursion um den Stamm mit zwei kleineren Ästen fortzusetzen, wobei jeder der zwei Äste wiederum mit jeweils zwei weiteren kleineren Ästen fortgesetzt wird, die wiederum jeweils mit zwei Ästen fortgesetzt werden, usw. usw…
  • Für die Rekursion benötigen Sie eine eigene Methode, die sich selber aufrufen kann und die Zeichenbefehle für eine Verästelung enthält.
  • Im Vergleich mit dem Code zum Zeichnen des “Y”, ersetzen Sie für die rekursive Variante das Zeichnen der oberen zwei Äste durch zwei rekursive Funktionsaufrufe.
  • Die Rekursion arbeitet dann wie folgt:
    • Stamm zeichnen
    • Koordinatentransformationen für den linken Ast festlegen
      • Rekursion ausführen
    • Koordinatentransformationen für den rechten Ast festlegen
      • Rekursion ausführen
    • Koordinatentransformationen rückgängig machen
      • alle in der richtigen umgekehrten Reihenfolge (bzw. mit restore())
  • Beenden Sie den rekursiven Aufruf, wenn die Länge der Äste während des Zeichnens eine bestimmte Grenze unterschritten hat. Die Astlänge bzw. die Rekursionstiefe wird am besten als Funktionsparameter der rekursiven Funktion weitergegeben. Ebenso geben Sie die QPainter-Instanz mittels Call-by-Reference weiter.

Zusatzaufgaben:

  • Färben Sie die Blätter des Baumes grün!
  • Zeichnen Sie den Baum genauso wie auf dem oberen Bild dargestellt!

Student Gallery 2018:

Pyth5 1 Pyth5 2 Pyth5 3 Pyth5 4 Pyth5 5
Pyth5 6 Pyth5 7 Pyth5 8 Pyth5 9 Pyth5 10
Pyth5 11 Pyth5 12 Pyth5 13 Pyth5 14 Pyth5 15
Pyth5 16 Pyth5 17 Pyth5 18 Pyth5 19 Pyth5 20

Student Gallery 2017:

Pyth4 1 Pyth4 2 Pyth4 3 Pyth4 4 Pyth4 5
Pyth4 6 Pyth4 7 Pyth4 8 Pyth4 9 Pyth4 10
Pyth4 11 Pyth4 12 Pyth4 13 Pyth4 14 Pyth4 15

Student Gallery 2016:

Pyth3 1 Pyth3 2 Pyth3 3 Pyth3 4 Pyth3 5
Pyth3 6 Pyth3 7 Pyth3 8 Pyth3 9 Pyth3 10
Pyth3 11 Pyth3 12 Pyth3 13 Pyth3 14 Pyth3 15
Pyth3 16 Pyth3 17 Pyth3 18 Pyth3 19 Pyth3 20
Pyth3 21 Pyth3 22 Pyth3 23 Pyth3 24 Pyth3 25
Pyth3 26 Pyth3 27 Pyth3 28 Pyth3 29 Pyth3 30

Student Gallery 2015:

Pyth2 1 Pyth2 2 Pyth2 3 Pyth2 4 Pyth2 5
Pyth2 6 Pyth2 7 Pyth2 8 Pyth2 9 Pyth2 10
Pyth2 11 Pyth2 12

Student Gallery 2014:

Pyth1 Pyth2 Pyth3 Pyth4 Pyth5
Pyth6 Pyth7 Pyth8 Pyth9 Pyth10
Pyth11 Pyth12 Pyth13 Pyth14 Pyth15
Pyth16 Pyth17


elektronische Abgabe | | elektronische Abgabe

Options: