Azymator – jak program wylicza położenie szczytów na zdjęciu

Azymator odpowiada na pytanie: „Jeśli stoję w tym miejscu i robię to zdjęcie, w którym punkcie obrazu powinien znajdować się szczyt X?” Poniżej opisano, skąd program bierze dane, co z nimi liczy i dlaczego akurat tak.

1. Idea w skrócie

Położenie szczytu na zdjęciu to dwie liczby: piksel poziomy (jak daleko od lewej krawędzi) i piksel pionowy (jak wysoko lub nisko). Poziomo decyduje kierunek na szczyt (azymut), pionowo kąt, pod jakim go widać (kąt wzniesienia). Obie wielkości trzeba potem zamienić na piksele, a do tego służy kalibracja na dwóch rozpoznanych szczytach.

1. Geodezjawspółrzędne obserwatora i szczytu → azymut i odległość
→
2. Kąt wzniesieniaodległość i wysokości + krzywizna Ziemi + refrakcja → kąt
→
3. Kalibracjaazymut i kąt → piksele według dwóch znanych punktów
→
4. Rysunekznacznik z nazwą i odległością na zdjęciu

2. Skąd program bierze dane

DanaSkądDo czego służy
Punkt obserwatora (szerokość, długość)kliknięcie na mapie lub wpisanie współrzędnychpoczątek wszystkich obliczeń
Wysokość oczu \( h_1 \)pobierana dla punktu albo wpisana ręcznie (np. szczyt, wieża)wysokość, z której patrzymy
Lista szczytów (szerokość, długość, wysokość \( h_2 \), nazwa)plik tekstowy z dysku albo z serweracele, których położenie liczymy
Dwa szczyty kalibracyjnewybrane na zdjęciu przez użytkownika (klik w zdjęcie + azymut z mapy)przeliczenie azymutów i kątów na piksele
Refrakcjawspółczynnik \( k' \) wpisany przez użytkownika albo plik CSV z radiosondypoprawka na załamanie światła w atmosferze
Promień Ziemi \( R \)domyślnie 6 371 000 mkrzywizna Ziemi

3. Krok 1: azymut i odległość

Azymut to kierunek na szczyt liczony od północy zgodnie z ruchem wskazówek zegara (0° = północ, 90° = wschód). Odległość to długość najkrótszej drogi po powierzchni Ziemi.

Program liczy je metodą Vincenty'ego na elipsoidzie WGS-84 (czyli na kształcie Ziemi używanym w GPS), co daje dokładność rzędu milimetrów nawet na setkach kilometrów. Dla intuicji: na kuli wzory wyglądałyby tak (\( \varphi \) – szerokość, \( \lambda \) – długość, \( \Delta\lambda = \lambda_2 - \lambda_1 \)):

\[ \alpha = \operatorname{atan2}\!\bigl(\sin\Delta\lambda\,\cos\varphi_2,\; \cos\varphi_1\sin\varphi_2 - \sin\varphi_1\cos\varphi_2\cos\Delta\lambda\bigr) \]

Odległość \( D \) to długość łuku koła wielkiego. W programie używana jest wersja elipsoidalna, a nie sferyczna: te dwie różnią się o ułamek procenta, co przy 300 km daje do kilkuset metrów.

Wynik: dla każdego szczytu mamy parę (\( \alpha \), \( D \)). Azymut od razu daje pozycję poziomą na zdjęciu (krok 3), a odległość \( D \) przechodzi do kroku 2.

4. Krok 2: kąt wzniesienia

Kąt wzniesienia \( \theta \) to kąt między poziomem obserwatora a linią widzenia do szczytu: dodatni, gdy szczyt jest „w górę”, ujemny, gdy „w dół”. Tak, kąt może być ujemny nawet dla szczytu wyższego od obserwatora, jeśli jest dostatecznie daleko: Ziemia „ucieka w dół”.

4.1. Najprostsza wersja: płaski teren

\[ \theta = \operatorname{atan}\!\left( \frac{h_2 - h_1}{D} \right) \]

To działa tylko na krótkich dystansach, bo pomija kulistość Ziemi.

4.2. Krzywizna Ziemi

Poziom obserwatora (styczna do Ziemi) oddala się od powierzchni. W odległości \( D \) Ziemia leży poniżej niego o \( D^2 / 2R \). Dla 300 km to ponad 7 km, więc cel o 289 m wyżej od oczu leży daleko pod poziomem:

\[ \theta_0 = \operatorname{atan2}\!\left( h_2 - h_1 - \frac{D^2}{2R},\; D \right) \]
powierzchnia Ziemi (wypukła) styczna do Ziemi w miejscu obserwatora oczy obserwatora (h₁ nad powierzchnią) szczyt (h₂) linia widzenia bez atmosfery (θ₀ < 0) D²/2R

Schemat poglądowy (nie w skali). Ziemia jest wypukła, więc w odległości D jej powierzchnia leży poniżej stycznej o D²/2R. Szczyt stoi na tej powierzchni, więc nawet gdy jego wierzchołek jest wyżej niż oczy obserwatora, linia widzenia do niego może biegnąć w dół (ujemny kąt θ₀).

4.3. Refrakcja: światło idzie krzywo

Powietrze jest gęstsze niżej, więc promień światła zakrzywia się w stronę gęstszego ośrodka, czyli ku Ziemi. Dlatego widzimy trochę dalej, niż wynikałoby z geometrii. Najprostsza poprawka to współczynnik refrakcji \( k' \) (w standardowej atmosferze około 0,13): promień ma wtedy krzywiznę równą \( k'/R \), czyli opadanie Ziemi względem linii widzenia jest mniejsze:

\[ \Delta(D) = \frac{(1 - k')\,D^2}{2R}, \qquad \theta_{\text{std}} = \operatorname{atan2}\!\bigl( h_2 - h_1 - \Delta(D),\; D \bigr) \]

To jest metoda „standardowa”: jeden współczynnik na całą trasę. Wartość \( k' = 0{,}13 \) odpowiada gradientowi współczynnika załamania około −20 jednostek N na kilometr wysokości.

4.4. Dwie strefy \( k' \)

Gdy tuż nad ziemią leży warstwa o innych własnościach (np. inwersja), jedno \( k' \) nie wystarcza. Można podać \( k_1 \) od obserwatora do granicy \( B \) i \( k_2 \) dalej. Zakrzywienie blisko obserwatora wpływa na całą dalszą trasę, więc program liczy średnią ważoną drogą:

\[ k_{\text{eff}} = \frac{k_1\,\bigl(D^2 - (D-B)^2\bigr) + k_2\,(D-B)^2}{D^2} \quad (D > B), \qquad \Delta = \frac{(1-k_{\text{eff}})\,D^2}{2R} \]

Dla celów bliższych niż \( B \) liczy się tylko \( k_1 \).

4.5. Refrakcja z radiosondy (ray tracing)

Stałe \( k' \) to uproszczenie. Radiosonda mierzy ciśnienie, temperaturę i punkt rosy na kolejnych wysokościach, więc możemy policzyć, jak w rzeczywistości zmienia się gęstość optyczna powietrza z wysokością i prześledzić promień przez tę atmosferę.

a) Refrakcyjność z pomiarów. Dla światła widzialnego (długość fali 0,55 µm):

\[ N = \left( 287{,}6155 + \frac{1{,}62887}{\lambda^2} + \frac{0{,}01360}{\lambda^4} \right) \frac{273{,}15}{1013{,}25}\,\frac{p}{T} \;-\; 11{,}27\,\frac{e}{T}, \qquad n = 1 + N \cdot 10^{-6} \]

Tu \( p \) – ciśnienie [hPa], \( T \) – temperatura [K], \( e \) – prężność pary wodnej [hPa] policzona z punktu rosy. Uwaga: dla światła widzialnego wpływ pary wodnej jest mały i ma przeciwny znak niż dla fal radiowych, więc wzoru „radiowego” nie wolno tu użyć.

b) Profil \( N(h) \). Między punktami pomiarowymi program interpoluje liniowo, a wynik wygładza (średnia z 50 m), żeby szum pomiarowy nie tworzył fałszywych obrazów. Poza zakresem sondy zakłada gradient standardowy.

c) Tor promienia. W atmosferze kulistosymetrycznej obowiązuje prawo Snella w postaci \( n\,r\cos\theta = \text{const} \) (\( r = R + h \)). Z niego wynikają równania toru promienia, gdzie \( s \) to droga wzdłuż promienia, a \( \varphi \) kąt środkowy (\( D = R\varphi \)):

\[ \frac{dr}{ds} = \sin\theta, \qquad \frac{d\theta}{ds} = \cos\theta\left( \frac{1}{r} + \frac{1}{n}\frac{dn}{dh} \right), \qquad \frac{d\varphi}{ds} = \frac{\cos\theta}{r} \]

Program całkuje je numerycznie (metodą Runge–Kutty, krok 500 m): wypuszcza promień z wysokości oczu pod kątem \( \theta \) i sprawdza, na jakiej wysokości jest po przebyciu odległości \( D \).

d) Którędy trafić w cel. Szukamy kątów \( \theta \), dla których promień trafia dokładnie na wysokość szczytu:

\[ g(\theta) = h_{\text{promień}}(D;\ \theta) - h_2 = 0 \]

Program przeszukuje kąty w pobliżu \( \theta_0 \) (±1,5°, krok 0,03°, gęściej tam, gdzie \( g \) jest bliskie zeru) i każde miejsce zerowe precyzuje bisekcją. W zwykłej atmosferze wychodzi jedno rozwiązanie. Przy inwersji może ich być kilka: obserwator widzi ten sam szczyt w kilku miejscach naraz (obraz górny, odwrócony, dolny) – to jest miraż. Obraz główny to rozwiązanie najbliższe kątowi standardowemu \( \theta_{\text{std}} \) dla \( k' = 0{,}13 \). Pozostałe pokazywane są jako dodatkowe (pomarańczowe) znaczniki.

4.6. Dwie radiosondy

Atmosfera nad początkiem i końcem długiej trasy bywa różna. Dlatego można podać dwie sondy: bliższą (działa od obserwatora) i dalszą (działa za granicą). Na odcinku przejścia obie płynnie się mieszają. Jeśli \( s \) to odległość od obserwatora, \( B \) – granica, a \( W \) – szerokość przejścia, to w równaniu toru:

\[ \frac{1}{n}\frac{dn}{dh} \;=\; (1-w(s))\,q_1(h) + w(s)\,q_2(h), \qquad w(s) = 3x^2 - 2x^3,\quad x = \operatorname{clip}\!\left(\frac{s-(B-W/2)}{W},\,0,\,1\right) \]

Program nie zna położenia stacji sondujących, liczy się tylko ich kolejność i podana granica.

5. Krok 3: od kąta i azymutu do pikseli

Mamy już dla każdego szczytu azymut \( \alpha \) i kąt \( \theta \) (liczone z tą samą refrakcją). Teraz trzeba je zamienić na piksele. Program nie zna obiektywu ani zoomu aparatu, więc uczy się skali ze zdjęcia: użytkownik wskazuje dwa rozpoznane szczyty (azymut i kąt znamy z obliczeń, piksele odczytujemy na zdjęciu).

5.1. Poziomo

Dwa punkty kalibracji: azymuty \( A_1, A_2 \) i piksele \( X_1, X_2 \). Skala to liczba pikseli na stopień azymutu i dalej interpolacja liniowa:

\[ X(\alpha) = X_1 + (\alpha - A_1)\,\frac{X_2 - X_1}{A_2 - A_1} \]

5.2. Pionowo

Punkty kalibracji mają kąty \( \theta_i \) i piksele \( Y_i \). Dla szukanego kąta \( \theta \) program interpoluje liniowo między sąsiednimi punktami (posortowanymi wg kąta), a poza ich zakresem przedłuża prostą z dwóch skrajnych:

\[ Y(\theta) = Y_1 + (\theta - \theta_1)\,\frac{Y_2 - Y_1}{\theta_2 - \theta_1} \]
Ważne: kąty punktów kalibracji zależą od refrakcji. Zmieniasz refrakcję (inne \( k' \), inna radiosonda), a kąty w tabeli kalibracji zostają stare. Dlatego jest przycisk „Przelicz kąty”, który liczy je na nowo dla tej samej refrakcji, której używają szczyty na zdjęciu.

6. Przykład z liczbami

Obserwator: Śnieżnik Kłodzki, współrzędne 50,2075°N, 16,8469°E, wysokość oczu \( h_1 = 1454 \) m. Cel: Hochwechsel (Alpy), \( h_2 = 1743 \) m.

KrokWynik
1. Vincenty: odległość i azymut\( D = 305{,}48 \) km, \( \alpha = 193{,}30^\circ \) (kierunek SSW)
2a. Opadanie Ziemi \( D^2/2R \)7324,6 m
2b. Kąt bez atmosfery \( \theta_0 \)\( \operatorname{atan2}(289 - 7324{,}6;\ 305500) = -1{,}319^\circ \)
2c. Standard \( k' = 0{,}13 \)\( \Delta = 0{,}87 \cdot 7324{,}6 = 6372{,}4 \) m, \( \theta_{\text{std}} = -1{,}141^\circ \)
2d. Radiosonda Prostějov (27.12.2024, 12 UTC)trzy obrazy: −0,922°, −0,971°, −1,023°
2e. Radiosonda Wiedeńjeden obraz: −0,967°
2f. Obie sondy (granica 150 km, przejście 40 km)pięć obrazów: −0,928°, −0,933°, −0,967°, −0,971°, −1,013°

Przykładowa kalibracja (liczby ilustracyjne): azymut 190,0° → piksel 400 i 196,0° → piksel 2200 daje skalę 300 px/°, więc \( X(193{,}30^\circ) = 400 + 3{,}30\cdot 300 \approx 1391 \) px. Dla kąta: −1,00° → 520 px i −0,50° → 380 px (skala −280 px/°). Obraz główny −0,967° wypada na \( Y \approx 511 \) px, a ten sam szczyt według standardu (−1,141°) na \( Y \approx 560 \) px, czyli prawie 50 pikseli niżej. Różnice między atmosferami naprawdę widać na zdjęciu.

7. Co program rysuje na tej podstawie

8. Czego program nie robi

Wyniki są wskazówką do interpretacji zdjęcia, a nie dowodem.

© 2026 OGraf.pl | opis dla Azymator v.3.45.88