Metoda cieniowania lub nakładania mapy rastrowej w celu odzwierciedlenia pory dnia i światła otoczenia


14
  • Mam dzienny raster mojego obszaru nauki.
  • Mam ponad 20 liczników w obszarze badań, które liczą „rzeczy” ze znacznikiem czasu.
  • Za pomocą PyEphem określiłem rodzaj światła otoczenia dla każdego zebranego punktu danych.

Co chciałbym zrobić:

  • Dodaj szarą / półprzezroczystą nakładkę, aby odbijać światło otoczenia (Zmierzch, Wschód, dzień, zachód słońca i ciemność).

  • Cel końcowy: stworzenie opartej na czasie wizualizacji zbioru danych, która podkreśla porę dnia. Lub być w stanie stworzyć migawkę w określonym czasie z odpowiednią zacienioną nakładką.

  • Pomyśl o tym jako o obrazie:

glob dzień / noc źródło


2
Dodatkowe odpowiedzi (z działającym kodem Mathematica ) są dostępne na stronie mathematica.stackexchange.com/questions/3326/… .
whuber

Odpowiedzi:


9

streszczenie

Biorąc pod uwagę położenie Słońca, możesz łatwo utworzyć siatkę natężenia światła na powierzchni (ignorując efekty atmosferyczne i topograficzne) we współrzędnych lat-lon. Zmień tę siatkę zgodnie z potrzebami i nałóż ją na mapę.

Detale

Wzory są standardowe dla współrzędnych sferycznych: wektor jednostkowy odpowiadający współrzędnej sferycznej (lon, lat) wynosi

(cos(lon)cos(lat), sin(lon)cos(lat), sin(lat)).

Intensywność zależy od cosinusa między jednostkowym kierunkiem na zewnątrz normalnym („w górę”) a kierunkiem do słońca. Ten cosinus jest tylko iloczynem kropkowym tych dwóch wektorów jednostkowych. To znaczy, niech (x, y, z) będzie wektorem jednostkowym skierowanym w stronę słońca (we współrzędnych geocentrycznych), przekształci geodezyjną (lat, lon) centralnego punktu każdej komórki siatki w wektor jednostkowy (xi, eta, zeta) i oblicz

(x,y,z) . (xi, eta, zeta) = x*xi + y*eta + z*zeta.

Wszelkie wyniki mniejsze niż 0 odpowiadają niewidzialnemu słońcu, więc ustaw je na zero.

Uwagi dotyczące wdrożenia

Obliczenia te są proste do wykonania za pomocą algebry mapy, zaczynając od siatki wartości (lat, lon) (tak to zrobiłem) lub od pary siatek, jednej dla szerokości i drugiej dla długości geograficznej (tak byś miał zrobić to na przykład za pomocą oprogramowania ESRI).

(Aby utworzyć siatkę szerokości i długości geograficznej, uformuj odpowiednio siatkę współrzędnych y lub współrzędnych x we ​​współrzędnych geograficznych, a następnie rzutuj ją.) Na podstawie tych informacji początkowych oblicz raz na zawsze trzy siatki [xi], [eta ] i [zeta] (lub siatka o pojedynczym wektorze [xi, eta, zeta]) w celu przedstawienia kierunków w górę w komórkach siatki. Dla dowolnej pozycji słońca obliczenie staje się prostą kombinacją liniową [xi], [eta] i [zeta] podaną powyżej; Słońce określa współczynniki x, yiz z (które oczywiście są tylko liczbami).

Przykład

Oto mapa świata w rzucie Plate Carree o takiej siatce intensywności (216 na 432 komórek).

Intensywność

Główny południk znajduje się w centrum, a północ jak zwykle na szczycie. Do tego obliczenia ustawiłem wektor słońca proporcjonalnie na (0,6, -0,8, 0,5), aby przybliżyć dzień letni w południe nad oceanem środkowoatlantyckim. (Z perspektywy czasu wartość z 0,4 byłaby bardziej realistyczna; słońce nigdy nie dociera tak daleko na północ).

Nakładka alfa (która sprawia, że ​​jaśniejsze obszary są również nieco bardziej przezroczyste) na kolorowej mapie Aster tworzy ten obraz.

Mapa świata

Wraz ze zmianą czasu wektor słońca (x, y, z) jest ponownie obliczany, co wymaga ponownego obliczenia siatki intensywności. To szybkie obliczenie. Nie potrzebujesz też wysokiej rozdzielczości: użyłem tylko jednej dziesiątej rozdzielczości oryginalnej siatki (2160 na 4320 komórek) dla tej ilustracji. Interpolacja zastosowana do wyświetlenia siatki zgrubniejszej intensywności działa dobrze, aby wypełnić luki. Powinno to umożliwić ci niemal natychmiastową modyfikację wyświetlacza, tworząc płynną animację.


2
Bardzo, bardzo miło
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.