У меня есть евклидова карта тороидального затвора. То есть поверхность представляет собой плоский евклидов прямоугольник, но когда точка переместится к правой границе, она появится на левой границе (с тем же значением y), определяемой как x_new = x_old% width
В основном, точки строятся на основе: * см. Редактирование
(x_new, y_new) = ( x_old % width, y_old % height)
Think Pac Man - если вы выйдете за один край экрана, вы окажетесь на противоположном краю.
Как лучше всего рассчитать кратчайшее расстояние между двумя точками? Типичная реализация предполагает большое расстояние для точек в противоположных углах карты, когда в действительности реальное расстояние в скобках очень близко.
Лучший способ, которым я могу придумать, - это вычисление Классической Дельты X и Обернутой Дельты X, и Классической Дельты Y и Обернутой Дельты Y, и используя нижнюю из каждой пары в формуле расстояния Sqrt (x ^ 2 + y ^ 2) .
Но это потребовало бы многих проверок, вычислений, операций - некоторые из них, я считаю, могут быть излишними.
Есть ли лучший способ?
1020 * редактировать *
Когда объект перемещается, он перемещается в позицию (x_old, y_old), проходит через вышеуказанную формулу и сохраняет (x_new, y_new) в качестве своей позиции. Приведенная выше формула была добавлена только для пояснения того, что происходит, когда объекты перемещаются через границу; в действительности только одна (x, y) пара хранится в каждом объекте одновременно.