Programowanie w języku Delphi » Artykuły

Trygonometria sferyczna - długość odcinka

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:


Do wyznaczenia deltyy stosuje się wzór:


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:


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):


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

SylwesterH 2009-03-01 23:18

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

Xitami 2006-09-29 18:08

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?.

Oleksy_Adam 2006-09-18 10:50

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

Marooned 2006-09-08 22:56

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

Pawel200x.5 2006-09-08 17:55

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

Oleksy_Adam 2006-09-08 17:12

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

Coldpeer 2006-09-08 16:02

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

WeeR 2006-09-08 12:53

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

Marooned 2006-09-08 04:14

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...

Xitami 2006-09-18 01:44

------------------------------------------------------------------------------------------------------------------------
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 ]-----