Я пишу инструмент для игры, которая включает в себя вычисление расстояния между двумя координатами на тороидальной плоскости 500 единиц в поперечнике. То есть от [0,0] до [499,499] являются допустимыми координатами, а [0,0] и [499,499] также находятся рядом друг с другом.
В настоящее время в моем приложении я сравниваю расстояние между городом с местоположением [X, Y] относительно собственного местоположения пользователя [X, Y], которое они настроили заранее.
Для этого я нашел такой алгоритм, который вроде работает:
Math.sqrt ( dx * dx + dy * dy );
Поскольку сортировка списка страниц по расстоянию полезна, я реализовал этот алгоритм в запросе MySQL и сделал его доступным для своего приложения, используя следующую часть моего оператора SELECT:
SQRT( POW( ( ".strval($sourceX)." - cityX ) , 2 ) + POW( ( ".strval($sourceY)." - cityY ) , 2 ) ) AS distance
Это прекрасно работает для многих вычислений, но не принимает во внимание тот факт, что [0,0] и [499,499] находятся друг напротив друга.
Можно ли каким-либо образом настроить этот алгоритм для получения точного расстояния, учитывая, что 0 и 499 являются соседними?
