Trygonometria sferyczna - długość odcinka

Oleksy_Adam

Sferyczna powierzchnia kuli nie może być odwzorowana na płaszczyźnie bez zniekształceń; również odległość pomiędzy dwoma punktami ulega zniekształceniom. Jedynie w przypadku wielkoskalowych odwzorowań, obejmujących mały wycinek powierzchni, sferyczne zakrzywienie odgrywa znikomą rolę. Pomiar dużej odległości na małoskalowych odwzorowaniach daje wielkie błędy. W tych przypadkach dla wyznaczenia właściwej odległości między dwoma punktami stosuje się formuły trygonometrii sferycznej.

Ten sposób określania odległości wymaga podejścia bardziej geograficznego niż programistycznego, a mianowicie wymaga znajomości współrzędnych: szerokość i długość geograficzną dwóch punktów . Oznaczamy je: lambda - długość, fi - szerokość.

Do wyznaczenia długości stosuje się wzór:
Schowek02.jpg

Do wyznaczenia deltyy stosuje się wzór:
Schowek01.jpg

gdzie:
l - odległość A-B
r - promień kuli
delta- kąt środkowy

Ponieważ komputery wolą radiany, wartość należy skorygować w następujący sposób:
Schowek03.jpg

Aby móc przeprowadzić obliczenia w delphi należy użyć modułu Math. W przypadku Turbo Pascala, należy zadeklarować funkcję arcus cosinus. Oblicza się ją w następujący sposób (z uwzględnieniem konwersji radianów na stopnie):
Schowek06.jpg

Oto przykładowa implementacja funkcji:

function ArcCos(X: Double): Double;
begin
  ArcCos := ArcTan(Sqrt(1 - Sqr(X)) / X;
end;

Funkcja zwracająca długość odcinka może mieć postać:

// f - to fi
// l - to lambda
// r - promień kuli
function Len(fA, fB, lA, lB, r: Double): Double;
var
  delta: Double;
begin
  delta := Sin(fA) * Sin(fB) + Cos(fA) * Cos(fB) * Cos(lA ? lB);
  delta := ArcCos(delta) * 90 / Pi;
  Len := r * delta * Pi / 180;
end;

Ważne aby kąt podawać nie w formacie stopień.minuta tylko w postaci dziesiętnej. Jeżeli chcemy użyć minut konieczne byłyby dalsze przekształcenia.

10 komentarzy


Powiem o czymś, o czym nie wielu wie lub zdaje sobie sprawę. Z tego, że Ziemia (przez durze ?Z?) nie jest kulą wynika coś wymiernego w pieniądzach! Przy handlowaniu tankowcami ropy, ma znaczenie różnica szerokości geograficznych portów ?źródłowego? i ?docelowego? . (Nie dokładnie ?różnica? ale...)
Sprzedaje/kupuje się kilogramy, NIE litry!
Różnica ciężarów (nie masy, przypominam: na wadze mierzymy CIĘŻAR) przy pewnej skali (tankowce) jest bardzo istotna, aż tak, że uwzględnia się ją na giełdzie.

Ciekawym bardzo, jak uwzględnienie ?biegunowego? i ?równikowego? promienia wpłynie na szacowanie odległości. Czy mógłbyś uściślić wzór?
------------------------------------------------------------------------------------------------------- [ Xitami ]-----

Super artykuł, podoba mi się, a może jakaś procedura na obliczenie poprawki ze względu na odwzorowanie w układzie 65 ;)

Napisałem czemu napisałem to co napisałem.
Jedyna kula którą znam, taka która posiada szerokość i długość geograficzną to Ziemia ;-)
A, że tak a nie inaczej pisze się ?duży?? No cóż, wynika to z historii, tradycji itp. czyli taka kompatybilność w dół, o której Seymour Cray mówił że to ?trucizna?. ;-)
Dalej żem ciekaw poprawki ?elipsoidalnej?.

Xitami, wzór dotyczy tylko i wyłącznie kuli, czy w arcie choć jedno słowo mówi o Ziemi? I Tak na marginesie: "durzy" piszę się tak: duży

WeeR - pewnie masz racje.. plany zmiany takiego stanu rzeczy na horyzoncie :)

Sugeruję jeszcze poprawienie formatowania kodu, używając standardowych zasad. Tj. wcięcia w rozmiarze 2 spacji, nazwy zmiennych i funkcji od drugiej litery, nazwa: typ; przy definicji zmiennych, odstępy z obu stron operatorów, etc.

//a, i osobiście argumenty do tych funkcji przekazałbym jako const

Coldpeer dzięki za info. Poprawiłem buga.

"Return := r * ..." a nie Result? :>

Marooned : coś mi się zdaje, ze nie bardzo ten LaTeX jest widoczny, tzn nie wiele osób wie jak go używać, i nie ma żadnego info że jest

Pliki nazwane 'schowek' ?? kpisz?
ludzie, ilez mozna... nazywajcie pliki zgodnie z ich zawartością!!!! nie jesteście tu sami..

poza tym, mamy LaTeXa na 4p, mozna bylo jego uzyc...