JGU Logo JGU Logo JGU Logo JGU Logo

Institut für Informatik

Michael Wand
David Hartmann
Sommersemester 2020DIGITAL

Blatt 09

Aufgabe 04
Einführung in die Softwareentwicklung



Aufgabe (Deutschland)Karte zeichnen

Letzte Änderung: 15. June 2020, 13:07 Uhr
12 Punkteim Detail
Ansicht:   |  

Ihre Aufgabe besteht darin eine Karte von Deutschland zu zeichnen.
Zu diesem Zweck steht die Datei deutschland.pol zur Verfügung.


  deutschland.pol (4.9 Mb)
Die ersten 17 Zeilen der Datei sehen etwa so aus:
66
11
70894996 90916485
70894967 90916596
70894857 90916900
70894785 90917068
70894689 90917042
70894643 90916941
70894619 90916852
70894796 90916476
70894890 90916276
70894991 90916238
70894996 90916485
212
71167074 91096353
71166917 91096437
71166775 91096512

Diese Textdatei enthält die Umrisse der Bundesrepublik und der Bundesländer als Koordinaten. Die Zahl in der ersten Zeile gibt die Anzahl der Polygone an. Die Zahl in der zweiten Zeile gibt die Anzahl der Punkte des ersten Polygons an. Danach folgen die x- und y-Koordinaten des ersten Polygons. Nun beginnt das zweite Polygon, erneut mit der Anzahl der Punkte, usw.


  1. Lesen Sie die Datei ein und speichern Sie die 2D-Punkte jedes Polygonzuges in einem vector ab. Um sich nun zu merken welche Polygonzug welche Punkte enthält, speichern wir den vector in einer map, wobei der Schlüssel die Nummer (durchnummeriert) des Polygonzuges ist und der Wert die dazugehörigen Punkte ist.

    Hinweis: Falls Sie probleme mit dem einlesen haben, schauen Sie sich noch einmal Aufgabenblatt 03 an, wo wir auch schon eine solch einfach formattierte Datei eingelesen haben.
  2. Erstellen Sie eine GUI, auf der die Karte gezeichnet wird. Der Nutzer soll die Wahl haben, ob er die Karte grob (nur jeden 50. Punkt als groben Polygonzug interpretieren) oder fein (alle Punkte verbinden) angezeigt haben möchte.

    Hinweis: Beachten Sie, dass die Koordinaten der Karte sehr groß sind. Direkt die Position an der Stelle \((70894996,90916485)\) zu referenzieren geht nur bei SEHR großen Bildschirmen ;). Skalieren/Verschieben Sie also die Positionen global vor dem Zeichnen so um dass Sie überhaupt etwas sehen können.
  3. Bieten Sie dem Nutzer die Möglichkeit, die Karte einzufärben.
  4. Bonus: Implementieren Sie das Zoomen und Verschieben der Karte mit der Maus
  5. Bonus: Flood-Filling: Wir möchten nun das „Einfärben“, das Qt für uns voll-automatisch übernehmen kann, eigenhändig implementieren.
    • Dazu beginnen wir damit, dass der User auf ein beliebiges Pixel auf dem gezeichneten Bild klickt.
    • Ist das Pixel ungefärbt, so wird es eingefärbt und die Methode wird rekursiv für alle umliegenden Pixel aufgerufen, die keine Konturfarbe aufweisen.
    • Ist es bereits eingefärbt passiert nichts.
    Hinweis: Um Pixel einzeln einzufärben muss das Basisobjekt auf dem gezeichnet wird ein Bitmap sein, wenn nur Linienzüge gemalt werden ist es auch möglich eine Vektorgrafik zu erstellen. (Der Rest des Codes sollte dabei im Prinzip gleich bleiben.)