|
|
||
Die Konstruktion eines Sterns.Objekte: "box".
|
Wir verwenden als Ausgangsform einen Quader ("box"). Um eine klar definierte Länge der Strahlen der Sternfigur zu erhalten wird dieser Quader um den Faktor Wurzel aus 2 vergrößert. (Dann sind die Diagonalen seiner Flächen 2 Einheiten lang!) |
box { <-1,-1,-1>,< 1,1,1> scale <1,1,1>*sqrt(2) } |
Der Quader wird um die z-Achse um 45 Grad gedreht. |
box { <-1,-1,-1>,< 1,1,1> scale <1,1,1>*sqrt(2) rotate<0,0,45> } |
Dann wird der Quader in y-Richtung gestaucht und anschliesend um die x-Achse um 45 Grad gedreht. Diese Form wird danach als neues Objekt "Ray_Profile" deklariert. |
#declare Ray_Profile = box { <-1,-1,-1>,< 1,1,1> scale <1,1,1>*sqrt(2) rotate<0,0,45> scale <1,0.36,1> } |
Das neue Objekt wird an der xy-Ebene in z-Richtung mittels "scale<1,1,-1>" gespiegelt und dann wird die Schittmenge ("intersection") der beiden so entstandenen Körper gebildet. |
intersection{ object{ Ray_Profile } object{ Ray_Profile scale<1,1,-1>} } |
Um auch Sterne mit einer ungeraden Anzahl von Strahlen bilden zu können muß eine Hälfte dieser Form durch Subtraktion eines Quaders (=intersection mit dem Inversen) beseitigt werden. Die entstehende Figur bildet einen Strahl des Sterns und wird daher als neues Objekt "'Ray" deklariert. |
#declare Ray = intersection{ object{ Ray_Profile } object{ Ray_Profile scale<1,1,-1>} box{<-2,-1,-1>,<0,1,1> inverse} } |
Die Stahlen des Sterns werden nun mit einer While-Schleife um die y-Achse gedreht angeordnet.
Beim rechten Bild wurde der Strahl mittels " scale<1,0,5,0.5> " schlanker gemacht. |
union{ #local Nr = 0; // start #local EndNr = 5; // end #while (Nr < EndNr) object{Ray rotate<0,Nr*360/EndNr,0>} #local Nr = Nr + 1;// next Nr #end // ------------- end of loop rotate<0,0,0> translate<0,0,0> } // end of union |
Zugehörige Szenenbeschreibung für |
|