Table of Contents

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

Aufgabe 2

Aufgabe 3

Aufgabe 4

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.

Aufgabe 6

Programmieren Sie eine Wendeltreppe.