Program EarthAnim.exe transformuje płaską siatkę Ziemi (rys. 1) do okręgu i nakłada cieniowanie (rys. 2), tak aby ostatecznie uzyskać efekt kuli ziemskiej. Cała operacja wykonywana jest z wykorzystaniem Diract Draw.
Czas troszeczkę uchylić rąbka tajemnicy, czyli jak to działa? A zwijanie bitmapy działa mniej więcej tak jak na rysunku poniżej zostało to rozrysowane.
Transformacja punktów x, y z bitmapy źródłowej do punktów x', y' bitmapy docelowej odbywa się poprzez zastosowanie dwóch kątów α i ß, które z kolei powiązane są z współrzędnymi x, y punktu na mapie źródłowej w następujący sposób:
[1]
Zapis wyrażenia w formacie TeX-a:
\alpha=\frac{x}{w}\cdot\pi
[2]
Zapis wyrażenia w formacie TeX-a:
\beta =\frac{y}{w}\cdot\pi
gdzie:
w - szerokość bitmapy o kształcie kwadratu.
Teraz można rozpisać ogólny wzór, na położenie punktów x', y' w następujący sposób:
[3]
Zapis wyrażenia w formacie TeX-a:
x'=x_c-\Delta x
[4]
Zapis wyrażenia w formacie TeX-a:
y'=y_c-\Delta y
gdzie:
xc, yc - położenie w środku bitmapy a więc równe połowie jej szerokości
Δx, Δy - przemieszczenia związane z współrzędnymi sferycznymi
Teraz rozpiszę wzory na Δx, Δy na podstawie rysunku 3 w następujący sposób:
[5]
Zapis wyrażenia w formacie TeX-a:
\Delta x=R\cdot \sin\beta\cdot\cosalpha
[6]
Zapis wyrażenia w formacie TeX-a:
\Delta y=R\cdot\cos \beta
Podstawić teraz należy do równań [3], [4] równania [5], [6], [1], [2] w następujący sposób:
I w ten jakże przebiegły sposób uzyskałem wzory transformujące współrzędne punktu z bitmapy źródłowej do docelowej uzyskując coś na kształt sfery, ale bez cieniowania.
Wideo prezentacja programu
Wersja prezentacji z lepszej jakości bitmapą i z zmienionym kierunkiem obrotu Ziemi na poprawny.
Druga wersja programu
Ostatnio zdarzyło mi się napisać drugą wersję programu, która nie wykorzystuje DiractDraw a jedynie czyste WinApi. Program nazywa się ShAnim.exe i generuje on animację z pliku file.jpg, który musi być umieszczony w tym samym miejscu co program SgAnim. Możliwe jest również wygenerowanie przez program animacji w postaci pliku avi_anim.avi. Przykład wygenerowanej w ten sposób animacji pokazuję poniżej dla gorącej planety Wenus.
Druga animacja, tym razem planety Mars.
Oraz ostatnia w najwyższej rozdzielczości utworzona animacja Merkurego