lehrkraefte:blc:math:povray:lektion2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
lehrkraefte:blc:math:povray:lektion2 [2017/05/04 12:57] – created Ivo Blöchligerlehrkraefte:blc:math:povray:lektion2 [2017/05/05 07:33] (current) – [torus] Ivo Blöchliger
Line 1: Line 1:
 +===== 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. 
 +<code povray>
 +sphere { <0,0,0>,1
 +  pigment { color rgb x } // rot
 +  translate <1,2,1> // Kugel hat jetzt neu (1,2,1) als Zentrum
 +}
 +</code>
 +==== 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.
 +<code povray>
 +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
 +}
 +</code>
 +
 +==== scale ====
 +Mit 'scale' können Objekte gestreckt werden. Entweder wird der Streckfaktor als Zahl, oder ein Vektor mit Streckfaktoren in die 3 Achsenrichtungen angegeben:
 +<code povray>
 +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 ;-)
 +}
 +</code>
 +**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.
 +
 +<code povray>
 +torus {1, 0.1
 +  pigment {color rgb x+y} // gelb
 +}
 +</code>
 +
 +<hidden Code-Vorlage für Torus (komplette Szene mit Koordinatensystem)>
 +<code povray torus.pov>
 +// 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
 +}
 +</code>
 +</hidden>
 +==== 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:
 +<code povray>
 +  finish { phong 0.95 reflection {0.95} }
 +</code>
 +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:
 +
 +<code povray>
 +// 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 
 +}
 +</code>
 +
 +==== Aufgabe 3 ====
 +Folgender Code erzeugt einen halben Torus:
 +<code povray>
 +#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}
 +}
 +</code>
 +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|}}