Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
lehrkraefte:blc:math:povray:lektion5 [2017/05/31 11:11] Ivo Blöchliger created |
lehrkraefte:blc:math:povray:lektion5 [2017/06/02 11:07] (current) Ivo Blöchliger [Aufgabe 6: Kochschneeflocke] |
||
---|---|---|---|
Line 65: | Line 65: | ||
</ | </ | ||
+ | ==== Aufgabe 1 ==== | ||
+ | Die Funktion im oberen Code ist $f(x)=x^2-2$. Ändern Sie die Funktion auf folgende Funktionen ab: | ||
+ | * $f(x) = -\frac{1}{2}x^2+1$ | ||
+ | * $f(x) = \sin(x)$ //Die Funktion sin ist in POV-Ray definiert (Argument in Radiant).// | ||
+ | * $f(x) = |x|$ // Die Betragsfunktion in POV-Ray ist abs(...) (absolute value).// | ||
+ | * $f(x) = \sqrt{x}$ | ||
+ | * Gleichzeitig beide Funktionen $f(x)=\sqrt{1-(1-|x|)^2}$ und $g(x)=-3\sqrt{1-\sqrt{\frac{|x|}{2}}}$. | ||
+ | |||
+ | ==== Aufgabe 2: " | ||
+ | Verbinden Sie jeweils zwei benachbarte Kugeln mit einem Zylinder mit gleichem Radius. So entsteht eine durchgehende Linie. | ||
+ | |||
+ | Geben Sie die Datei auf SharePoint ab: https:// | ||
+ | |||
+ | |||
+ | Alternative mit weniger Rechenfehler: | ||
+ | <code povray> | ||
+ | #declare starty=-2; | ||
+ | #declare endy=2; | ||
+ | #declare n=50; | ||
+ | #declare dy=(endy-starty)/ | ||
+ | #declare i=0; | ||
+ | #while (i< | ||
+ | #declare yy=starty+i*dy; | ||
+ | sphere { <0,yy, meinf(yy)>, | ||
+ | pigment { color rgb x } | ||
+ | } | ||
+ | #declare i=i+1; | ||
+ | #end | ||
+ | </ | ||
+ | ==== Aufgabe 3: $z=f(x,y)$ ==== | ||
+ | Eine Funktion kann auch mehr als eine Eingabe haben. In dieser Aufgabe betrachten wir eine Art Landschaft, wobei die Höhe $z$ aus den $x$- und $y$-Koordinaten berechnet wird. Im folgenden Code wird die Funktion $f(x)=\frac{1}{2}\left(x^2+y^2\right)$ abgebildet: | ||
+ | <code povray fxy.pov> | ||
+ | // Kamera | ||
+ | camera { | ||
+ | sky < | ||
+ | right < | ||
+ | location < | ||
+ | look_at <0, 0, 0> // Blickrichtung (erscheint im Bildmittelpunkt) | ||
+ | angle 35 // Oeffnungswinkel der Kamera | ||
+ | } | ||
+ | |||
+ | // Lichtquellen | ||
+ | light_source { | ||
+ | < | ||
+ | color rgb < | ||
+ | } | ||
+ | light_source { | ||
+ | < | ||
+ | color rgb < | ||
+ | } | ||
+ | |||
+ | // xy-Ebene | ||
+ | plane {z,0 | ||
+ | pigment { checker color rgb 0.2 color rgb 0.9 } | ||
+ | } | ||
+ | |||
+ | #macro hoehe(xx, | ||
+ | 0.5*(xx*xx+yy*yy) | ||
+ | #end | ||
+ | |||
+ | #declare startx = -1; | ||
+ | #declare endx = 1; | ||
+ | #declare starty=-1; | ||
+ | #declare endy=1; | ||
+ | #declare n=20; | ||
+ | #declare dx=(endx-startx)/ | ||
+ | #declare dy=(endy-starty)/ | ||
+ | |||
+ | #declare xx = startx; | ||
+ | #while (xx< | ||
+ | #declare yy = starty; | ||
+ | #while (yy< | ||
+ | sphere { < | ||
+ | pigment { color rgb x } | ||
+ | } | ||
+ | #declare yy=yy+dy; | ||
+ | #end | ||
+ | #declare xx=xx+dx; | ||
+ | #end | ||
+ | </ | ||
+ | Rendern und studieren Sie den Code. Stellen Sie Fragen, wenn Sie etwas nicht verstehen. | ||
+ | |||
+ | ==== Aufgabe 4 ==== | ||
+ | Ändern Sie die Funktion hoehe ab (und passen Sie evtl. den Bereich und die Kamera an), z.B. | ||
+ | * $f(x,y) = \sin(x)+\sin(y)+2$ | ||
+ | * $f(x,y) = \cos\left(\sqrt{x^2+y^2}\right)+1$ | ||
+ | * $f(x,y) = 2^{-\sqrt{x^2+y^2}}\cos\left(\sqrt{x^2+y^2}\right)+1$ | ||
+ | * $f(x,y) = \cos(x)\cdot \cos(y)+1$ | ||
+ | |||
+ | ==== Aufgabe 5 ==== | ||
+ | Fügen Sie zwischen benachbarten Kugeln Zylinder mit dem selben Radius ein. | ||
+ | |||
+ | ==== Aufgabe 6: Kochschneeflocke ==== | ||
+ | **Studieren** Sie folgenden Text: | ||
+ | |||
+ | Funktionen können beliebig viele Eingaben verarbeiten und beliebige Ausgaben produzieren. Funktionen können sich sogar selbst wieder zur Berechnung des Resultats gebrauchen. | ||
+ | |||
+ | Wir werden eine Funktion (#macro) **koch** definieren. Als Eingabe benötigt die Funktion 3 Dinge: Startpunkt $A$ und Endpunkt $B$ der Strecke und die Angabe, wieviel mal die Strecke noch unterteilt werden soll (d.h. die Anzahl Rekursionen (Selbstaufrufe)). | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Die Funktion ist wie folgt aufgebaut: | ||
+ | |||
+ | | ||
+ | wenn r=0: | ||
+ | | ||
+ | sonst | ||
+ | 3 Zwischenpunkte P1, P2, P3 aus A,B berechnen | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | ende wenn | ||
+ | ende Funktion koch | ||
+ | |||
+ | Dazu definieren wir den Vektor $\vec v = \vec{AB}$ und den dazu rechtwinkligen Vektor $\vec u$. Kopieren Sie folgendes Code-Skelett: | ||
+ | <code povray> | ||
+ | #macro kochKurve(a, | ||
+ | #if (rekursionen=0) | ||
+ | // TODO: Hier die Strecke zeichen, z.B. mit einer Kugel mit Zentrum a und einem Zylinder von a nach b | ||
+ | // Nur die Objekte ohne Farbe definieren. | ||
+ | #else | ||
+ | #local vv = ??; // TODO: hier den Vektor ab berechnen | ||
+ | #local uu = <-vv.y, vv.x, 0>; | ||
+ | #local p1 = ??; // TODO: Aus a und vv den Punkt p1 berechnen. | ||
+ | #local p2 = ??; // TODO: p2 berechnen | ||
+ | #local p3 = ??; // TODO: p3 berechnen | ||
+ | kochKurve(a, | ||
+ | // Hier die weiteren Segmente zeichnen | ||
+ | #end | ||
+ | #end | ||
+ | |||
+ | // Zeichnen der Kurve: | ||
+ | // kochKurve liefert einzelne Objekte. Die werden in einer union zusammengefasst, | ||
+ | // alle eine gemeinsame Farbe und evtl. Transformationen erhalten können. | ||
+ | union { | ||
+ | kochKurve(< | ||
+ | pigment { color rgb x } | ||
+ | } | ||
+ | |||
+ | </ |