Upload
johannes-diemke
View
242
Download
4
Embed Size (px)
Citation preview
C A R LV O N
O S S I E T Z K Y
Torus-Knoten
Johannes Diemke
Ubung im Modul OpenGL mit JavaWintersemester 2010/2011
Torus-Knoten
(p, q)-Torus-Knoten
Wird im R3 durch eine Raumkurve r(ϕ) beschrieben
p und q mussen relativ prim zueinander sein
I Zwei naturliche Zahlen sind teilerfremd oder relativ prim, wenn eskeine naturliche Zahl außer der Eins gibt, die beide Zahlen teilt
I Zwei Zahlen a und b sind dann teilerfremd, wenn ihr ggT (a, b) = 1 ist
r(ϕ) =
(cos(qϕ) + 2) · cos(pϕ)(cos(qϕ) + 2) · sin(pϕ)
sin(qϕ)
, 0 ≤ ϕ ≤ 2π
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/18
Torus-Knoten
Hulle entlang einer Raumkurve
1 Berechnen des Frenet-Rahmen (Dreibein)
2 Aufspannen von Polygonen
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/18
Torus-Knoten
Hulle entlang einer Raumkurve (Forts.)
Beispielhaft anhand folgender Raumkurve
r(ϕ) =
0.5 · (2 + sin(qϕ)) · cos(pϕ)0.5 · (2 + sin(qϕ)) · cos(qϕ)0.5 · (2 + sin(qϕ)) · sin(pϕ)
, 0 ≤ ϕ ≤ 2π
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/18
Torus-Knoten
Frenet-Rahmen
Bildet eine Orthonormalbasis
Ist an jedem Punkt der Kurve gesondert definiert (begleitendesDreibein)
Idee: Entlang der Raumkurve Ringe in der von der Einheitsnormaleund Einheitsbinormale aufgespannten Ebene zeichnen
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/18
Torus-Knoten
Frenet-Rahmen (Forts.)
Definition (Frenet-Rahmen)
Sei I ⊂ R3 ein Intervall und sei r : I → R3 eine Raumkurve von der wirannehmen, dass sie differenzierbar und frei von Wendepunkten ist. Dasdurch die Raumkurve gleitende Dreibein, auch Frenet-Rahmen genannt,ist eine Orthonormalbasis bestehend aus den drei Vektoren T (ϕ), N(ϕ)und B(ϕ) definiert durch:
T (ϕ) =r ′(ϕ)
‖r ′(ϕ)‖, N(ϕ) =
T ′(ϕ)
‖T ′(ϕ)‖, B(ϕ) = T (ϕ)× N(ϕ)
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/18
Torus-Knoten
Frenet-Rahmen (Forts.)
Berechnen der beiden Ableitungen r ′(ϕ) und r ′′(ϕ)
r ′(ϕ) =
0.5 cos(qϕ)q cos(pϕ)− 0.5(2 + sin(qϕ)) sin(pϕ)p0.5 cos(qϕ)2q − 0.5(2 + sin(qϕ)) sin(qϕ)q
0.5 cos(qϕ)q sin(pϕ) + 0.5(2 + sin(qϕ)) cos(pϕ)p
r ′′(ϕ) =
−0.5 sin(qϕ)q2 cos(pϕ)− cos(qϕ)q sin(pϕ)p − 0.5(2 + sin(qϕ)) cos(pϕ)p2
−1.5 cos(qϕ)q2 sin(qϕ)− 0.5(2 + sin(qϕ)) cos(qt)q2
−0.5 sin(qϕ)q2 sin(pϕ) + cos(qϕ)q cos(pϕ)p − 0.5(2 + sin(qϕ)) sin(pϕ)p2
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/18
Torus-Knoten
Aufspannen von Ringen
Aufspannen von Ringen in der von der Einheitsnormale undEinheitsbinormale aufgespannten Ebene
gl.glBegin(GL2.GL_LINE_LOOP);
for(int j=0; j < segments; j++) {
x = radius * Math.cos(2 * PI / segments * j));
y = radius * Math.sin(2 * PI / segments * j));
// Affine Transformation
point = normal(t)*x + binormal(t)*y + curve(t);
gl.glVertex3f(point.x, point.y, point.z);
}
gl.glEnd();
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/18
Torus-Knoten
Aufspannen von Ringen (Forts.)
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/18
Torus-Knoten
Aufspannen von Polygonen
Aufspannen von Polygonen zwischen den Ringen und Berechnungder Vertex-Normalen
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/18
Torus-Knoten
Zwischenstand
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/18
Torus-Knoten
Zwischenstand (Forts.)
Die Normale und Binormale machen sprunghaft180-Grad-Drehungen in den Wendepunkten der Kurve
Tangente und Normale sind in den Wendepunkten parallel
Losung
Dreibein nicht uber zweite Ableitung konstruieren
Approximation uber beliebigen Vektor, der nie parallel ist
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/18
Torus-Knoten
Approximation
Vektor muss entsprechend der Raumkurve gewahlt werden, damit ernie parallel zur Tangente istWeiterhin kann im selben Zug auch gleich die Tangente selbstapproximiert werden → forward difference
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/18
Torus-Knoten
Approximation (Forts.)
symbolische vs. numerische Ableitung (Forward Difference):
point1 := curve(t);
point2 := curve(t + delta);
unitTangent := normalize(point2 - point1);
unitNormal := crossProduct(unitTangent, vec3(0, 1, 0));
unitBinormal := crossProduct(unitTangent, unitNormal);
oder alternativ (Central Difference):
point1 := curve(t - delta/2);
point2 := curve(t + delta/2);
unitTangent := normalize(point2 - point1);
unitNormal := crossProduct(unitTangent, vec3(0, 1, 0));
unitBinormal := crossProduct(unitTangent, unitNormal);
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/18
Torus-Knoten
Ergebnis
(2, 3)- und (5, 3)-Torus-Knoten mit Flat-Shading
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/18
Torus-Knoten
Ergebnis (Forts.)
(2, 3)-Torus-Knoten mit Phong-Shading und Schatten
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/18
Literatur
� Dave ShreinerOpenGL Programming Guidehttp://www.opengl-redbook.com/
� Richard S. Wright, Benjamin Lipchak und Nicholas HaemelOpenGL SuperBibelhttp://www.starstonesoftware.com/OpenGL/
� Randi J. RostOpenGL Shading Languagehttp://www.3dshaders.com/
� Tomas Akenine-Moller, Eric Haines und Naty HoffmanReal-Time Renderinghttp://www.realtimerendering.com/
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/18
Literatur
� Edward AngelInteractive Computer Graphicshttp://www.cs.unm.edu/˜angel/
� Gerald Farin und Dianne HansfordPractical Linear Algebrahttp://www.farinhansford.com/books/pla/
� Fletcher Dunn und Ian Parberry3D Math Primer for Graphics and Game Developmentwww.gamemath.com/
Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/18