===== Lektion vom 12. Mai 2017 ===== ==== Aufgabe 0 ==== Falls noch nicht gemacht, studieren Sie die Beispiele zu [[lehrkraefte:blc:math:povray:while|Wiederholungen mit einer while-Schleife]]. Speichern Sie folgenden Code (bzw. kopieren Sie diesen) und erzeugen (rendern) Sie das Bild. // 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, 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.