lehrkraefte:blc:math:povray:lektion4

vermessung.ods

Speichern / Kopieren Sie folgenden Code und fügen den fehlenden Code unten ein (im Moment Kommentare).

schnecke.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 <10,2,5>    // 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)
}
 
plane {z,0
  pigment  {granite scale 10}
  normal { bozo }
  finish { reflection 0.9}
}
 
#declare umdrehung=-4; // Start der Umdrehungen
#declare ende=2;       // Ende der Umdrehungen
#declare sf=1.6;     // Streckfaktor pro Umdrehung
#declare schritte=50;  // 50 Schritte pro Umdrehung
 
#while (umdrehung<ende)    // Solange wie umdrehung<ende wiederhole alles zwischen hier und #end
  #declare r = pow(sf,umdrehung);  // sf hoch umdrehung
 
  //
  // Eine Kugel an die Position <0,r,0> mit kleinem Radius platzieren
  // und danach um umdrehung*360 um die z-Achse drehen
  //
  // HIER FEHLT IHR CODE
 
  #declare umdrehung = umdrehung + 1/schritte;
#end //while

Das Bild sollte etwa wie folgt aussehen:

Variieren Sie jetzt den Radius der Kugeln so, dass der Kugelradius proportional zu $r$ ist. Passen Sie eventuell die Kameraeinstellungen an. Mögliches Resultat:

Die $z$-Koordinate der Kugeln soll nun ebenfalls linear mit dem Radius variieren. Die $z$-Koordinate soll grösser (höher) für kleine Werte von $r$ sein und für grössere $r$ dann kleiner werden. Mögliches Resultat:

Die Modulo-Operation 'mod(a,b)' berechnet den Rest der ganzzahligen Division a/b. Z.B. ist mod(128,10) = 8, MOD(128,5) = 3, mod(128,16) = 0, etc.

  1. Vor der while-Schleife, definieren Sie eine weitere Variable 'num' und initialisieren Sie diese auf 0.
  2. Vor dem Ende der while-Schleife, zählen Sie die Variable 'num' um 1 hoch (inkremieren).
  3. Mittels if/else/end können Dinge nur unter bestimmten Bedingung ausgeführt werden. Ersetzen Sie die “pigment-Zeile” der Kugel durch folgende fünf Zeilen, die je nachdem, die eine oder andere pigment-Zeile einfügen:
    #if (mod(num,2) = 0)
      pigment {color rgb x}
    #else 
      pigment {color rgb z}
    #end

Variieren Sie nun die Farbe der Kugeln (gibt wohl noch schönere Fabrkombinationen als rot/blau)… Mögliches Resultat:

Es ist auch möglich ohne if/else/end auszukommen, indem man die Farbe wie folgt definiert:

    pigment { color rgb <mod(num,2), 0, 1-mod(num,2)> }

Ersetzen Sie die Kugeln durch dünne Tori, so dass man ins Schneckenhaus hinein sieht. Z.B. so:

Platzieren Sie auf jedem 7. Torus einen Stachel. Z.B. so:

Der Code von Aufgabe 5 enthält wohl einige Wiederholungen, was die Transformationen angeht. Vor der while-Schleife, definieren Sie ein Objekt 'teil', das in der $y/z$ Ebene um den Ursprung zentriert ist.

#declare teil = union {
   // lauter tolle Dinge hier (Kugel, Tori, Tori mit Stacheln etc...
}

Das 'teil' wird jetzt in der while-Schleife verwendet und entsprechend transformiert und in der Grösse angepasst (scale):

   object { teil
      scale 0.5*r  // oder was auch immer passt.
      // veschieben und Drehen...
    }

Das 'teil' kann nun selbst wieder mit einer while-Schleife definiert werden (innerhalb von union) um z.B. so etwas so erzeugen:

Ein einzelnes 'teil' ist in blau abgebildet. Das 'teil' besteht aus Kugeln, die in zwei Achsenrichtungen mit 0.2 gestreckt wurden.

  • Platzieren Sie Lichtquellen im Schneckenhaus drin
  • Variieren Sie die Farbe kontinuierlich (Farbverlauf, wie z.B. ein Regenbogen)
  • Drehen Sie das 'teil' zusätzlich um die Gangachse.
  • lehrkraefte/blc/math/povray/lektion4.txt
  • Last modified: 2017/05/19 10:06
  • by Ivo Blöchliger