Preciso encontrar a direção da distância mais curta de um ponto no meu mundo 2D para outro ponto em que as bordas estão envolvidas (como asteróides etc.). Eu sei como encontrar a menor distância, mas estou lutando para encontrar em que direção está.
A menor distância é dada por:
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));
Exemplo do mundo
:
: T
:
:--------------:---------
: :
: S :
: :
: :
: T :
: :
:--------------:
No diagrama, as arestas são mostradas com: e -. Também mostrei uma repetição do mundo no canto superior direito. Quero encontrar a direção em graus de S a T. Portanto, a distância mais curta é a repetição no canto superior direito de T. mas como faço para calcular a direção em graus de S para o T repetido no canto superior direito?
Conheço as posições de S e T, mas suponho que preciso encontrar a posição do T repetido, porém há mais de 1.
O sistema de coordenadas do mundo começa em 0,0 no canto superior esquerdo e 0 graus para a direção pode começar no oeste.
Parece que isso não deve ser muito difícil, mas não consegui encontrar uma solução. Espero que alguém possa ajudar? Qualquer site seria apreciado.