Gegeben eine Menge von Punkten im 2D-Raum und ein Rechteck (Koordinaten aller vier Punkte, Seiten parallel zur xy-Achse) Wie finde ich schnell heraus, welche Punkte innerhalb des Rechtecks liegen?Schneller Algorithmus zum Auffinden aller Punkte innerhalb eines Rechtecks
Ich bin nicht an der grundlegenden Lösung interessiert, alle Punkte durchzugehen und zu sehen, welche innerhalb des Rechtecks ist. Nach was ich suche, ist ein Algorithmus, der mir schnelle Abfragezeiten pro Rechteck gibt.
Es ist mir egal, wie viel Zeit ich im Vorverarbeitungsschritt verbringen. Mir ist wichtig, dass ich nach der Verarbeitung meiner Daten eine nützliche Struktur erhalte, die mir schnelle Abfragezeiten pro Rechteck gibt.
Ich weiß zum Beispiel kann ich zählen, wie viele Punkte ich in einem Rechteck in O (logN) habe. Das funktioniert, weil ich am Anfang sehr viel Verarbeitung mache und dann die verarbeiteten Daten jedes Mal mit einem neuen Rechteck abfrage und eine neue Anzahl in LogN-Zeit erhalte. Ich suche nach einem ähnlichen Algorithmus, um die tatsächlichen Punkte zu finden, nicht nur ihre Anzahl.
Ist das Rechteck gedreht? Wenn nicht, ist es nur ein einfacher AABB-Check: 'if (px> = rect.x && px. <= Rect.x + rect.width) {...}' – Draco18s
Siehe diesen Beitrag: http://stackoverflow.com/questions/10269179/find-rectangles-that-contain-point-efficient-algorithm – Jaco
Ich verstehe nicht, wie Sie es in LogN-Zeit vorschlagen. Für N Punkte müssen Sie mindestens einmal alle N Punkte durchlaufen. Das Beste, was du bekommen kannst, ist O (N). – displayName