![]() |
Bentley-Ottmann-Algorithmus Verständnisfrage
Liste der Anhänge anzeigen (Anzahl: 1)
Morgen,
ich möchte mithilfe des ![]() Ich kopier hier mal den übersichtlichsten Pseudocode ( ![]()
Code:
Q := the 2n segment end-points
D := {} while Q <> {} do begin p := DELETEMIN(Q); if p is the left end-point of si then begin INSERT(si,D); A := ABOVE(si,D); B := BELOW(si,D); INSERT (in Q) A intersect si and B intersect si if they exist and are to the right of p end if p is the right end-point of si then begin A := ABOVE(si,D); B := BELOW(si,D); DELETE(si,D); INSERT (in Q) A intersect B if it exists and if it is to the right of p end if p := si intersect sj then begin {suppose si := ABOVE(sj)} INTERCHANGE(si,sj,D); A := ABOVE(sj,D); B := BELOW(si,D); INSERT (in Q) A intersect sj and B intersect si if they exist and are to the right of p REPORT(p); end end
Wo liegt mein Fehler? |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Zitat:
Allerdings finde ich den Algorithmus anbetracht dessen, dass er so viele Sonderfälle einfach ausschließt (die also Sonderbehandlungen erfordern), weniger glücklich. Ich könnte mir vorstellen, dass man mit dem Ansatz, dass zwei sich schneidende Linien eine nichtleere Teilmenge ihrer umgebenden Rechtecke haben müssen, direkt einfacher ans Ziel kommt. Gruß, Mikkey |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Zitat:
Soll eine neue Linie hinzugefügt werden, müssen die Schnittpunkte der vorhandenen Linien mit der "Sweep-Linie" neu bestimmt werden, damit die neue Linie an der richtigen Stelle eingefügt werden kann. In diesem Fall wird b unter a eingefügt. |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Zitat:
|
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Zitat:
|
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Danke für eure Antworten!
Ich glaube, ich weiß jetzt was falsch ist... wenn man auf den linken Endpunkt einer Linie stößt, muss man trotzdem beide Endpunkte in den Baum einfügen. Getestet habe ich es allerdings noch nicht, also vielleicht melde ich mich doch noch mal. |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Nein, in den Y-Baum (eigentlich eine Liste) fügt man Linien ein, nicht einzelne Punkte.
Beim Einfügen einer Linie vergleicht man den linken Punkt dieser Linie mit dem aktuellen Schnittpunkt der anderen Linien der Liste an dieser X-Position ("Sweep-Linie"). Dadurch wird die Einfügeposition in der Liste bestimmt. |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Nimm folgendes Szenario mit n Linien an: Anhang 39788 Der Sinn des Algorithmus ist ja aber gerade, quadratisches Laufzeitverhalten zu vermeiden. |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Die Neuberechnung betrifft nur die Linien, mit denen tatsächlich verglichen wird.
Die Steigung jeder Linie muss man nur einmal je Linie vorberechnen. Dann beschränkt sich die Neuberechnung auf eine Multiplikation und eine Addition. Vergleicht man jeweils die neue Linie in der Mitte der Menge der Linien, halbiert sich die für den Vergleich relevante Menge durchschnittlich mit jedem Vergleich. Man benötigt also ca. 8 Berechnungen und Vergleiche um eine neue Linie in eine Liste mit 256 aktiver Linien einzufügen. |
AW: Bentley-Ottmann-Algorithmus Verständnisfrage
Zitat:
Zitat:
Ich bin mir zu 95% sicher, dass das, was ich gestern geschrieben habe, stimmt. Ich habe es mehrfach auf dem dem Papier durchgespielt und es hat in allen Fällen funktioniert, und es passt auch zu den Beschreibungen des Bentley-Ottman-Algorithmus. Deine Vorgehensweise taucht dagegen in keiner Beschreibung auf. Sie würde zwar auch funktionieren (auf Kosten einer schlechteren Laufzeitkomplexität), aber der Bentley-Ottman-Algorithmus geht nun mal anders. Trotzdem Danke fürs Mitdenken! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz