Zweifach Parametrisierte Geometrie: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)
K (Tippfehler im Quelltext korrigiert)
 
Zeile 8: Zeile 8:
 
var
 
var
 
   i,j: Integer;
 
   i,j: Integer;
   theata1, theta2, omega: Double;
+
   theta1, theta2, omega: Double;
 
begin
 
begin
 
   for j:=0 to n do
 
   for j:=0 to n do
 
   begin
 
   begin
 
     theta1 := ((e1-a1) / n)*j + a1;
 
     theta1 := ((e1-a1) / n)*j + a1;
     theta1 := ((e1-a1) / n)*(j+1) + a1;
+
     theta2 := ((e1-a1) / n)*(j+1) + a1;
 
    
 
    
 
     glBegin(GL_QUAD_STRIP);
 
     glBegin(GL_QUAD_STRIP);
 
       for i:=0 to n do
 
       for i:=0 to n do
 
       begin
 
       begin
         omega:= ((e2-a1)/n)*i + a2;
+
         omega:= ((e2-a2)/n)*i + a2;
 
    
 
    
 
         glTexCoord2f(i/n,j/n);
 
         glTexCoord2f(i/n,j/n);
Zeile 24: Zeile 24:
 
   
 
   
 
         glTexCoord2f(i/n,2*j/n);
 
         glTexCoord2f(i/n,2*j/n);
         glVertex3f(Phi(theta1, omega));
+
         glVertex3f(Phi(theta2, omega));
 
       end;
 
       end;
 
     glEnd;
 
     glEnd;

Aktuelle Version vom 2. Oktober 2010, 13:43 Uhr

Parametrisierte Geometrie

Viele mathematische, geometrische Objekte lassen sich leicht über eine Anzahl Parameter beschreiben, so dass man sie sehr leicht in Polygone oder sonstige Flächenstücke zerlegen kann. Für gewöhnlich ist im 3-dimensionalen Raum das Objekt durch 2 Parameter beschrieben, man hat also eine Funktion φ auf 2 Intervallen I1=[a1,e1], I2=[a2,e2] im 3D-Raum:

φ: I1xI2 -> R3

Setzt man also in φ 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 durch 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;
  theta1, theta2, omega: Double;
begin
  for j:=0 to n do
  begin
    theta1 := ((e1-a1) / n)*j + a1;
    theta2 := ((e1-a1) / n)*(j+1) + a1;
  
    glBegin(GL_QUAD_STRIP);
      for i:=0 to n do
      begin
        omega:= ((e2-a2)/n)*i + a2;
  
        glTexCoord2f(i/n,j/n);
        glVertex3f(Phi(theta1, omega));
 
        glTexCoord2f(i/n,2*j/n);
        glVertex3f(Phi(theta2, omega));
      end;
    glEnd;
  end;
end;

Beispiele

Kugel

I1 := [0,π], I2 := [-π, π]
(theta, omega) -> φ(theta, omega) := 
                  (sin(theta)*cos(omega); sin(theta)*sin(omega); cos(theta) )

Torus

I1 := I2 := [0,2*π]
0 <= r,R 
(theta, omega) -> φ(theta, omega) := 
                  ((R + r*cos(theta))*cos(omega); (R + r*cos(theta))*sin(omega); r*sin(theta))