Muszę znaleźć najkrótszą odległość od jednego punktu w moim świecie 2D do innego punktu, w którym krawędzie są owinięte (jak asteroidy itp.). Wiem, jak znaleźć najkrótszą odległość, ale staram się znaleźć kierunek.
Najkrótszą odległość podaje:
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));
Przykład świata
:
: T
:
:--------------:---------
: :
: S :
: :
: :
: T :
: :
:--------------:
Na schemacie krawędzie pokazano za pomocą: i -. W prawym górnym rogu pokazałem też zawinięte powtórzenie świata. Chcę znaleźć kierunek w stopniach od S do T. Więc najkrótsza odległość to powtórzenie T. w prawym górnym rogu, ale jak obliczyć kierunek w kierunku od S do powtarzanego T w prawym górnym rogu?
Znam pozycje zarówno S, jak i T, ale przypuszczam, że muszę znaleźć pozycję powtarzanej T, ale tam więcej niż 1.
Układ współrzędnych światów zaczyna się od 0,0 w lewym górnym rogu i 0 stopni, aby kierunek mógł zacząć się na Zachodzie.
Wygląda na to, że nie powinno to być zbyt trudne, ale nie byłem w stanie znaleźć rozwiązania. Mam nadzieję, że ktoś może pomóc? Wszelkie strony będą mile widziane.