Programmieren, Algorithmen und Datenstrukturen 2 (Vorlesung 7)

Organisatorisches:

  • Die Vorlesungs-begleitenden Quellcodes und Skripte haben ein Update erhalten und stehen zum Download bereit
  • Errata und Verbesserungsvorschläge können per E-Mail an Herrn Skroch gesandt werden („Wer Fehler findet und meldet wird belohnt.“)

Figuren

  • Auch wenn die Darstellung, die wir in diesem Beispiel haben sehr einfach gehalten ist, zeigt sie das Grundprinzip der meisten komplexeren Graphischen Darstellungen
  • Ein Bildschirmpunkt ist definiert durch zwei Koordinaten ↔ frame [x][y]
  • Die Ausgabe von Figuren erfolgt durch die Konsole ( monochromes Resultat )

Shape:

  • Struktur:
    • Shape ist eine abstrakte Basisklasse
    • Diese Basisklasse hat die abgeleitete Klassen:
      • Linie ( Bresenham Algorithmus → Bestimmung mittels 2 Punkten )
      • Rechteck
      • Quadrat
  • Standardkonstruktor:
    • „next“ wird auf den Anfang der Liste (list) gesetzt, diese Liste wird mit „this“ initialisiert
  • Attribute:
    • list ist eine Liste für alle Shape-Objekte, die static gekennzeichnet ist und somit nur beim ersten mal initialisiert wird ( außerhalb der Klasse! )

Abstrakte und abgeleitete Klassen

  • Abstrakte Klassen haben mindestens eine rein virtuelle Methode, die mit „0“ initialisiert wird
  • Wir leiten abgeleitete Klassen für unserer Lehrveranstaltungen immer „public“ ab.

Namenskonventionen:

  • Die Namen von Klassen beginnen mit großen Buchstaben ( „Shape“ )
  • Die Namen von Methoden und Attributen beginnen mit kleinen Buchstaben ( „draw“ )

Figurentyp: Linie:

  • Struktur:
    • Es werden 2 Punkte ( Start und Ende ) auf unserem Raster angegeben (Jeder hat eine x- und eine y-Koordinate) ↔ 4 int Variablen
  • Methoden:
    • set-Methode zum ändern der Koordinaten
    • Die rein virtuellen Methoden „draw“ und „move“ werden hier überschrieben
    • „draw“ = Ausgeben der Linie
    • „move“ = Verschieben der Linie
      • + H = Linie →
      • – H =  Linie ←
      • + V = ↑
      • – V = ↓
  • Konstruktoren:
    • Standardkonstruktur setzt alle attribute auf 0 ( 0, 0, 0, 0)
    • Anderer Konstruktor setzt alle Attribute entsprechend der übergebenen Werte

Bresenham-Algorithmus

  • Eine Linie wird annähernd dargestellt, indem der kürzeste Weg über das Raster vom einen zum anderen Punkt.
  • Es gibt 8 mögliche Startrichtungen zum Zeichnen. Diese werden durch die Vorbedingungen auf 2 reduziert.
  • Die Performance-Anforderungen des Zeichnens sind von der Größe des Rasters und der erforderlichen Frames per Second abhängig
  • Vorbedingungen:
    1. Wir zeichnen immer von Links nach Rechts. Einschränkung der möglichen nächsten Punkte ( – 3 Punkte )
    2. Wenn die y-Koordinate des Endpunktes kleiner ist, als die des Startpunktes, werden die Vorzeichen beider Werte umgedreht setzen dafür einen Merker ( – 2 Punkte )
    3. Falls die Linie steiler als 45 Grad verläuft, spiegeln wir alles an 45 Grad und merken uns dies auch ( – 1 Punkt )
  • Entscheidungskriterium:
    • Es soll nur das Kriterium der Vorlesung verwendet werden. Das Beispiel von Wikipedia ist bereits optimiert und „zu gut“ für die Vorlesung.
    • true: gehe nach rechts, positives Inkrement 2dY
    • false: gehe nach rechts-oben, negatives Inkrement 2(dY-dX)
( end_Ycoord - start_Ycoord ) * 2 < ( end_Xcoord - start_Xcoord)

Figurentyp: Rechteck

  • Ein Rechteck besteht aus 4 geraden Linien
  • Über Rechteck lassen sich keine Drachen, Trapeze, etc. darstellen
  • Die Seiten werden beschrieben als: Nordkante, Südkante, Westkante und Ostkante
    • sw-Kante
    • ne-Kante
  • Durch die Übergabe von 2 Ecken ist das Rechteck schon definiert

Figurentyp: Quadrat

  • Quadrat bzw. Square erbt von Rechteck, aber man soll auch bedenken:
  • Liskov-Prinzip: „Ein Quadrat ist kein Rechteck, da nicht alle Methoden eines Rechtecks auf ein Quadrat angewandt werden können.“ → Zu diesem Gebiet gibt es geteilte Meinungen

Konstruktoren

  • Die Attribute werden nicht nach der Reihenfolge innerhalb der Memberinitialisiererliste initialisiert, sondern nach der Reihenfolge ihrer Deklarierung innerhalb der Klasse
Maximilian
Maximilian

Herzlich willkommen! Ich bin Max, ein Informatiker mit über 15 Jahren Berufserfahrung. Hier teile ich meine Leidenschaften, Erlebnisse und Perspektiven. Ich lade dich ein, gemeinsam mit mir auf eine Entdeckungsreise zu gehen.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie, wie Ihre Kommentardaten verarbeitet werden.