Мне нужно найти направление кратчайшего расстояния от одной точки в моем 2D-мире к другой точке, где обернуты края (например, астероиды и т. Д.). Я знаю, как найти кратчайшее расстояние, но изо всех сил пытаюсь найти, в каком направлении он находится.
Кратчайшее расстояние определяется как:
int rows = MapY;
int cols = MapX;
int d1 = abs(S.Y - T.Y);
int d2 = abs(S.X - T.X);
int dr = min(d1, rows-d1);
int dc = min(d2, cols-d2);
double dist = sqrt((double)(dr*dr + dc*dc));
Пример мира
:
: T
:
:--------------:---------
: :
: S :
: :
: :
: T :
: :
:--------------:
На диаграмме ребра показаны с помощью: и -. Я показал завернутый повтор мира в правом верхнем углу тоже. Я хочу найти направление в градусах от S до T. Таким образом, кратчайшее расстояние - до верхнего правого повтора T. Но как рассчитать направление в градусах от S до повторного T в правом верхнем углу?
Я знаю позиции как S, так и T, но я полагаю, что мне нужно найти позицию повторного T, но там больше 1.
Система координат миров начинается с 0,0 в верхнем левом углу и 0 градусов для направления, которое может начинаться с запада.
Кажется, что это не должно быть слишком сложно, но я не смог найти решение. Я надеюсь, что Сомоне может помочь? Любые сайты будут оценены.