2012-04-16 8 views
5

Gibt es einen Pfadfindungsalgorithmus, der auch für reale 3D-Umgebungen geeignet ist, z.B. echte Gebäude mit mehreren Treppen usw. Eine C++ - Bibliothek oder eine offene Implementierung wäre großartig ;-) Eine Lösung, die ich sah, war Djikstra, aber ich frage mich, ob es etwas Besseres gibt. Normal A * würde nicht besser funktionieren als Djikstra, da die Entfernungsheuristik nicht gut funktioniert (Position eine Etage über dem Ziel). Eine andere Lösung, über die ich derzeit nachdenke, ist die Abbildung der 3D-Umgebung auf einem 2D-Graphen. Wenn es also eine verfügbare C++ - Implementierung/Bibliothek gibt, wäre es auch hilfreich.Pathfinding in realen 3D-Umgebungen (z.B. Gebäude)

+1

Wenn Sie nicht viele Treppen haben, kann A * sehr gut funktionieren, wobei Ihre Heuristik für Punkte auf verschiedenen Ebenen die Summe der Abstände zur nächsten Treppe zuzüglich der vertikalen Entfernung ist. – biziclop

+0

@biziclop: Das ist eine sehr gute Idee und viel einfacher als jede Graphenumwandlung. Ich werde es versuchen – Martin

+1

Ich glaube, dass Wegfindung ist anfällig für Teile und herrsche. So können Sie versuchen, A * auf 2d-Ebenen und den Dijkstra-Algorithmus zu verwenden, um sie miteinander zu verbinden. – comingstorm

Antwort

2

Wenn der Pfad die Fähigkeit berücksichtigen muss, durch Hindernisse zu navigieren (d. H. Die Bewegung ist die einer Entität mit bekanntem Volumen im Raum), dann würde ich empfehlen, die Literatur zur Roboterbewegungsplanung zu lesen. Die Idee eines Konfigurationsraums ermöglicht es Ihnen, Änderungen in der Pose zu handhaben, um mit Hindernissen umzugehen. Sehen Sie das klassische Lehrbuch von Jean-Claude Latombe

Für einfachere Szenarien können Sie wahrscheinlich mit Pfadplanungsalgorithmen in der ersten Person Computerspielen machen tun, die Dijkstra ähnlich sind, A * (example)

1

Für einen Approximationsalgorithmus Sie können das 3D leicht auf eine 1D-Kurve abbilden und einen Octree mit einem grauen Code durchlaufen. Auf diese Weise können Sie jeden Pfad neu anordnen. Ich weiß nicht, ob es eine Garantie gibt, innerhalb der optimalen Lösung zu sein, aber es muss besser sein als jede heuristische Methode.

+0

Das klingt interessant, aber ich verstehe Ihre Idee nicht ganz. Für jeden Weg ist der Ursprung offensichtlich anders. Also schlagen Sie vor, für jeden Lauf zuerst einen Octree zu bauen oder wie formuliere ich ein Sortierkriterium für den Baum? (Ich muss zugeben, ich bin nicht sehr vertraut mit Octrees ...) – Martin

+0

Weiter, da ich keine Knoten für jede Richtung habe (stellen Sie sich einen Flur mit nur wenigen Knoten vor) wäre der Baum weitgehend spärlich, ist dies sinnvoll für Octrees – Martin