Anleitungen - M bis P


Makros (Prozeduren) mit PoVRay



Häufig wiederkehrende Programmabschnitte können so definiert werden, dass sie mehrmals in einem Skript aufgerufen werden können.
  1. Bei manchen Programmieraufgaben kommt es vor, dass relativ komplizierte Programmteile mehrmals wiederholt werden müssen. Sollen z.B. in einer Szene um einen Tisch herum 4 gleichartige Stühle hingestellt werden, dann würde die vierfache Definition des Stuhles diese Szenenbeschreibung stark vergrößern.
  2. Ein Problem wurde in einer anderen Aufgabe bereits gelöst: Es wäre gut, darauf zurückgreifen zu können.
  3. Ein Objekt wird in einer Szenenbeschreibung mehrmals benötigt, jedoch mit anderer Größe, Material, Farbe, ...

#macro Makroname (Parameter1, Parameter2,...)
   PoVRay-Schlüsselwörter
#end


Hier ein Beispiel für einen Fensterrahmen:
Als Parameter werden dem Makro die äußere und innere Breite und Höhe sowie die Tiefe übergeben.
Als lokale, d. h. außerhalb des Makros nicht mehr definierte Variable, kann dann die Dicke des Rahmens (waagrecht und senkrecht) festgelegt werden.
Mit der Differenzmenge zweier Boxen wird dann der Fensterrahmen festgelegt, Textur, Pigmentierung und Oberflächeneigenschaften können ebenfalls innerhalb des Makros bestimmt werden.

#macro Mache_rahmen (Breite_aussen,Hoehe_aussen,Breite_innen,Hoehe_innen,Tiefe)

  #local Dicke_waagrecht = (Hoehe_aussen-Hoehe_innen)/2;
  #local Dicke_senkrecht = (Breite_aussen-Breite_innen)/2;

  difference{
   box{<0,0,0>,<Breite_aussen,Hoehe_aussen,Tiefe>
        pigment {color rgb <Z/10,Z/5, Z/2> }
        translate <Z/4,Z/4,Z/6>}

   box{<Dicke_senkrecht,Dicke_waagrecht,-0.1>,
        <Breite_aussen-Dicke_senkrecht,Hoehe_aussen-Dicke_waagrecht,Tiefe+0.1>
        pigment {color rgb <Z/5,Z/2, Z/2> }
        translate <Z/4,Z/4,Z/6>}
        finish {F_MetalE}
        rotate <0,-8,0>
        translate <-5,-4,0>
               } //end difference
 #end


Der Aufruf des Makros erfolgt dann über seinen Namen:

Mache_rahmen(8,10,7,9,1)


Natürlich können die benötigten Parameter auch vor dem Aufruf definiert werden, und dann dem Makro übergeben werden:

#local Breite_aussen = 8;
#local Hoehe_aussen = 10;
#local Breite_innen = 7;
#local Hoehe_innen = 9;
#local Tiefe = 1;

Mache_rahmen(Breite_aussen,Hoehe_aussen,Breite_innen, Hoehe_innen,Tiefe)


In den beiden ersten Bildern ist dieses Makro zu sehen. Bei Mausklick auf die Bilder sind die Skripte einsehbar.




Immer dann, wenn Bildelemente sich wiederholen sollen, sind Makros gut einzusetzen: Sterne, Blumen, Räder, ... aus Zylindern oder Kegeln sind einfach herzustellen:

#macro vervielfache (Gegenstand,wie_oft,Achse)
    #local Zaehler=0;
    #while (Zaehler < wie_oft)
          object{Gegenstand rotate Achse*Zaehler*(360/wie_oft)}
          #local Zaehler=Zaehler+1;
    #end //end while
#end

#declare Ding = union{ //ein Doppelkegel wird hier als
                       //erster Parameter für das
                       //Makro definiert.
        cone{<-1,-1,-1>,0,<0,0,0>,0.1}
        cone{<1,1,1>,0.0,<0,0,0>,0.1}
    }//end Ding


union {
  vervielfache (Ding,14,z)  // Rotation von "Ding" um die z-Achse
       pigment{Gold}
       finish {F_MetalA}
       scale 2.25
       translate <-1,-1.5,0>
       no_shadow
     }//end union (14 Doppelkegel, um die z-Achse rotierend)


Anhand des zweiten Makros ist ersichtlich, daß die übergebenen Parameter nicht vom selben Typ sein müssen!
Die drei nächsten Bilder sind mit dem "vervielfache"-Makro hergestellt. Durch die Parameterübergabe kann auf einfache Art die Anzahl der Einzelteile festgelegt werden.





































































































