Подтвердить что ты не робот

Рассчитать расстояние между двумя координатами x/y?

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

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

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

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

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

Ответ 4

для точек (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)

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