Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen
Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen
Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
4.1. Benutzung der Schnittstelle<br />
4.1.2. E<strong>in</strong> komplexes Beispiel: E<strong>in</strong>e Funktion als <strong>3D</strong>-Fläche<br />
Als zweites Beispiel soll e<strong>in</strong>e Funktion f(x, y) :R 2 æ R dargestellt werden. Dazu<br />
muss e<strong>in</strong> Dreiecksgitter erstellt werden. Für die Funktion:<br />
gilt:<br />
f(x, y) = s<strong>in</strong>( 4<br />
9 x2 )+ y2<br />
9<br />
Q<br />
Òf (x, y) = a<br />
ˆf<br />
ˆx<br />
ˆf<br />
ˆy<br />
R<br />
Q<br />
b = a<br />
cos( 4<br />
9 x2 ) · 8<br />
9 x<br />
2<br />
9 y<br />
Bildet man daraus e<strong>in</strong>e Fläche im R3 , um diese darzustellen, ist der Normalenvektor<br />
jedes Punkts:<br />
˛n(x, y) = ˛ñ(x, y)<br />
||˛ñ(x, y)|| mit Q R<br />
c<br />
˛ñ(x, y) = c<br />
a<br />
d<br />
b<br />
R<br />
b<br />
≠ ˆf<br />
ˆx<br />
≠ ˆf<br />
ˆy<br />
1<br />
Dies s<strong>in</strong>d alle Informationen, die zur Darstellung benötigt werden. Diese Funktionen<br />
werden entsprechend als C Funktionen implementiert, sodass sie im Rahmen der<br />
Visualisierung verwendet werden können.<br />
5 float f(float x, float y) {<br />
6 return s<strong>in</strong>(x x/2.25) + y y/9.0;<br />
7 }<br />
8<br />
9 float dfdx( float x, float y) {<br />
10 return cos(x x/2.25) 2 x/2.25;<br />
11 }<br />
12<br />
13 float dfdy( float x, float y) {<br />
14 return 2 y/9.0;<br />
15 }<br />
16<br />
17 float normalize( float vec) {<br />
18 float tmp = 0 ;<br />
19 <strong>in</strong>t i;<br />
20 for (i = 0; i < 3; i++) tmp += vec[i] vec [ i ];<br />
21 tmp = s q r t (tmp) ;<br />
22 for (i = 0; i < 3; i++) vec[i]/=tmp;<br />
23 return vec ;<br />
24 }<br />
25<br />
26 void transform( <strong>in</strong>t x, <strong>in</strong>t y, float new_x , float new_y) {<br />
27 new_x = ( x≠50) /10.0;<br />
28 new_y = ( y≠5) ;<br />
29 }<br />
List<strong>in</strong>g 4.5: f(x, y), ˆf<br />
ˆx<br />
ˆf<br />
, , e<strong>in</strong>e Funktion zur Normalisierung <strong>von</strong> Vektoren und e<strong>in</strong>e<br />
ˆy<br />
Funktion zur Transformation der Intervalle [0; 100] für x und [0;10] für y<br />
auf [-5;5]<br />
33