28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE
28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE
28. BWINF, Runde 1, Aufgabe 3: Wegfehler - Matthias Springer .DE
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
<strong>Aufgabe</strong> 3<br />
Stefan Hansch, Markus Wirsing, <strong>Matthias</strong> <strong>Springer</strong><br />
in einen Pixel-Wert auf der zu Grunde liegenden Landkarte konvertiert werden,<br />
wobei x pixel der x-Koordinate eines Punktes auf der Landkarte, Logitude[x]<br />
dem Längengrad (geographische Länge) des Punktes aus dem GPS-Daten<br />
und proportions[0] der Breite des Bildes in Pixel entsprechen.<br />
Die Bezeichnungen der Variablen entsprechen dabei so weit wie möglich den<br />
im Quelltext verwendeten Variablennamen und den bereits in <strong>Aufgabe</strong> 5 verwendeten<br />
Bezeichnungen. Analog wird bei der Berechnung der y-Koordinaten<br />
verfahren, jedoch ist hier zu beachten, dass die Breitengrade entgegengesetzt zu<br />
den y-Pixelwerten wachsen. Das heißt, dass die Pixel-Werte von oben nach unten<br />
zunehmen, die Breitengrade jedoch von unten nach oben (auf der Bilddatei). Die<br />
komplette Log-Datei wird im Arbeitsspeicher in drei Arrays gespeichert, wobei<br />
Zeit, Längengrad und Breitengrad (jeweils als Pixel) gespeichert werden. Zeitangaben<br />
werden in vorzeichenlose Ganzzahlen umgewandelt, die die seit 00:00:00<br />
Uhr vegangene Zeit in Sekunden angeben. Zu Problemen kommt es jedoch, wenn<br />
eine Log-Datei über mehrere Tage geht, d. h. wenn ein Sprung von 23:59:59 Uhr<br />
auf 00:00:00 Uhr stattfindet. Ein solcher Spezialfall wird nicht abgedeckt, da er<br />
in Dominics GPS-Logs nicht auftritt.<br />
1.3 Einzeichnen eines Weges auf der Karte<br />
Schreibe ein Programm, das einen Weg auf der Karte einzeichnet.<br />
Es sollen zunächst keine Anpassungen an den GPS-Daten vorgenommen werden.<br />
Es sollen alle Daten (ggf. mit Fehlern) auf die Karte gezeichnet werden.<br />
Dazu iteriert das Programm über alle Einträge in den Log-Daten und zeichnet<br />
entsprechende Linien auf der Landkarte ein, indem die betroffenen Pixel<br />
grün eingefärbt werden. Für diesen Vorgang sind lediglich die Koordinaten der<br />
GPS-Daten von Interesse, nicht jedoch die Zeitangaben. Zum Schluss wird das<br />
neue Bild wie in <strong>Aufgabe</strong> 5 auf der Festplatte gespeichert. Das Bild vom <strong>Aufgabe</strong>nblatt<br />
erhält man, indem man alle drei Log-Dateien auf eine Landkarte<br />
einzeichnet.<br />
Eine Strecke wird dazu als ein Vektor ⃗v mit Aufpunkt A aufgefasst. Die<br />
Länge einer Strecke ergibt sich durch den<br />
√<br />
Betrag des Vektors |⃗v| und wird mittels<br />
Pythagoras über die Beziehung |⃗v| = vx 2 + vy 2 berechnet. Nun wird aus den<br />
Pixelangaben (Start- und Zielpunkt der Strecke) der Einheitsvektor gebildet.<br />
Dieser Vektor hat die Länge 1 und dient lediglich dazu, die Richtung anzuzeigen.<br />
Er wird gebildet, indem der Vektor durch seine Länge (ein Skalar) dividiert<br />
wird. Nun iteriert das Programm ganzzahlig über das Intervall i ∈ [0; |⃗v|] und<br />
berechnet den Punkt, der vom Aufpunkt A genau i (Pixel-)Einheiten entfernt ist<br />
und die Richtung von ⃗v besitzt. Dazu wird der Einheitsvektor mit i multipliziert.<br />
Dieser Punkt wird eingefärbt. Zum Schluss ist also mit Sicherheit die ganze<br />
Strecke eingefärbt.<br />
1.4 Korrektur der Fehler<br />
In den GPS-Logs können Daten fehlen oder falsch sein. Erweitere<br />
Dein Programm so, dass es versucht, die Fehler zu korrigieren, um<br />
so den Weg möglichst realistisch einzeichnen zu können.<br />
2