05.10.2013 Aufrufe

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

Integration von 3D-Visualisierungstechniken in 2D-Grafiksystemen

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!