Frage Abstand zwischen zwei x / y-Koordinaten berechnen?


Ich möchte den Abstand zwischen zwei x / y Koordinaten auf der Oberfläche von berechnen ein Torus. Das ist also ein normales Gitter, das die Eigenschaft hat, dass seine Ecken und Seiten "verbunden" sind. Zum Beispiel ist bei einem Raster von 500 × 500 der Punkt bei (499, 499) benachbart zu (0, 0) und der Abstand zwischen z. (0,0) und (0,495) sollten dann 5 sein.

Gibt es eine gute mathematische Methode, dies zu berechnen?


20
2018-01-23 17:15


Ursprung


Antworten:


Sie suchen also nach der euklidischen Distanz auf der zweidimensionalen Oberfläche eines Torus.

sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1 - y2|)^2)

woher w und h sind die Breite (x) bzw. Höhe (y) des Gitters.


49
2018-01-23 17:25



  • Wenn / während der Abstand zwischen x-Koordinaten größer als die Hälfte der Größe des Gitters X ist, fügen Sie der kleineren x-Koordinate die Größe des Gitters X hinzu.
  • Tun Sie dasselbe für Y.
  • Dann berechne die Entfernung.

6
2018-01-23 17:22



Wenn sich Ihr Gitter an den Kanten umschlingt, gibt es vier Abstände zwischen jeder Koordinate (für 2 Dimensionen). Ich nehme an, du willst die kürzeste Entfernung wissen.

Lassen Sie uns ein kleineres Gitter verwenden, die Zahlen sind etwas überschaubarer. Angenommen, das Raster ist 10x10. Verwenden Sie zur Vereinfachung auch nur eine Dimension (in diesem Fall gibt es nur zwei Abstände), genau wie in Ihrem Beispiel. Angenommen, wir haben die Punkte 0,2 und 0,6. Die zwei Abstände zwischen den Punkten sind d_1 = (6-2) = 4 und d_2 = (10-6) + 2 = 6, so dass in diesem Fall der kürzeste Abstand d_1 wäre.

Im Allgemeinen können Sie Folgendes tun:

  • Für jede Koordinate:
    • subtrahiere die kleinere von der größeren Zahl
    • Wenn das Ergebnis größer als die Hälfte der Breite des Gitters ist, ist die kürzeste Entfernung in dieser Koordinate die Gitterbreite minus dem Ergebnis
    • Wenn das Ergebnis weniger als die Hälfte der Breite des Gitters beträgt, ist die kürzeste Entfernung in dieser Koordinate das Ergebnis

Nach dem Satz von Pythagoras ist der kürzeste Abstand zwischen den beiden Punkten die Quadratwurzel der Summe der Quadrate der kürzesten Abstände in jeder Richtung. Sie können die anderen drei Abstände berechnen, indem Sie den Satz des Pythagoras berechnen, indem Sie die anderen Kombinationen von Abständen in jeder Richtung verwenden.

Wie ein anderes Poster gesagt hat, ist die Form, die beim Umwickeln der Kanten (für ein 2-dimensionales Gitter) entsteht, ein Torus und ich denke, dass die Methode, die ich oben verwendet habe, die gleiche wie die angegebene Gleichung ist, aber den Vorteil hat bei Bedarf auf n-Dimensionen erweitert werden. Leider gibt es keine einfache Visualisierung über 2 Dimensionen.


3
2018-01-23 17:37



Für die Punkte (x1, y1) und (x2, y2) müssen Sie 4 Abstände berechnen:

  • von (x1, y1) bis (x2, y2)
  • von (x1, y1) bis (x2, 500-y2)
  • von (x1, y1) bis (500-x2, y2)
  • von (x1, y1) bis (500-x2, 500-y2)

und nimm dann das Minimum davon.


1
2018-01-23 17:25