AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Octree oder kdtree? [C++]

Ein Thema von Nikolas · begonnen am 17. Jun 2009 · letzter Beitrag vom 29. Jan 2010
Antwort Antwort
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#1

Octree oder kdtree? [C++]

  Alt 17. Jun 2009, 17:53
Hallo

Ich entwickle gerade eine Anwendung in der ich recht viele (5000) Punkte im R3 habe und für einen beliebigen neuen Punkt den Nachbar suche. Die Suche nach dem Nachbar ist sehr zeitkritisch, die Punktwolke ist konstant, d.h. die Zeit zum Einfügen oder Entfernen von Punkten, optimieren usw, ist egal.

Trivial in O(n) wäre ein bischen blöd, deswegen habe ich mich ein bischen umgeschaut und bin auf octrees und kdtrees gestoßen.
Da die ganze Anwendung in C++ geschrieben wird habe ich noch ein bischen gesucht und bin auf den libkdtree++ gestoßen, der sich eigentlich recht gut anhört. Bei den Octrees habe ich keine Implementation gefunden, die auch ein find_nearest() unterstützt. Eine eigene Implementation will ich nicht machen, da das Hauptproblem der Anwendung eigentlich wo anders liegt und ich zu wenig Zeit habe, alles selber zu schreiben.

Eine Alternative wäre ein 3d-Grid über die Wolke zu legen. Wenn meine Wolke 1m^3 groß ist, könnte ich zum Beispiel 1000 1dm^3 große Kistchen bauen und in jeder Kiste notieren, welche Punkte darin liegen. Wenn ich dann zu einem Punkt seinen Nachbarn suche, schau ich nach, in welche Kiste der Punkt liegt und überprüfe alle anderen Punkte darin. Wenn der Punkt dann einen geringeren Abstand zu einer der Wände als zum bis dahin nächsten Nachbarn hat, muss ich auch die Punkte in der anderen Kiste betrachten.

Bei den Bäumen läuft die Suche nach dem Nachbar in O(log N) (N =#Punkt in der Wolke), in der Grid-Version in O(?*n) mit (n= durchschnittliche # Punkte pro Kiste und ?=etwas das die WKeit beschreibt, noch mehr Kisten zu durchsuchen). Da ich Punkte, deren Nachbar mehr als grob 20cm entfernt ist, ignorieren kann, könnte ich sogar auf ein WorstCase verhalten von O(9*n) kommen. (Wobei die Frage ist, ob das besser als O(log N) ist.


Ich weiss leider nicht, was da schneller ist (an die Implementierung des Grids setze ich mich gleich) und hoffe, dass jemand von euch das Problem schon mal hatte und sich mit sinnvollen Gründen für eine Idee entschieden hat. (Wer auch noch eine gute C++ implementation kennt, ist natürlich auch gerne gesehen)

Nikolas
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
Sternkucker

Registriert seit: 6. Dez 2009
5 Beiträge
 
#2

Re: Octree oder kdtree? [C++]

  Alt 29. Jan 2010, 21:46
Hallo Nikolas und DP-Leser,

das Thema ist schon etwas älter, aber ich suche momentan exakt das gleiche, aber für Delphi. Ich habe 2 Implementierungen für C++ gefunden, aber rein gar nichts in Pascal/Delphi. Kann jemand weiterhelfen?

Liebe Grüße
Michael
  Mit Zitat antworten Zitat
Torpedo

Registriert seit: 21. Dez 2003
410 Beiträge
 
#3

Re: Octree oder kdtree? [C++]

  Alt 29. Jan 2010, 22:58
Du könntest versuchen es zu übersetzen. C/C++ ist nicht so kompliziert, vor allem, wenn man es nur lesen muss.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz