Ответ 1
Итак, вы ищете евклидову дистанцию на двумерной поверхности тора, я собираюсь.
sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1-y2|)^2)
где w
и h
- ширина (x) и высота (y) сетки соответственно.
Я хотел бы рассчитать расстояние между двумя координатами x/y на поверхности тор. Итак, это нормальная сетка, которая обладает свойством, что ее углы и стороны "связаны". Например, на сетке 500x500 точка в точке (499, 499) смежна с (0, 0) и расстояние между, например, (0,0) и (0,495) должно быть 5.
Есть ли хороший математический способ вычисления этого?
Итак, вы ищете евклидову дистанцию на двумерной поверхности тора, я собираюсь.
sqrt(min(|x1 - x2|, w - |x1 - x2|)^2 + min(|y1 - y2|, h - |y1-y2|)^2)
где w
и h
- ширина (x) и высота (y) сетки соответственно.
Если ваша сетка обтекает края, между каждой координатой (для 2-х измерений) будет четыре расстояния. Я предполагаю, что вы хотите знать кратчайшее расстояние.
Позвольте использовать меньшую сетку, цифры немного более управляемы. Скажем, сетка 10x10. Позвольте также использовать только одно измерение для простоты (в этом случае будет только два расстояния), как и в вашем примере. Скажем, у нас есть точки 0,2 и 0,6. Два расстояния между точками равны d_1 = (6-2) = 4 и d_2 = (10-6) + 2 = 6, поэтому в этом случае кратчайшее расстояние будет d_1.
В общем, вы можете сделать следующее:
Тогда, используя теорему Пифагора, кратчайшее расстояние между двумя точками является квадратным корнем из суммы квадратов кратчайших расстояний в каждом направлении. Вы можете рассчитать другие три расстояния, вычислив теорему Пифагора, используя другие комбинации расстояний в каждом направлении.
Как сказал еще один плакат, форма, сформированная при обёртывании по краям (для двумерной сетки), является тором, и я думаю, что метод, который я использовал выше, такой же, как и приведенное уравнение, но имеет преимущество что при необходимости он может быть расширен до n-мер. К сожалению, на самом деле нет простой визуализации выше 2-х измерений.
для точек (x1, y1) и (x2, y2), вам нужно рассчитать 4 расстояния:
а затем возьмите минимум из них.