Miniprojekt - Geometrische Abbildungen
Ziel: Entwicklung eines Prototypen
Viele Spiele benutzen eine aufwendige grafische Darstellung der Spielwelt. Welche Probleme muss man lösen, um (einfache) Welten grafisch darzustellen und gegebenenfalls Bewegungen in solchen Welten grafisch zu simulieren? Um dieser Frage nachzugehen, soll hier ein Software-Prototyp entwickelt werden, mit dem man geometrische Abbildungen an diversen geometrischen Objekten durchführen kann.
Vorgehensweise: Vom Einfachen zum Komplexen
Am besten fängst du mit ganz einfachen Problemen an. Erst wenn du die gelöst hast, solltest du dich an komplexeren Problemen versuchen.
Am einfachsten zu realisieren sind Abbildungen in der zweidimensionalen Zeichenebene. Das folgende Schaubild zeigt als Beispiel eine Verschiebung, die auf ein Rechteck angewandt wird.
Interessant sind auch entsprechende Abbildungen im dreidimensionalen Raum.
Für eine Veranschaulichung räumlicher Gebilde benötigt man eine Transformation eines dreidimensionalen Körpers in ein zweidimensionales Netz:
Die Beispiele verdeutlichen bereits, dass eine Vielzahl an Problemen gelöst werden muss, um ein Grafiksystem zu erstellen.
Prototyping mit funktionaler Programmierung
Benutze funktionale Programmierung zur Realisierung der Grafikoperationen. Versuche zunächst, geeignete Funktionen (mit dem Black-Box-Verfahren) zu modellieren, bevor du sie anschließend (am besten rein funktional) definierst. Dabei musst du dir auch Gedanken machen, wie du die geometrischen Objekte repräsentieren möchtest. Mit dem Listenkonzept steht dir hier ein mächtiges Werkzeug zur Verfügung.
Natürlich will man grafische Objekte in einer Implementierung auch grafisch dargestellt haben. Hier muss man dann die rein funktionale Programmierung verlassen. Es bietet sich an, das in Python integrierte Turtle-Grafik-Modul zu benutzen. Der folgende Python-Quelltext deutet an, wie man das machen könnte.
def zeichneVieleck(punkte): # wird nur zum Zeichnen benutzt if len(punkte) > 0: penup() setpos(punkte[0]) pendown() streckenzug = punkte[1:] + [punkte[0]] for punkt in streckenzug: goto(punkt) # Test from xturtle import * reset() quadrat1 = [[0, 0], [50, 0], [50, 50], [0, 50]] quadrat2 = drehen(quadrat1, [40, 40], 45) quadrat3 = verschieben(quadrat1, [-30, 70]) quadrat4 = drehen(quadrat3, [0, 0], 90) zeichneVieleck(quadrat1) zeichneVieleck(quadrat2) zeichneVieleck(quadrat3) zeichneVieleck(quadrat4)
Jetzt kann es los gehen. Entwickle deinen eigenen Grafik-Prototypen.