===== Lektion vom Freitag 5. Mai 2017 ===== ===== Aufgabe 0 ==== Studieren Sie folgende Abschnitte und probieren Sie die Codeschnipsel aus, indem Sie diese in eine Szene mit Kamera und Licht kopieren (und evtl. ein Koordinatensystem). ==== translate ==== Mit 'translate' können Objekte verschoben werden, z.B. sphere { <0,0,0>,1 pigment { color rgb x } // rot translate <1,2,1> // Kugel hat jetzt neu (1,2,1) als Zentrum } ==== rotate ==== Mit 'rotate' können Objekte gedreht werden (rechtsdrehend um die $x$-, $y$- oder $z$-Achse). Winkelangabe in Grad. Rechtsdrehend heisst, dass wenn der Daumen der **rechten** Hand in Richtung der Drehachse zeigt, wird das Objekt in Richtung der Finger um die Achse gedreht. box { <0,0,0>,<1,1,1> // Einheitswürfel pigment { color rgb y } // grün rotate 45*z // Dreht den Würfel nach rechts hinten } ==== scale ==== Mit 'scale' können Objekte gestreckt werden. Entweder wird der Streckfaktor als Zahl, oder ein Vektor mit Streckfaktoren in die 3 Achsenrichtungen angegeben: sphere { <0,1,0>,1 pigment { color rgb z } // blau scale <1,1,0.2> // Streckt mit 0.2 in z-Richtung -> kommt flach heraus ;-) } **Achtung**: Es wird immer bezüglich dem Nullpunkt gestreckt. Man sollte die Objekte um den Nullpunkt zentrieren (falls nötig mit 'translate'), dann strecken und am Schluss noch an die richtige Position schieben. ==== torus ==== Ein Torus ist eine Art Veloschlauch. Dieser kann durch die Angabe von 2 Radien spezifiziert werden: Distanz von der "Radachse" zur Schlauchmitte und Radius des Schlauchrohres. Siehe http://www.povray.org/documentation/view/3.7.0/288/ Ein so definierter Torus hat sein Zentrum immer im Ursprung und liegt in der $x/z$-Ebene. torus {1, 0.1 pigment {color rgb x+y} // gelb } // Das ist ein Kommentar und bewirkt nichts. // 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 <15,5,8> // Position der Kamera look_at <0, 0, 1> // Blickrichtung (erscheint im Bildmittelpunkt) angle 35 // Ö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,0 // Ebene, senkrecht zu z=<0,0,1>, mit Abstand 0 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> } } // x-Achse cylinder { <-1,0,0>, <4,0,0>, 0.1 // Zylinder vom Ursprung 0=<0,0,0> zum Punkt 2*<1,0,0>=<2,0,0>, Raddiu 0.1 pigment { color rgb <1,0,0> } // Farbe rot } cone { 4*x, 0.2, 4.4*x, 0 // Kegel von <2,0,0> zu <2.4,0,0>, Startradius 0.2, Endradius 0 pigment { color rgb x } // Farble blau z=<0,0,1> } // y-Achse cylinder { -y, 4*y, 0.1 pigment { color rgb y } } cone { 4*y, 0.2, 4.4*y, 0 pigment { color rgb y } } // z-Achse cylinder { -z, 4*z, 0.1 pigment { color rgb z } } cone { 4*z, 0.2, 4.4*z, 0 // Kegel von <2,0,0> zu <2.4,0,0>, Startradius 0.2, Endradius 0 pigment { color rgb z } // Farble blau z=<0,0,1> } torus {1, 0.1 pigment {color rgb x+y} // gelb } ==== Aufgabe 1 ==== Verwenden Sie 'rotate' und 'translate', um die Tori an die gewünschte Position zu bringen. Laden Sie ebenfalls ihr Koordinatensytem (mit #include) in ihre Szene. Erstellen Sie folgende Szenen: * Torus, der **auf** der $x/y$-Ebene liegt (d.h. diese berührt). * Einen zweiten, gleich grossen Torus, der in $y$-Richtung verschoben ist und den ersten von aussen berührt. * Einen dritten Torus (ebenfalls auf der $x/y$-Ebene), der beide Tori von aussen berührt. Anstatt zu rechnen, vewenden Sie translate und rotate. ==== Aufgabe 2 ==== Programmieren Sie drei Tori, die ineinander hängen und sich exakt von innen her berühren. Der mittlere Torus ist natürlich um 90 Grad gedreht. Tip: Mit folgender Anweisung, innerhalb eines Objekts, können Sie dieses spiegelnd machen: finish { phong 0.95 reflection {0.95} } Spiegelnde Objekte leben von ihrer Umgebung. Fügen Sie z.B. einen Himmel hinzu. ==== union, declare, object ==== Objekte können zu einem Objekt zusammengefasst werden und dann als Ganzes manipuliert werden. Das ist vor allem dann nützlich, wenn man Objekt verschieben, drehen und/oder kopieren möchte: // Speichern in die Variable schneemann (wird noch nichts angezeigt) #declare schneemann = union { sphere { <0,0,0.5>, 0.5 } sphere { <0,0,1.5>, 0.5} } // Objekt gebrauchen: object { schneemann pigment { color rgb 1 } // Weiss } object { schneemann pigment { color rgb x } // Rot translate <0,2,0> // Verschieben } ==== Aufgabe 3 ==== Folgender Code erzeugt einen halben Torus: #declare rund = difference { // Halber torus (in x/z-Ebene, Teil mit positiver x-Koordinate torus {1, 0.2} plane {x, 0} } object{rund pigment{color rgb x} } Bauen Sie daraus ein Kettenglied (mit zwei halben Tori und zwei Zylindern). Definieren Sie dann eine neue Variable (z.B. kettenglied) und stellen Sie dann wieder eine Kette dar. Mit Hilfe von [[lehrkraefte:blc:math:povray:while|Wiederholungen]], stellen Sie folgendes dar: * eine Kette mit vielen Gliedern * eine Kette die im Kreis geschlossen ist * ein Kettenhemd, mit runden gliedern (bzw. zwei-dimensionale Kette) * Hängende Kette entlang einer Parabel {{:lehrkraefte:blc:math:povray:kette2.jpg?direct&400|}}