Рассчитать расстояние между двумя координатами х / у? - PullRequest
21 голосов
/ 23 января 2010

Я хотел бы рассчитать расстояние между двумя координатами x / y на поверхности тора . Итак, это нормальная сетка, у которой есть свойство, что ее углы и стороны «связаны». Например, на сетке 500x500 точка в (499, 499) смежна с (0, 0) и расстоянием между, например, (0,0) и (0,495) должны составлять 5.

Есть ли хороший математический способ для расчета этого?

Ответы [ 4 ]

52 голосов
/ 23 января 2010

Итак, вы ищете евклидово расстояние на двумерной поверхности тора, я так понимаю.

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

, где w и h - ширина (x) и высота (y) сетки соответственно.

7 голосов
/ 23 января 2010
  • Если / когда расстояние между координатами x больше половины размера сетки X, добавьте размер сетки X к меньшей координате x.
  • Сделайте то же самое для Y.
  • Затем рассчитайте расстояние.
4 голосов
/ 23 января 2010

Если ваша сетка оборачивается по краям, между каждой координатой будет четыре расстояния (для двух измерений). Я предполагаю, что вы хотите знать кратчайшее расстояние.

Давайте использовать меньшую сетку, цифры немного более управляемы. Скажем, сетка 10х10. Давайте также будем использовать только одно измерение для простоты (в этом случае будет только два расстояния), так же, как в вашем примере. Скажем, у нас есть точки 0,2 и 0,6. Два расстояния между точками: d_1 = (6-2) = 4 и d_2 = (10-6) + 2 = 6, поэтому в этом случае кратчайшее расстояние будет d_1.

В общем, вы можете сделать следующее:

  • Для каждой координаты:
    • вычесть меньшее из большего числа
    • если результат больше половины ширины сетки, кратчайшее расстояние в этой координате равно ширине сетки минус результат
    • если результат меньше половины ширины сетки, кратчайшее расстояние в этой координате будет результатом

Затем, используя теорему Пифагора, кратчайшее расстояние между двумя точками - это квадратный корень из суммы квадратов кратчайших расстояний в каждом направлении. Вы можете вычислить другие три расстояния, вычисляя теорему Пифагора, используя другие комбинации расстояний в каждом направлении.

Как сказал другой автор, фигура, образованная при обтекании по краям (для двумерной сетки), является тором, и я думаю, что метод, который я использовал выше, совпадает с приведенным уравнением, но имеет преимущество что он может быть расширен до n-размеров, если требуется. К сожалению, на самом деле не существует простой визуализации над двумя измерениями.

1 голос
/ 23 января 2010

для точек (x1, y1) и (x2, y2) необходимо рассчитать 4 расстояния:

  • от (x1, y1) до (x2, y2)
  • от (x1, y1) до (x2, 500-y2)
  • от (x1, y1) до (500-x2, y2)
  • от (x1, y1) до (500-x2, 500-y2)

и затем возьмите минимум из них.

...