Zweifach Parametrisierte Geometrie: Unterschied zwischen den Versionen
Aus DGL Wiki
K (→Parametrisierte Geometrie: Math. Symb) |
K (Tippfehler im Quelltext korrigiert) |
||
(5 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
== Parametrisierte Geometrie == | == Parametrisierte Geometrie == | ||
− | Viele mathematische, geometrische Objekte lassen sich leicht über eine Anzahl Parameter beschreiben, so | + | 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 -> R<sup>3</sup> | φ: I1xI2 -> R<sup>3</sup> | ||
− | 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 und fasst sie zu | + | 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: |
− | + | <source lang="pascal"> | |
− | + | 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;</source> | |
=== Beispiele === | === Beispiele === | ||
==== Kugel ==== | ==== Kugel ==== | ||
− | I1 := [0, | + | I1 := [0,π], I2 := [-π, π] |
(theta, omega) -> φ(theta, omega) := | (theta, omega) -> φ(theta, omega) := | ||
(sin(theta)*cos(omega); sin(theta)*sin(omega); cos(theta) ) | (sin(theta)*cos(omega); sin(theta)*sin(omega); cos(theta) ) | ||
+ | |||
==== Torus ==== | ==== Torus ==== | ||
I1 := I2 := [0,2*π] | I1 := I2 := [0,2*π] | ||
Zeile 39: | Zeile 41: | ||
(theta, omega) -> φ(theta, omega) := | (theta, omega) -> φ(theta, omega) := | ||
((R + r*cos(theta))*cos(omega); (R + r*cos(theta))*sin(omega); r*sin(theta)) | ((R + r*cos(theta))*cos(omega); (R + r*cos(theta))*sin(omega); r*sin(theta)) | ||
+ | |||
+ | [[Kategorie:Technik_oder_Algorithmus]] |
Aktuelle Version vom 2. Oktober 2010, 13:43 Uhr
Inhaltsverzeichnis
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))