Zweifach Parametrisierte Geometrie
Aus DGL Wiki
Version vom 12. Oktober 2006, 11:52 Uhr von Nico Michaelis (Diskussion | Beiträge) (Superposition für ^3)
Inhaltsverzeichnis
Parametrisierte Geometrie
Viele mathematische, geometrische Objekte lassen sich leicht über eine Anzahl Parameter beschreiben, so daß man sie sehr leicht in Polygone oder sonstige Flächenstücke zerlegen kann. Für gewöhlich ist im 3-Dimensionalen das Objekt durch 2 Parameter beschrieben, man hat also eine Funktion Phi auf 2 Intervallen I1=[a1,e1], I2=[a2,e2] in den 3D-Raum:
Phi: I1xI2 -> R3
Setzt man also in Phi werte aus I1xI2 ein, so bekommt man einen Punkt auf der Oberfläche des Objektes zurück. Geht man nun systematisch diskrete Punkte auf der Oberfläche und fasst sie zu polygonen zusammen, so erhält man das entsprechende Polygonmodell:
procedure CreateObject(n: Integer; Phi : Parametrisierung; a1, e1, a2, e2 : Double); var i,j: Integer; theata1, theta2, omega: Double; begin for j:=0 to n do begin theta1 := ((e1-a1) / n)*j + a1; theta1 := ((e1-a1) / n)*(j+1) + a1; glBegin(GL_QUAD_STRIP); for i:=0 to n do begin omega:= ((e2-a1)/n)*i + a2; glTexCoord2f(i/n,j/n); glVertex3f(Phi(theta1, omega)); glTexCoord2f(i/n,2*j/n); glVertex3f(Phi(theta1, omega)); end; glEnd; end; end;
Beispiele
Kugel
I1 := [0,Pi], I2 := [-Pi, Pi] (theta, omega) -> Phi(theta, omega) := (sin(theta)*cos(omega); sin(theta)*sin(omega); cos(theta) )
Torus
I1 := I2 := [0,2*Pi] 0 <= r,R (theta, omega) -> Phi(theta, omega) := ((R + r*cos(theta))*cos(omega); (R + r*cos(theta))*sin(omega); r*sin(theta))