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