Matrix
Mit Hilfe einer Matrix (ein Schema von Zahlen in Reihen und Spalten) können Transformationen von Objekten oder Texturen schnell durchgeführt werden. Für die Syntax gilt:

matrix <m00, m01, m02,
        m10, m11, m12,
        m20, m21, m22,
        m30, m31, m32 >



m00 bis m32 sind dabei die Elemente (Zahlen) einer 4*4 - Matrix, deren 4. Spalte <0,0,0,1> ist.

Ein Punkt P (px / py / pz) wird durch Multiplikation mit der Matrix in einen Punkt Q (qx / qy / qz) transformiert. Dabei gilt die ff. Multiplikationsvorschrift:

 qx = m00 • px + m10 • py + m20 • pz + m30

 qy = m01 • px + m11 • py + m21 • pz + m31

 qz = m02 • px + m12 • py + m22 • pz + m32
 


Durch Matrizenmultiplikation sind z.B.Transformationen wie Scherungvon Körpern entlang einer Koordinatenachse möglich (in der Abb. entlang der x-Achse). 'matrix' kann auch auf Texturen angewendet werden.



So verursacht z.B. die ff. Matrix angewandt auf "MyObject" eine Scherung entlang der y-Achse:

object { MyObject
        matrix < 1, 1, 0,
                 0, 1, 0,
                 0, 0, 1,
                 0, 0, 0 >
        } // end object


Der folgende BLOB ist in x-Achsenrichtung geschert. Erklärungen zu einzelnen Matrixelementen sind im Skript (Mausklick auf´s Bild) als Kommentar eingebunden. Die Scheibe ist aus einer ebenfalls gescherten Kugel entstanden.





































































































Media

Das Schlüsselwort 'media' dient zur Beschreibung von Materieteilchen in Luft oder Wasser: Nebel, Dunst, Rauch, Gas, Feuer, Staub, ... . Die Schlüsselwörter 'halo' und 'atmosphere' aus den früheren Versionen funktionieren nicht mehr, es gibt keine Abwärtskompatibilität. Stattdessen wird nun zwischen 'object media' und 'atmospheric media' unterschieden.

Mit dem Schlüsselwort 'media' wird stichprobenweise die Dichte der Teilchen am Lichtstrahl entlang untersucht, dies geschieht bei einer festgelegten Anzahl von Punkten. Auch Teilmengen von Stichproben werden solange untersucht, bis ein erwünschter Näherungswert erreicht ist. Bei Verwendung von 'media' im interior-Aufruf werden die Stichproben nur im Innern der Objekte entnommen, bei Verwendung von 'atmospheric media' entlang dem Weg des Lichtstrahls von der Kamera bis zum Objekt.

Für die Syntax gilt:

media { [MEDIA_IDENTIFIER] [MEDIA_ITEMS...] }


