Obracająca się Ziemia

Stronę tą wyświetlono już: 1544 razy

Opis programu i algorytmu

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.

Siatka Ziemi
Rys. 1
Siatka Ziemi
Zwinięta siatka Ziemi w programie <b>EarthAnim.exe</b>.
Rys. 2
Zwinięta siatka Ziemi w programie EarthAnim.exe.

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.

Poglądowy rysunek pomocny przy wyprowadzeniu wzoru transformacji punktów.
Rys. 3
Poglądowy rysunek pomocny przy wyprowadzeniu wzoru transformacji punktów.

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:

Równanie [1] [1]

Zapis wyrażenia w formacie TeX-a:

\alpha=\frac{x}{w}\cdot\pi

Równanie [2] [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:
Równanie [3] [3]

Zapis wyrażenia w formacie TeX-a:

x'=x_c-\Delta x

Równanie [4] [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:

Równanie [5] [5]

Zapis wyrażenia w formacie TeX-a:

\Delta x=R\cdot \sin\beta\cdot\cosalpha

Równanie [6] [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:

Równanie [7] [7]

Zapis wyrażenia w formacie TeX-a:

x'=\frac{w}{2}-\frac{w}{2}\cdot\sin\alpha\cdot\cos\beta=\frac{w}{2}-\frac{w}{2}\cdot\sin\left(\frac{x}{2}\cdot\pi\right)\cdot\cos\left(\frac{y}{w}\cdot\pi\right)

Równanie [8] [8]

Zapis wyrażenia w formacie TeX-a:

y'=\frac{w}{2}-\frac{w}{2}\cdot\beta=\frac{w}{2}-\frac{w}{2}\cdot\cos\left(\frac{y}{w}\cdot\pi\right)

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

Jeżeli program SfAnim.exe się nie uruchamia, to najprawdopodobniej trzeba doinstalować w systemie Microsoft Visual C++ 2008 Redistributable Package (x86).

Załączniki:

Animacja obracającej się Ziemi
Program SfAnim.exe tworzący animację z umieszczonej na dysku twardym w miejscu położenia programu bitmapy o nazwie file.jpg

Komentarze