[Hinweis: Dieses Problem wurde von Pokemon Go inspiriert. Ich werde das Problem zuerst in mathematischen Begriffen erklären und dann die Verbindung zu Pokemon Go erklären. Mein Ziel ist es nicht, im Spiel zu schummeln. Wenn ich schummeln wollte, wären bessere Informationen leichter verfügbar.]
Angenommen, eine Ebene enthält Punkte (die "unbekannten Punkte"). Nennen Sie sie mit unbekannten Koordinaten. Darüber hinaus haben wir Messungen an bekannten Orten .m 1 , … , m M.
Sei der (allgemein unbekannte) euklidische Abstand vom Messpunkt zum unbekannten Punkt .m i n j
Für jede Messung haben wir folgende Informationen:
- Die genauen Koordinaten jedes unbekannten Punktes für den für eine bekannte Konstante ; und dist ( m i , n j ) < d min d min
- Eine Liste aller Indizes für die für eine bekannte Konstante , sortiert nach .dist ( m i , n j ) < d max d max > d min dist ( m i , n j )
Gibt es einen effizienten Algorithmus zur Berechnung der Bereiche der Ebene, in denen die unbekannten Punkte oder ein gegebener unbekannter Punkt können? Der Algorithmus erhält die Koordinaten der Messpunkte, die oben aufgeführten und die Anzahl unbekannter Punkte; Ziel ist es, den Bereich möglicher Orte für jeden der unbekannten Punkte so weit wie möglich . ( X i , Y i ) N n 1 , … , n N.
Die Pokemon-Verbindung:
In Pokemon Go, einem Augmented Reality-Spiel, ist das Ziel, Pokemons in der Natur zu finden. Hin und wieder zeigt das Spiel die Pokemons in einem "sichtbaren Bereich" ( ) der Position des Spielers. Darüber hinaus verfügt es über einen "Pokemon Finder", der eine Liste von Pokemons in der Nähe ( ) anzeigt, sortiert nach Entfernung. (Es soll auch eine ungefähre Entfernung als ein, zwei oder drei Schritte anzeigen, aber anscheinend gibt es einen Fehler und es werden immer drei Schritte angezeigt.) d i s t < d m a x
Antworten:
Ich denke, Sie könnten eine "räumliche Verknüpfung" verwenden. Ich habe das Spiel nicht gespielt, aber ich davon aus, dass ziemlich klein ist, dh es gibt in der Größenordnung von 10 oder so und in der Nachbarschaft jedes . Ich gehe weiter davon aus, dass und groß sind, sagen wir 1.000.000 oder mehr. n m m N M.dmax n m m N M
Irgendwie müssten Sie auch jedes eindeutig identifizieren , damit Sie die Position von erneut berechnen, wenn sie bei der Verarbeitung eines weiteren auftaucht .n mn n m
Zur Optimierung möchten Sie möglicherweise Fensterabfragen (rechteckig) anstelle von Abfragen mit kreisförmigem Bereich verwenden. Fensterabfragen können viel schneller sein und nur geringfügig mehr Ergebnisse liefern. Es könnte auch sein, dass das Spiel tatsächlich keinen euklidischen Abstand (Kreise) verwendet, sondern den schnelleren Manhatten-Abstand, der genau ein Rechteck wäre.
Für eine solche räumliche Verknüpfung können Sie einen beliebigen räumlichen Index verwenden, z. B. R-Tree, kd-Tree, Quadtree oder eine ihrer Varianten.
Für große Datenmengen würde ich wahrscheinlich keinen R-Tree (R + -Baum, R * -Baum, X-Tree) oder eine spezielle Variante des Quadtree, den PH-Tree, verwenden, der auch für Bereichsabfragen gut geeignet ist Ermöglichen des schnellen Entfernens (oder Hinzufügens) von Punkten.
Für Java finden Sie Implementierungen von R-Trees überall im Internet, beispielsweise im ELKI- Framework oder in meiner eigenen TinSpin Index-Bibliothek . Der PH-Tree ist auch in Java verfügbar.
Ein generischer räumlicher Join-Algorithmus heißt TOUCH , aber ich denke nicht, dass es Open Source ist.
quelle
Was kann (jenseits des von Tom van der Zanden bereits in einem Kommentar vorgeschlagenen Schnittpunkts von Annuli) für Objektpositionen getan werden, die auf diese Weise nicht mit einer bereits bekannten Objektposition zusammenhängen? Das scheint sehr schwer zu sein. Die Aussage
" kann nicht bei erscheinen " pnj p
ist äquivalent zu
"Für alle möglichen Platzierungen aller verbleibenden unbekannten Punkte führt die Einstellung von zusammen mit den Abstandsungleichungen, die sich aus der Reihenfolge ergeben, in der Objekte, die zum Ringraum jeder Messung gehören, aufgelistet sind, zu einem Widerspruch."nj=p
Es scheint mir, dass wir (mindestens) 2 unbekannte Objektpositionen haben müssen, die im Ring von (mindestens) denselben 2 Messungen erscheinen, um irgendwohin zu gelangen. Aber während diese Informationen werden viele ausschließen Paare von Positionen für die beiden Objekte, war ich nicht in der Lage mit jedem Umstand zu kommen , in dem eine Position für nur eine ausgeschlossen von ihnen werden könnte, unabhängig von der anderen Objektposition.
quelle