Computergraphikpraktikum Rasteralgorithmen WS04/05
Agenda Thema Didaktische Überlegungen Applets Implementierung Sonstiges
Agenda Thema Didaktische Überlegungen Applets Implementierung Sonstiges
Thema Rasteralgorithmen Grundlage: Foley/van Dam/Feiner/Hughes: Computer Graphics: Principles and Practice, Kapitel 3.2 - 3.4 Midpoint-Line-Algorithm Midpoint-Circle-Algorithm Midpoint-Ellipse-Algorithm Zielgruppe Studenten der Informatik an GDV interessierte Personen
Thema Idee der Midpoint-Algorithmen Beschreibung der anzunähernden Zeichenprimitive über implizite Gleichung: z.B.: F(x, y) = x2 + y2 - R2 Funktion hat den Wert 0 für Punkte auf der Linie Vorzeichen gibt Hinweis auf Position des Punktes zur Linie Für jeden Schritt gibt es zwei mögliche nächste Punkte: auf gleicher Höhe mit Versatz um eine Rasterlinie Betrachtung des Funktionswert des Midpoints zwischen den beiden Punkten („Entscheidungsvariable“) Je nach Funktionswert wird der eine oder der andere Punkt gewählt. Algorithmen lassen sich inkrementell gestalten Line- und Circle-Algorithmen lassen sich auf Integer-Arithmetik beschränken
Agenda Thema Didaktische Überlegungen Applets Implementierung Sonstiges
Didaktische Überlegungen Kursstruktur Lerneinheiten entsprechen den Kapiteln in der Vorlage (Line, Circle, Ellipse) Reihenfolge entspricht zunehmender Komplexität Vorgehen in den Lerneinheiten: naheliegende (naive) Lösung beschreiben der Nachteile dieses Ansatzes Herleitung des inkrementellen Midpoint-Algorithmus Demonstration in einem Applet
Didaktische Überlegungen Probleme Mensch sieht sofort, welche Punkte zu setzen sind Lösung eines Problems, dass nur der Computer hat „Aha-Effekte“ sind schwer zu erzielen Herleitung des Algorithmus aus impliziter Gleichung ist mathematischer Prozess Darstellung nur als Abfolge von Gleichungen im Text möglich Rechenschritte des Algorithmus lassen sich nicht graphisch darstellen
Didaktische Überlegungen Quiz als Lernkontrolle? „Welchen Punkt wird der Algorithmus als nächstes wählen?“ Lösung für Menschen offensichtlich und langweilig Abfrage von Vokabeln: „Die Entscheidung für den nächsten zu zeichnenden Punkt wird mit Hilfe des Funktionswerts des ... getroffen.“ trivial bis stumpfsinnig Fragen mit komplexeren Antworten (Freitext) sind nicht mit vernünftigem Aufwand zu überprüfen
Didaktische Überlegungen Soll der User Zeichenparameter vorgeben können? Plan in der frühen Phase: User gibt Start- und Endpunkt von Linien vor Algorithmus muss folgende Fälle beachten: Richtung der Linie Steigung der Linie (positiv oder negativ) Steigung der Linie (absolut größer oder kleiner 1) Möglichkeiten: Fallunterscheidung am Anfang viele nahezu identische Codeabschnitte nur ein kleiner Teil wird genutzt Fallunterscheidungen im Code Algorithmus wird durch Variablenumdeutungen (z.B. x- vs. y-Koordinate) und if-then-else-Konstrukte unleserlich Alternative: Usereingabe stark einschränken Erkenntnisgewinn in beiden Fällen gering
Agenda Thema Didaktische Überlegungen Applets Implementierung Sonstiges
Applets Benötigte Funktionen Anzeige des ausgeführten Codes Anzeige der wichtigsten Variablen Darstellung der Ideallinie Darstellung des Rasters mit vom Algorithmus gesetzten Punkten
Applets Randbedingungen & Lösung Platz beschränkt, Größe durch Templates vorgegeben Code & Variablenwerte müssen lesbar bleiben Mindestschriftgröße Code passt nicht komplett in die Appletfläche Code & Variablenwerte werden in die Zeichenfläche eingeblendet Code muss scrollen, so dass der aktuell ausgeführte Bereich sichtbar ist
Applets Ablauf des Algorithmus Automatischer Start User sieht: „Hier passiert etwas.“ Automatisches Weiterschalten um einen Schritt in einem festen Intervall Individuelle Einstellmöglichkeit des Intervalls vs. feste Vorgabe Möglichkeit, auf manuelle Kontrolle umzuschalten Reset, um Algorithmus neu zu starten und Zoom/Bildausschnitt zurückzusetzen
Agenda Thema Didaktische Überlegungen Applets Implementierung Sonstiges
Implementierung Klasse MyGrid Applets besitzen grundsätzlich gleiche Funktionalität Grafik-Funktionen ausgelagert in Klasse „MyGrid“ Bereitstellung der Zeichenfläche (erbt von Canvas3D) Hintergrundraster Einblendung der Variablenwerte Einblendung des Pseudocodes Zeichnen der vom Algorithmus berechneten Punkte Zeichnen des Midpoints
Implementierung Appletklassen „AlgorithmApplet“ als Oberklasse für alle Applets Zeichnet die Buttons Implementiert ActionListener für die Buttons (Callback) Stellt Callback-Funktion „doStep()“ für den Timer bereit Eigentliche Applets implementieren Algorithmus in „doStep()“
Implementierung Klassendiagramm
Implementierung Probleme Java3D ist teilweise schwer zu debuggen Code sieht gut aus, scheint aber nichts zu bewirken Threading beißt sich mit internem Threading von Java3D MyTimer als Behavior Ausgabe des Pseudocodes nicht einfach Wahl der Schriftgröße Ausgegebener Pseudocode stimmte nicht mit ausgeführtem Code überein
Implementierung Formeln HTML bietet nur rudimentäre Unterstützung für mathematische Formeln Internet Explorer beherrscht kein MathML Darstellung als Graphik sehr umständlich Änderungen Passgenaues Rendering und Einfügen in den Text Wenig Brüche und Wurzeln HTML als kleineres Übel
Agenda Thema Didaktische Überlegungen Applets Implementierung Sonstiges
Sonstiges Programmierung an zwei Lokationen unter komplett verschiedenen Betriebssystemen Test der Applets und Lernbarumgebung schwierig Dreamweaver-Testversion zu früh installiert 30 Tage Testzeitraum waren vor Beginn der Kurserstellung um Parallel laufendes Seminar hat sehr viel Zeit gefressen Längste Programmiersession: 26 Stunden (vor Abgabe des Codes)
Vielen Dank für Ihre Aufmerksamkeit