Lektion vom 12. Mai 2017
Aufgabe 0
Falls noch nicht gemacht, studieren Sie die Beispiele zu Wiederholungen mit einer while-Schleife.
Speichern Sie folgenden Code (bzw. kopieren Sie diesen) und erzeugen (rendern) Sie das Bild.
- twister.pov
// Kamera camera { sky <0,0,1> // Vektor, der festlegt, wo oben ist. right <-4/3,0,0> // Bildverhältnis 4:3, plus Spiegelung für rechtsdrehendes System location <5,1,3> // Position der Kamera look_at <0, 0, 0> // Blickrichtung (erscheint im Bildmittelpunkt) angle 30 // Öffnungswinkel der Kamera } // Lichtquellen light_source { <6,-2,8> // Position des Lichts color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1) } light_source { <3,10,3> // Position des Lichts color rgb <1,1,1> // Farbe des Lichts, als rot-grün-blau Vektor (Komponenten 0 bis 1) } // Boden plane { z,-1 // Ebene, senkrecht zu z=<0,0,1>, mit Abstand -1 zum Ursprung pigment { // Schachbrett, durchsichtig (t steht für transmit, hier 80% lichtdurchlässig checker color rgbt <1,1,1,0.8>, color rgbt <0.2,0.2,0.2,0.8> } } #declare n=32; // Anzahl Schritte #declare i=0; // Variable, die im while-loop hochgezaehlt wird #while (i<n) // Solange wie i<n, wiederhole alles zwischen hier und #end cone { <0,0,0>, 0.1, 0.3*z, 0 // Kegel vom Nullpunkt mit Spitze auf z-Achse // Farbe. Sinus, Cosinus erwarten Argumente in Radiant (2*pi entspricht 360 Grad) pigment { color rgb <(cos(i*2*pi/n)+1)/2, (cos(i*2*pi/n+2*pi/3)+1)/2, (cos(i*2*pi/n+4*pi/3)+1)/2> } // Ein bisschen Transformationsmagie... rotate i/n*360*x translate y rotate i/n*360*z // Weil's halt schoen ist. finish { phong 0.95 reflection 0.99 conserve_energy } } // Ende des Kegels #declare i=i+1; // Erhoehe die Variable i um 1 #end //while
Aufgabe 1
- Studieren und verstehen Sie die “Transformationsmagie” im obigen Code.
- Ändern Sie den Code so ab, dass sich der Kegel zwei oder gar viel mal dreht.
- Fügen Sie einen dünnen Torus mit Radius 1 um den Ursprung in der $x$/$y$-Ebene ein.
- Ändern Sie den Code so ab, dass der Kegel “zentriert” auf dem Torus sind.
Aufgabe 2
- Studieren und verstehen Sie wie die Farbgebung im obigen Code funktioniert.
- Was sind die “Frequenzen” und Phasen der Farbkanäle?
- Verdoppeln Sie die Frequenz für rot.
Aufgabe 3
- Ändern Sie den Code so, dass die Kegel auf eine Spirale nach aussen laufen.
- Die Spirale soll 2 oder 3 Umdrehungen machen.
Aufgabe 4
- Setzen Sie viele sich schneidende Kugeln zu einem Torus zusammen.
- Verändern sie die $z$-Koordinate der Kugeln so, dass eine Federspiriale entseht.
- Variieren Sie die $z$-Koordinaten der Kugeln mit einer Cosinusfunktion (der Torus verläuft dann wellenförmig rauf und runter).
Aufgabe 5
Schneckenhäuser können durch “logarithmische” Spiralen beschrieben werden. Kurz, pro Umdrehung wird der Radius nicht um eine konstante Strecke grösser, sondern pro Umdrehung wird der Radius mit einer konstanten Zahl $\lambda$ multipliziert (typischerweise zwischen 1.2 und 3). Der Radius lässt sich als Funktion der Anzahl Umdrehungen $\omega$ beschreiben: $r(\omega)=r_0 \cdot \lambda^{\omega}$, wobei $r_0$ der Radius bei 0 Umdrehungen ist.
- Ordnen Sie Kugeln entlang einer logarithmischen Spirale an. Die Spirale soll mindestens 3 Umdrehungen machen.
- Programmieren Sie die Radien der Kugeln proportional zum Radius der Spirale.
- Programmieren Sie die $z$-Koordinate der Kugeln proportional zum Radius der Spirale.
- Fassen Sie Ihr Schneckenhaus mit union { …. } zusammen. Erzeugen Sie ein zweites “Schneckenhaus”, das den Gang darstellt. Dieses zweite Schneckenhaus kann vom ersten mit difference { haus1 haus2 } subtrahiert, bzw. ausgeschnitten werden.
Aufgabe 6
Programmieren Sie eine Wendeltreppe.