Obliczanie ortodromy - pytanie czy dobrze zrobiłem wzór

0

Witajcie.
Tak jak w temacie, potrzebuję obliczyć odległość między dwoma punktami na kuli ziemskiej.
Zaimplementowałem obliczanie ortodromy, ale niestety wyniki są trochę rozbierzne, mianowicie dla odległości między współrzędnymi 0,0 i 10,10 wychodzi mi 87km, a powinno wyjść 1568,59 więc coś grubo sknociłem ale nie widzę co konkretnie.
Oto kod:

public static decimal CalculateOrtodroma(decimal pointAX, decimal pointAY, decimal pointBX, decimal pointBY)
        {
            double ax = (double)pointAX;
            double ay = (double)pointAY;
            double bx = (double)pointBX;
            double by = (double)pointBY;

            //                 sinuses          cosinuses
            //wzór D = arccos((sin(ay)*sin(by))+(cos(ay)*cos(by)*cos(|ax-bx|))
            //                                                       deltaX

            double deltaX = Math.Abs(ax - bx);
            double sinuses = Math.Sin(ay) * Math.Sin(by);
            double cosinuses = Math.Cos(ay) * Math.Cos(by) * Math.Cos(deltaX);
            double D = Math.Acos(sinuses + cosinuses);
            decimal x = (decimal)D * 111.195M;

            return x;
        }
1
Oliwier Baran napisał(a):

Zaimplementowałem obliczanie ortodromy, ale niestety wyniki są trochę rozbierzne, mianowicie dla odległości między współrzędnymi 0,0 i 10,10 wychodzi mi 87km, a powinno wyjść 1568,59 więc coś grubo sknociłem ale nie widzę co konkretnie.

Kąty podajesz w stopniach, a powinieneś w radianach. Zamień je na radiany za pomocą wzoru stopnie * PI / 180, a następnie wynik D zamień na stopnie za pomocą wzoru radiany * 180 / PI i po pomnożeniu D przez wartość 111.195 otrzymasz poprawną ilość kilometrów.

0

Wielkie dzięki, teraz wszystko się zgadza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1