Theorie und Praxis geometrischer Algorithmen Conics Von Marc Meier Conics • Einfache Conics • • • • • • Geradenpaar Ellipse Parabel, Hyperbel Ausgeartete Conics Allgemeiner Kegelschnitt Conic Bögen • Schnitt zweier Conics • • • • • Schnitt Sweep Line Algorithmus Multiplizität des Schnittes compare_xy Weitere Prädikate Doppelkegel Wie kann eine 2-dimensionale Ebene diesen Doppelkegel schneiden? Conics Geradenpaar • Parallele Geraden • Identische Geraden • Schneidende Geraden C ( x, y ) ( x y 1)( x y 1) C ( x, y ) ( x y 1)( x y 1) C ( x, y ) ( x y 1)( 2 x y 1) Ellipse Kreis Ellipse Ellipse (2) Ellipsenformeln (Normalform): Sei a die Hauptachse der Ellipse x² y ² 1 0 a ² b² Diese Formel beschreibt eine Ellipse die breiter als hoch ist x² y ² 1 0 b² a ² Diese Formel beschreibt eine Ellipse die höher als breit ist Wir betrachten Ellipsengleichungen der Form: C ( x, y ) x ² 2 y ² 1 Hyperbel Parabel Hyperbel Parabel Wir betrachten Parabeln der Form: C(x, y)=x²+4y²+4xy-y oder Normalform Sonderform nicht x-monoton Hyperbel (2) Hyperbelformeln (Normalform): Sei a>b x² y ² 1 0 a ² b² x² y ² 1 0 b² a ² Wir betrachten Hyperbelgleichungen der Form: C ( x, y ) x ² y ² 1 Hyperbel (Sonderform) Die Hyperbel hat bei (0,0) eine Polstelle. Ausgeartete Conics Leere Menge: Gleichung der Form C(x, y)= x² + y² +1 Ein einzelner Punkt: C(x, y) = x² + y² Wir betrachten im folgenden Ellipsen, Hyperbeln und Parabeln da weder Geraden noch die ausgearteten Formen mathematisch interessant sind. Allgemeine Formel ax ² by ² 2cxy 2dx 2ey f 0 Diese Formel kann umgeschrieben werden Setze: a ( x) b, b( x) 2cx 2e, a(x)*y²+b(x)*y+c(x)=0 c( x) ax ² 2dx f nach y auflösen ergibt: oder y b( x) b( x)² 4a ( x)c( x) falls b 2a ( x ) y c( x) falls b=0 und b(x) b( x ) 0 0 Algebraische Zahlen Wir bezeichnen eine algebraische Zahl als Wurzelausdruck, wenn sie von folgender Form ist: wobei Q Wir stellen algebraische Zahlen x entweder als Wurzelausdrücke oder als Tripel (P,l,r) dar.(siehe 6.5.) Conic Bögen C C1 C0 x1 x2 Conic C zerfällt in seine Bögen C0 und C1 Bögen C0 und C1 sind Funktionen in x, d.h. C1(x) ist der YWert des oberen Bogens von C an der Stelle x. Schnitt zweier Conics Gegeben: Conics C und D, dann gilt: x ( x, y) f g x R( f , g , y) 0 f und g sind die Funktionen die C und D berechnen und R ist die Resultante von C und D. R kann aber noch weitere Nullstellen haben. x1 und x2 sind Nullstellen von R obwohl es keine Schnittpunkte sind. Wir sprechen von`“one-curve-events“ x1 x2 LEMMA:Ein Polynom p vom Grad vier hat entweder vier einfache Nullstellen oder alle Nullstellen von p sind Wurzelausdrücke. Wie kann man nun herausfinden ob eine Nullstelle von R auch ein Schnittpunkt von Ci und Dj ist? C1 D1 C0 D2 [] x1 [] [] x2 x3 [] [] x5 x3 und x4 sind Nullstellen der Resultante. Was ist wenn beide als Tripel (R, l, r) vorliegen? Nach Lemma sind x3 und x4 einfache Nullstellen von R und die Bögen schneiden sich dort falls sie sich überhaupt schneiden. [] x1 [] [] x2 x3 [] [] x5 Die Intervalle von x3 und x4 müssen nun soweit verfeinert werden bis sie sich nicht mehr überlappen. Ci und Dj schneiden sich nun bei x wenn sich die Vorzeichen von Ci(r)-Dj(r) und Ci(l)-Dj(l) unterscheiden. Anpassen des Sweep Line Algorithmus Problem: 4 ? 3 2 1 Reihenfolge der Bögen in der Y-Struktur ist bekannt. p Wie ist die Reihenfolge der Bögen nach dem gemeinsamen Schnittpunkt p? Multiplizität des Schnittes Sei p = (x,y) Schnittpunkt zweier Bögen Ci, Dj. Dann ist x eine Nullstelle der Resultante von C und D. Sei m nun die Multiplizität von x als Nullstelle der Resultante die wir folgendermassen berechnen: 4 r ( x) ( pi ( x)) i i 1 m wird durch das Polynom bestimmt in dem x vorkommt, dadurch kann m nie größer als 4 werden. Wenn m=1, so ist die Multiplizität des Schnittes 1. Ist m >1, dann gibt es einen Wurzelausdruck für x. Hat einer der Conics nur einen Bogen so ist die Multiplizität des Schnittes immer m. Intuitiver Ansatz: siehe Beispiele an der Tafel Wichtig: Wenn die Multiplizität ungerade ist, so ändert sich die Reihenfolge der Kurven in der YStruktur, bei gerader Multiplizität bleibt die Reihenfolge gleich. compare_xy Ziel: lexikografische Einordnung von Punkten nach x und y Koordinaten. Wir beschreiben Punkte auf einem Conic durch ein Tripel (x, Ci, Ai), wobei Ci der Conic ist auf dem x liegt und Ai anzeigt ob x auf dem oberen oder dem unteren Bogen von Ci liegt. compare_xy(2) compare _ xy : P1( x1, C 1, A1), P 2( x 2 , C 2, A2) if ( x1 x 2) Vergleich zweier alg. Zahlen. elseif (C 1 C 2) Vergleich von C1(x) mit C2(x) elseif ( A1 A2) Vergleich von A1(x) mit A2(x) else (x1, C(x1)) = (x2, C(x2)) Weitere Prädikate do_overlap:Testet ob sich Bögen oder Segmente überschneiden. compare_y_at_x:Stellt fest ob ein Punkt aus dem x-Abschnitt eines Segmentes, über, unter oder auf dem Segment liegt. compare_y_right_of_point: Vergleicht zwei Segmente um ihre Y-Reihenfolge rechts des gemeinsamen Punktes zu bestimmen. Wird genutzt um neu startende Segmente in die Y-Struktur einzusortieren. intersect:Bestimmt ob sich zwei Segmente schneiden, wenn ja dann werden die Schnittpunkte lexikografisch ausgegeben.