MEDIA_ITEMS sind:
  1. Anzahl der Intervalle (, die benutzt werden, um entlang des Lichtstrahls Stichproben zu entnehmen) intervals Zahlenwert
  2. minimale und maximale Zahl der Teilchen
    samples Minimalzahl, Maximalzahl
  3. Konfidenzwert (siehe Konfidenzintervall)
    confidence Zahlenwert (z.B. 1/200)
  4. Varianz
    variance Zahlenwert
  5. Bruchteil (ratio): Verhältnis zw. beleuchteten und unbeleuchteten Bezirken
    ratio Zahlenwert
  6. Absorption gibt die Farbe an, die vom Medium absorbiert wird
    absorption Farbe
  7. Emission: die Teilchen emittieren kein Licht, sie sind jedoch auch ohne Beleuchtung sichtbar (in der angegebenen Farbe)
    emission Farbe
  8. Streuung: verschiedene Arten sind möglich:
    isotrope Streuung, Mie haze, Mie murky, Raleigh und Henyey-Greenstein (Schemazeichnungen dazu finden sich in der WinPov-Hilfe): mit Nummer 1 bis 5 durchnumeriert.
    scattering {type, color}
  9. Dichte: hierzu lieber ein Beispiel statt die Syntax allgemein zu definieren:

    density {spherical
            ramp_wave
            turbulence 2.8
            color_map {
              [0.0 color rgb <0, 0, 0>]
              [0.1 color rgb <1, 0, 0>]
              [1.0 color rgb <1, 1, 0>]
            }  //end color_map
          }//end density
    


    Bei den folgenden Bildern wurde 'media' für das Innere einer Kugel benutzt, um Feuer darin darzustellen (Skripte wie immer über Mausklick auf´s jeweilige Bild einsehbar):












































































































    Konfidenzintervall und Varianz:

    Konfidenzintervall:
    Immer dann, wenn Näherungswerte benutzt werden, stellt sich die Frage, wie weit ein solcher Wert vom unbekannten wahren Wert abweichen kann bzw. darf.

    Ergibt sich beispielsweise die Zahl 2,5 als Näherungswert und sei +/- 0,2 die maximal mögliche Abweichung, so weiß man, dass die Werte 2,5+0,2=2,7 und 2,5-0,2=2,3 den unbekannten Wert einschließen.

    Das Intervall mit den Endpunkten 2,3 und 2,7 wird daher Konfidenz- oder Vertrauensintervall genannt.

    Varianz:
    Betrachtet man die beiden Stichproben 1 - 2 - 4 - 5 und 2,7 - 3,0 - 3,1 - 3,2 , so sieht man, dass beide den Mittelwert 3 haben, sich dennoch stark voneinander unterscheiden.

    In der ersten Stichprobe liegen die Werte weiter auseinander und auch weiter vom Mittelwert entfernt. Es ist also eine Maßzahl nötig, die die Abweichung der Stichprobenwerte vom Mittelwert misst. Man betrachtet die Summe der Quadrate der Einzelabweichungen vom Mittelwert, dividiert diese Summe durch n-1 -manchmal auch durch n- und erhält so die Varianz der Stichprobe:



































































































    Das Möbiusband

    m Jahr 1865 veröffentlichte Professor August Ferdinand Möbius das bekannte Möbiusband: Eine 3-dimensionale endliche Fläche mit nur einer Seite und nur einem Rand.



    Es kann mit Hilfe eines um 180° verdreht zusammengeklebten Papierstreifen hergestellt werden. Um es mit PoVRay zu programmieren gehen wir von der Bewegung eines kleinen Zylinder aus. Seine Länge soll der Bandbreite entsprechen, seine Bewegung verläuft in einem Kreis:

    Bei Mausklick auf das Bild ist jeweile das Skript einsehbar.


    Setzt man an jede Position einen Zylinder, so hat man schon fast ein Band, das allerdings nicht um 180° verdreht zusammengefügt ist:



    Es müssen nur noch die Zylinder dichter gesetzt werden:


    Dreht sich nun der in Kreis laufende Zylinder so um seinen Mittelpunkt, dass er sich bei einer Volldrehung um 180° gedreht hat, dann kann die Entstehung des Möbiusbandes aus der Bewegung einer Strecke nachvollzogen werden:



    Als nächstes wird nun wieder an jede Position ein Zylinder gesetzt:



    Wieder wird der Abstand der Zylinder verkleinert, sodass nun ein Möbiusband entsteht:



    Dreht sich die bewegte Strecke beim Durchlaufen des Kreises nicht um das 1-fache von 180°, sondern um ein geradzahliges Vielfaches von 180°, dann entsteht kein Möbiusband, sondern eine doppelseitige Fläche, die man auch zweifarbig einfärben kann:





    Ein bisschen Denkarbeit zum Skript:

    Die Rotation des kleinen Zylinders auf einer Kreislinie wird mit 'vaxis_rotate (Punkt, Drehvektor, Winkel)' und einer Zählschleife realisiert.

     #declare Winkel=0;
     #declare Drehvektor=<0,5,0>;
    
     #while (Winkel<360)
        #declare Mittelpunkt=vaxis_rotate(<12,0,0>,Drehvektor,Winkel)
    
          cylinder{ Mittelpunkt-<0,6,0>,Mittelpunkt+<0,6,0> .25
           pigment {color Silver}
           finish {F_MetalA}
           no_shadow
                }//end cylinder
        #declare Winkel=Winkel+10;
    #end
     


    Lässt man den Winkel um 10° (Differenz) anwachsen, so werden auf einen Vollkreis 360 : 10 = 36 Zylinder gezeichnet. Allgemein gilt also:
    Anzahl der Zylinder = 360 : Differenz.

    Sollen nun die Zylinder um insgesamt 180° um ihren eigenen Mittelpunkt gedreht werden, dann muss dieser Winkel (im Skript Innenwinkel genannt) um jeweils 180 : Zylinderanzahl vergrößert werden.
    Also wird folgende Zeile in die Zählschleife eingebaut:

                                    180
    Innenwinkel = Innenwinkel + --------------
                                 Zylinderzahl
    
                                180
                = Innenwinkel + ---- * Differenz
                                360
    
                = Innenwinkel + 0.5 * Differenz
    


    Nun erhält man das folgende Bild: (Skripte wie immer über Mausklick aufs Bild einsehbar!


    Kein Möbiusband wird durch die folgenden Abbildung dargestellt:



    Zum Abschluss noch das fertige Möbiusband und ein paar Spielereien mit 3-dimensionalen Flächen:



    Eine lesenswerte Seite zum Möbiusband für mathematisch Interessierte findet Ihr hier. Auf dieser Seite wird auch der Zusammenhang zwischen Möbiusband und Kleinscher Flasche dargestellt, auch werden diverse Graphiken von Escher zum Thema 'Möbisuband' hier vorgestellt..
    Das bekannte Escherbild mit den Ameise wird hier animiert.


































































































    Muster

    Diese Seite soll keinen vollständigen Überblick über die Vielfalt von Mustern für Textur, Pigmentierung und Struktur in PovRay geben, nur die hier benutzten Muster werden kurz vorgestellt.



    Alle verwendeten Muster ergeben auch schöne Effekte beim Einsatz der verschiedenen Glas-Texturen.

    Im ersten Bild wurde für die Ebene das Schlüsselwort onion im Kombination mit einer Farbverteilung color_map benutzt. Ebenfalls in Kombination mit color_map wurden die 4 großen Kugeln mit radial,gradient, crackle,spiral1 mit Mustern versehen.

    RADIAL liefert einen streifenförmigen um die positive y-Achse gewundenen Verlauf und kann mit color_map, pigment_map, normal_map, slope_map, texture_map verwendet werden.

    GRADIENT erzeugt mehrere ineinander übergehende Farbbänder in der gewünschten Richtung und kann mit color_map, pigment_map, normal_map, slope_map, texture_map verwendet werden.

    CRACKLE setzt zufällig verteilte Vielecke aneinander und kann mit color_map, pigment_map, normal_map, slope_map, texture_map verwendet werden.


    Mit SPIRAL1 ist im 2. Bild die Kugel gemustert (in der Farbverteilung wurde clear benutzt, sodass die rote innere Kugel durchscheint). Für die sich um die y-Achse windende Spirale kann noch die Anzahl der Windungen festgelegt werden. Es wird mit color_map, pigment_map, normal_map, slope_map, texture_map benutzt.

    Auch im 3.und 5. Bild wurde spiral1 benutzt.








































































































    Möbiusband


































































































    Muster


































































































    Nebel und Regenbogen

    Der Regenbogen ist ein "nebelartiger" Effekt, der durch mehrere Parameter charakterisiert wird:

    1. der Winkel, unter dem man den Regenbogen sieht
    2. das Farbband
    3. die Richtung des einfallenden Lichts
    4. die Teilchendichte
    5. die verwendeten Farben

    Verschiedene Nebelarten sind möglich:
    1. Nebel mit konstanter Dichte
    2. Bodennebel

    Der Nebel mit konstanter Dichte wird durch Entfernung und Farbe beschrieben. distance gibt an, in welcher Entfernung 36,8% des Hintergrundes noch sichtbar ist. Mit turbulence und turb_depth kann der Nebeleffekt realistischer gestaltet werden. Mit dem Schlüsselwort fog_type kann Bodennebel gewählt werden, der durch fog_offset (gibt die Höhe an, unterhalb derer der Nebel konstante Dichte hat) und fog_alt (bestimmt, wie schnell die Nebeldichte gegen Null geht) beschrieben wird.
    Mit verschiedenen Lagen aus Nebel können hübsche Effekte erzielt werden.



    Mit Hilfe der T_Cloud Definitionen aus skies.inc kann man sich auch eigene Nebelschwaden definieren. (Vgl. Skript zum folgenden Bild):






































































































    Newtonsche Ringe sind ein System von konzentrischen, abwechselnd hellen und dunklen Interferenzringen.

    Interferenzen an dünnen Schichten werden beobachtet, wenn Lichtwellen rasch nacheinander auf zwei Grenzflächen zwischen optischen Medien mit verschiedenen Brechzahlen treffen: Die Lichtwellen werden geteilt, die in das nachfolgende Medium eindringende Welle übernimmt einen Teil der Energie, die an der Grenzfläche reflektierte Welle den Rest der Energie. Durch die Veränderung der Brechzahl ändert sich die Wellenlänge an der Grenzfläche sprunghaft.

    Newtonsche Ringe sind z.B. auf Wasser mit einem Ölfilm oder auch auf Seifenblasen beobachtbar.

    In POVRAY werden Newtonsche Ringe durch das Schlüsselwort irid simuliert. Die Voreinstellung für die Wellenlängen der Primärfarben ROT, GRÜN und BLAU ist

     { irid_wavelength  rgb <0.25,0.18,0.14>}


    Für die Syntax gilt:

    finish {
      irid {
          AMOUNT
          thickness FLOAT
          turbulence VECTOR
        }
      }
    


    Beispiel:

    irid { 0.45  thickness 0.25 turbulence 0.35 }


    Die beiden folgenden Bilder enthalten jeweils drei Kugeln mit Newton´schen Ringen.








































































































    Platonische Körper

    Alan St. George, Brite, Architekt im Ruhestand, lebt in Portugal und verfertigt mathematische Skulpturen, u. a. fraktale Variationen über die regulären (platonischen) Körper.

    Tetraeder, Würfel, Oktaeder, Dodekaeder und Ikosaeder
    (4-flach, 6-flach, 8-flach, 12-flach und 20-flach)

    EUKLID

    (In Euklid´s (griechischer Mathematiker, ca. 365 v.Chr. bis ca. 300 v. Chr.) Hauptwerk "Elemente", einer 13-bändigen Abhandlung über die Mathematik (ebene Geometrie, Abbildungen, Eigenschaften von Zahlen, ...), wird die sog. "euklidische Geometrie" formuliert, die bis ins 19. Jahrhundert die Grundlage der Geometrie überhaupt bildetete.
    1482 erschien in Venedig die erste Übersetzung aus dem Arabischen ins Lateinische. Euklid, der vermutlich bei Schülern Platos lernte, unterrichtete in Alexandria Geometrie und gründete dort auch eine Schule für Mathematik. Ihm werden auch verschiedene Entdeckungen aus dem Bereich der Zahlentheorie zugeschrieben.)

    bewies, dass es genau 5 Körper gibt, die derart von regelmäßigen Vielecken begrenzt werden, dass sich in jeder Ecke die gleiche Anzahl von Seitenflächen in gleicher Weise treffen.

    Alan St. George klebt auf diese Körper in bestimmter Anordnung kleinere Körper derselben Art, sodass ein anderer platonischer Körper entsteht.
    Als Beispiel sei vorgestellt, wie aus einem Würfel ein Oktaeder entsteht:

    Wer kennt ihn nicht, Rubic´s Cube? Nach Art dieses Spielzeugs wird zunächst der Ausgangswürfel in 27 kleinere Würfel zerlegt. Nimmt man nun sechs kleine Würfel, deren Kantenlänge der eines der Teilwürfel entspricht und bastelt daraus ein Kreuz, auf das nochmals ein kleiner Würfel gesetzt wird, so kann man dieses Gebilde auf je eine der 6 Seitenflächen von "Rubic´s Cube" setzen, und erhält dann schon näherungsweise ein Oktaeder.

    In der Abbildung sind die aufgesetzten Würfel zur Verdeutlichung etwas verkleinert dargestellt. Der so entstehende Körper hat als Begrenzung lauter kleine Quadrate. Auf jede dieser Quadratflächen setzt man nun wieder das Kreuz mit dem aufgesetzten Würfel, wobei die neue Kantenlänge inzwischen 1/9 der ursprünglichen Kantenlänge beträgt.
    Bastelfreunde haben´s nun schwer: auf unseren Ausgangswürfel müssen sie 36 mittelgroße Würfel aufkleben, 6 mal 21 freie Quadratflächen entstehen, dazu 6 mal 4 freibleibende Quadrate auf unserem Ausgangswürfel: wer hat die Geduld, 150 kleine Würfel zu basteln?
    Auch wer schon bei den 36 halbgroßen Würfeln die Bastelarbeit stoppt, erkennt, dass man auf diese Weise einen Würfel zum Oktaeder fraktalisieren kann.

    Alan St. George hat mit seinen Skulpturen den Übergang von Würfel, Tetraeder und Oktaeder zu jedem anderen dieser drei Körper realisiert. (Wer wissen will, wie´s geht, der lese doch mal in "Spektrum der Wissenschaft", 10/97, nach, falls diese Ausgabe noch irgendwo im Netz aller Netze zu finden ist.)




































































































    Polynome 2. Grades: QUADRIC

    Mit Hilfe von Polynomen 2.ten Grades kann man in POVRAY eine Fläche aus Punkten <x,y,z> definieren. Dabei entstehen Kugeln (Ellipsoide), Kegel, Zylinder, Paraboloide und Hyperboloide:



    Für die Gleichung der Fläche gilt:

    A x2 + B y2 + C z2 + D xy + E xz + F yz + G x + H y + I z + J = 0


    Für die Syntax in POVRAY gilt:

    quadric { <A, B, C>, <D, E, F>, <G, H, I>, J }


    wobei A bis J die Koeffizienten aus obiger Gleichung sind. Für Kugel, Paraboloid, ein- und zweischaliges Hyperboloid sind die zugehörigen Gleichungen in Abbildung 1 angegeben. Die in SHAPES.INC vordefinierten "Quadrics" haben den Koordinatenursprung als Zentrum, ihr Radius ist eine Einheit, d. h. ihre Breite entspricht 2 Längeneinheiten. Durch Variation der Zahlen A bis J entstehen verschieden geformte Körper, die sich auch gut für Animationen eignen. Eigene Flächen lassen sich mit folgender Syntax definieren:

    #declare MeinPoly = quadric {< 4,-4,4>,< 0,0,0>,<0,0,0>,-4}
    


    object{  MeinPoly
          pigment{color SeaGreen}
          finish {brilliance 0.8 phong 3 metallic}
      } //end object







































































































    Polynome 3. Grades: CUBICS

    Für Polynome n-ten Grades gilt die folgende Syntax:

    poly {n, <k 1 ,....,k m >}


    Dabei gibt n den Grad des Polynoms an, die Anzahl m der Koeffizienten k wird nach der folgenden Faustregel berechnet:

    m = (n+1)•(n+2)•(n+3)/6


    Für Polynome 3.ten Grades gibt es 2 Syntax-Möglichkeiten:

    poly {3, <k 1 ,....,k 20 >}


    oder

    cubic { }







































































































    Polynome allgemein

    Polynome sind Ausdrücke der Form

    a0 +a1x +a2x2 +a3x3 + ... + anxn


    Dabei wird n der Grad des Polynoms genannt, die Zahlen ai werden als Koeffizienten bezeichnet. So ergibt bei graphischer Darstellung in der x-y-Ebene

    y =  f(x) = (x - 1)2 - 3 = x2 - 2x  - 2

    beispielsweise die um eine Längeneinheit nach rechts und um drei Längeneinheiten nach unten verschobene Normalparabel

    f(x) = x2


    Im dreidimensionalen Raum ergibt

    x2 + y2 + z2 - 1 = 0

    eine Kugel mit Radius 1 LE,



    x2 + y2 - 1 = 0

    ergibt einen unendlich langen Zylinder entlang der z-Achse mit Radius 1 LE



    (bei Darstellung in der x-y-Ebene erhält man einen Kreis mit Radius 1 LE).



    In PovRay werden Polynome 2.ten Grades durch das Schlüsselwort QUADRIC definiert:

    quadric { <A,B,C>, <D,E,F>, <G,H,I>, J }

    wobei A bis J die folgenden Koeffizienten sind:

    A x2   + B y2   + C z2 +
      D xy    + E xz    + F yz +
      G x     + H y     + I z    + J = 0

    Dabei ist zu beachten, daß die Reihenfolge der einzelnen Summanden anders als bei der Verwendung von poly ist !!! Vergleiche hierzu die Polynomübersicht für Polynome 2-ten bis 7-ten Grades!


    Analog werden CUBIC (Polynom 3.Grades) und QUARTIC (Polynom 4.ten Grades) verwendet. Neben QUADRIC, CUBIC und QUARTIC können auch Polynome höherer Ordnung (bx+cy+dz+e) n definiert werden.

    poly {Grad des Polynoms, <a0, a1, . . . ak>}

    Die Anzahl m = k+1 der Koeffizienten wird durch

    m = (n + 1) • (n + 2) • (n + 3) / 6

    bestimmt, die ai sind die Koeffizienten der einzelnen Summanden. Beim Bildumwandeln kann das Schlüsselwort sturm verwendet werden, um die Genauigkeit zu erhöhen.

    Aus der PovRay-Hilfe geht nicht eindeutig die Reihenfolge der einzelnen Terme hervor. Jedenfalls wird nach absteigenden Potenzen von x geordnet, die Reihenfolge scheint mit der von DERIVE übereinzustimmen. In der Include-Datei SHAPESQ.INC sind einige vordefinierte Polynome.
    Polynome können zusammen mit CSG verwendet werden, auch clipped_by ist erlaubt. Dabei wird das Innere eines Polynoms als Menge aller Punkte definiert, deren Koordinaten beim Einsetzen in die Polynomgleichung einen Wert kleiner als Null ergeben; ergeben ihre Koordinaten beim Einsetzten den Wert Null, so spricht man von der Oberfläche, für Werte größer als Null vom Äußeren. QUADRIC, CUBIC und QUARTIC können mit poly definiert werden. Ebenen können als Polynome ersten Grades angesehen werden:

    plane{<a,b,c>,d}

    entspricht der Gleichung a x + b y + c z = d wobei nach dieser Definition der Normalenvektor, d.h. derjenige Vektor, der senkrecht zur Ebene steht, immer auf das "Äußere" der Ebene weist.





















































































































    Übersicht über die Polynome


      1. (ax + by + cz + d)2 : 12 Summanden
      2. (ax + by + cz + d)3 : 20 Summanden
      3. (ax + by + cz + d)4 : 35 Summanden
      4. (ax + by + cz + d)5 : 56 Summanden
      5. (ax + by + cz + d)6 : 84 Summanden
      6. (ax + by + cz + d)7 : 120 Summanden


    Die jeweiligen Terme wurden mit Derive ausmultipliziert, dann mit der "Suchen/Ersetzen"-Funktion automatisiert in HTML-Code übertragen und sollten aus diesem Grund eigentlich fehlerfrei sein - aber es ist ja bekannt: PC´s haben eine schwarze Seele, drum verlasst euch auf nichts !!!

    (ax + by + cz + d)2 =
    x2a2 + 2xyab + 2xzac + 2xad + y2b2 + 2yzbc + 2ybd + z2c2 + 2zcd + d2

    (ax + by + cz + d)3 =
    x3a3 + 3x2ya2b + 3x2za2c + 3x2a2d + 3xy2ab2 + 6xyzabc + 6xyabd + 3xz2ac2 + 6xzacd + 3xad2 + y3b3 + 3y2zb2c + 3y2b2d + 3yz2bc2 + 6yzbcd + 3ybd2 + z3c3 + 3z2c2d + 3zcd2 + d3

    (ax + by + cz + d)4 =
    x4a4 + 4x3ya3b + 4x3za3c + 4x3a3d + 6x2y2a2b2 + 12x2yza2bc + 12x2ya2bd + 6x2z2a2c2 + 12x2za2cd + 6x2a2d2 + 4xy3ab3 + 12xy2zab2c + 12xy2ab2d + 12xyz2abc2 + 24xyzabcd + 12xyabd2 + 4xz3ac3 + 12xz2ac2d + 12xzacd2 + 4xad3 + y4b4 + 4y3zb3c + 4y3b3d + 6y2z2b2c2 + 12y2zb2cd + 6y2b2d2 + 4yz3bc3 + 12yz2bc2d + 12yzbcd2 + 4ybd3 + z4c4 + 4z3c3d + 6z2c2d2 + 4zcd3 + d4

    (ax + by + cz + d)5 =
    x5a5 + 5x4ya4b + 5x4za4c + 5x4a4d + 10x3y2a3b2 + 20x3yza3bc + 20x3ya3bd + 10x3z2a3c2 + 20x3za3cd + 10x3a3d2 + 10x2y3a2b3 + 30x2y2za2b2c + 30x2y2a2b2d + 30x2yz2a2bc2 + 60x2yza2bcd + 30x2ya2bd2 + 10x2z3a2c3 + 30x2z2a2c2d + 30x2za2cd2 + 10x2a2d3 + 5xy4ab4 + 20xy3zab3c + 20xy3ab3d + 30xy2z2ab2c2 + 60xy2zab2cd + 30xy2ab2d2 + 20xyz3abc3 + 60xyz2abc2d + 60xyzabcd2 + 20xyabd3 + 5xz4ac4 + 20xz3ac3d + 30xz2ac2d2 + 20xzacd3 + 5xad4 + y5b5 + 5y4zb4c + 5y4b4d + 10y3z2b3c2 + 20y3zb3cd + 10y3b3d2 + 10y2z3b2c3 + 30y2z2b2c2d + 30y2zb2cd2 + 10y2b2d3 + 5yz4bc4 + 20yz3bc3d + 30yz2bc2d2 + 20yzbcd3 + 5ybd4 + z5c5 + 5z4c4d + 10z3c3d2 + 10z2c2d3 + 5zcd4 + d5

    (ax + by + cz + d)6 =
    x6a6 + 6x5ya5b + 6x5za5c + 6x5a5d + 15x4y2a4b2 + 30x4yza4bc + 30x4ya4bd + 15x4z2a4c2 + 30x4za4cd + 15x4a4d2 + 20x3y3a3b3 + 60x3y2za3b2c + 60x3y2a3b2d + 60x3yz2a3bc2 + 120x3yza3bcd + 60x3ya3bd2 + 20x3z3a3c3 + 60x3z2a3c2d + 60x3za3cd2 + 20x3a3d3 + 15x2y4a2b4 + 60x2y3za2b3c + 60x2y3a2b3d + 90x2y2z2a2b2c2 + 180x2y2za2b2cd + 90x2y2a2b2d2 + 60x2yz3a2bc3 + 180x2yz2a2bc2d + 180x2yza2bcd2 + 60x2ya2bd3 + 15x2z4a2c4 + 60x2z3a2c3d + 90x2z2a2c2d2 + 60x2za2cd3 + 15x2a2d4 + 6xy5ab5 + 30xy4zab4c + 30xy4ab4d + 60xy3z2ab3c2 + 120xy3zab3cd + 60xy3ab3d2 + 60xy2z3ab2c3 + 180xy2z2ab2c2d + 180xy2zab2cd2 + 60xy2ab2d3 + 30xyz4abc4 + 120xyz3abc3d + 180xyz2abc2d2 + 120xyzabcd3 + 30xyabd4 + 6xz5ac5 + 30xz4ac4d + 60xz3ac3d2 + 60xz2ac2d3 + 30xzacd4 + 6xad5 + y6b6 + 6y5zb5c + 6y5b5d + 15y4z2b4c2 + 30y4zb4cd + 15y4b4d2 + 20y3z3b3c3 + 60y3z2b3c2d + 60y3zb3cd2 + 20y3b3d3 + 15y2z4b2c4 + 60y2z3b2c3d + 90y2z2b2c2d2 + 60y2zb2cd3 + 15y2b2d4 + 6yz5bc5 + 30yz4bc4d + 60yz3bc3d2 + 60yz2bc2d3 + 30yzbcd4 + 6ybd5 + z6c6 + 6z5c5d + 15z4c4d2 + 20z3c3d3 + 15z2c2d4 + 6zcd5 + d6

    (ax + by + cz + d)7 =
    x7a7 + 7x6ya6b + 7x6za6c + 7x6a6d + 21x5y2a5b2 + 42x5yza5bc + 42x5ya5bd + 21x5z2a5c2 + 42x5za5cd + 21x5a5d2 + 35x4y3a4b3 + 105x4y2za4b2c + 105x4y2a4b2d + 105x4yz2a4bc2 + 210x4yza4bcd + 105x4ya4bd2 + 35x4z3a4c3 + 105x4z2a4c2d + 105x4za4cd2 + 35x4a4d3 + 35x3y4a3b4 + 140x3y3za3b3c + 140x3y3a3b3d + 210x3y2z2a3b2c2 + 420x3y2za3b2cd + 210x3y2a3b2d2 + 140x3yz3a3bc3 + 420x3yz2a3bc2d + 420x3yza3bcd2 + 140x3ya3bd3 + 35x3z4a3c4 + 140x3z3a3c3d + 210x3z2a3c2d2 + 140x3za3cd3 + 35x3a3d4 + 21x2y5a2b5 + 105x2y4za2b4c + 105x2y4a2b4d + 210x2y3z2a2b3c2 + 420x2y3za2b3cd + 210x2y3a2b3d2 + 210x2y2z3a2b2c3 + 630x2y2z2a2b2c2d + 630x2y2za2b2cd2 + 210x2y2a2b2d3 + 105x2yz4a2bc4 + 420x2yz3a2bc3d + 630x2yz2a2bc2d2 + 420x2yza2bcd3 + 105x2ya2bd4 + 21x2z5a2c5 + 105x2z4a2c4d + 210x2z3a2c3d2 + 210x2z2a2c2d3 + 105x2za2cd4 + 21x2a2d5 + 7xy6ab6 + 42xy5zab5c + 42xy5ab5d + 105xy4z2ab4c2 + 210xy4zab4cd + 105xy4ab4d2 + 140xy3z3ab3c3 + 420xy3z2ab3c2d + 420xy3zab3cd2 + 140xy3ab3d3 + 105xy2z4ab2c4 + 420xy2z3ab2c3d + 630xy2z2ab2c2d2 + 420xy2zab2cd3 + 105xy2ab2d4 + 42xyz5abc5 + 210xyz4abc4d + 420xyz3abc3d2 + 420xyz2abc2d3 + 210xyzabcd4 + 42xyabd5 + 7xz6ac6 + 42xz5ac5d + 105xz4ac4d2 + 140xz3ac3d3 + 105xz2ac2d4 + 42xzacd5 + 7xad6 + y7b7 + 7y6zb6c + 7y6b6d + 21y5z2b5c2 + 42y5zb5cd + 21y5b5d2 + 35y4z3b4c3 + 105y4z2b4c2d + 105y4zb4cd2 + 35y4b4d3 + 35y3z4b3c4 + 140y3z3b3c3d + 210y3z2b3c2d2 + 140y3zb3cd3 + 35y3b3d4 + 21y2z5b2c5 + 105y2z4b2c4d + 210y2z3b2c3d2 + 210y2z2b2c2d3 + 105y2zb2cd4 + 21y2b2d5 + 7yz6bc6 + 42yz5bc5d~ + 105yz4bc4d2 + 140yz3bc3d3 + 105yz2bc2d4 + 42yzbcd5 + 7~ ybd6 + z7c7 + 7z6c6d + 21z5c5d2 + 35z4c4d3 + 35z3c3d4 + 21z2c2d5 + 7zcd6 + d7



© 2010 Asti PoVRay-Site Mathematische Streiflichter Algorithmische Kunst