Rotationskörper

Beispiel

Visual Studio Projekt herunterladen

Rotationskörper entstehen, wenn ein Profil um eine Achse gedreht wird. Das Profil wird in unserem Beispiel durch eine mathematische Funtkion erzeugt. Ähnlich wie im Würfelbeispiel rotiert und zeichnet sich die Klasse CRotation selbst. In main.cpp hat sich gegenüber dem Würfelbeispiel außer Kameraposition und Linse nichts wesentliches verändert.

CRotation

Sehen wir uns die Datei rotation.h genauer an. Die Klasse für unseren Körper besitzt nun vier geschützte Attribute.

    unsigned int m_segments;     ///< Unterteilungen der y-Achse
    unsigned int m_angles;       ///< Unterteilungen der Rotationsachse

    float        m_rotation;     ///< Rotation des Körpers in Grad
    float        m_rotationTime; ///< Rotationszeit des Körpers in Sekunden

m_segments enthält die Anzahl der Unterteilungen des zu zeichnenden Drahtgittermodells entlang der y-Achse. m_angles ist die Anzahl der Winkelschritte, die beim Zeichnen durchlaufen werden. m_rotation und m_rotationTime übernehmen dieselbe Funktion wie im Würfelbeispiel.

Die render-Funtkion in rotation.cpp zeichnet zunächst die horizontalen Linien unseres Rotationskörpers und anschließend für jeden Winkelschritt die vertikalen Linien von unten nach oben. Sie ruft dabei die Funtkion genRadius für y-Werte zwischen 0 und 1 auf, um den Radius des Rotationskörpers an der jeweiligen Stelle zu erhalten.

In der Funktion genRadius sind vier Profile vorgegeben: Ein Zylinder mit konstantem Radius, ein Konus mit linear schrumpfendem Radius und eine verunglückte Vase.

Selbständige Programmierung

  • Verändere die Funktion genRadius, um eine bessere Vase oder Amphore zu erzeugen. Funktionen, die dabei helfen können, sind sin() oder auch pow() - zur Berechnung von x hoch y für den Feinschliff.Zeichne die Vase vorher auf und überlege dir, wie mit Hilfe von mathematischen Funktionen zu deinem Ziel kommen kannst. Die Vase sollte funtkionieren, also oben offen sein...
  • Erzeuge einen weiteren Rotationskörper aus mehreren Teilen, indem du if-Abfragen für Bereiche von y verwendest.
  • Eine harte Nuss für Freaks, nachdem die anderen beiden Aufgaben bewältigt sind: Erzeuge eine Kugel als Rotationskörper. Wie gelangt man dabei von der Höhe y zum korrekten Radius? Zeichne ein Diagramm! Hinweis: Die inversen trigonometrischen Funktionen für Sinus, Cosinus und Tangens sind asin()acos() und atan()...

zurück