Monthly Archive: czerwiec 2015

Przemyślenia dotyczące zakrzywiania światła

Doznałem wczoraj oświecenia jak usunąć artefakt z symulatora czarnej dziury.

Problem

artifact

W obecnym symulatorze czarnej dziury istnieje jeden brzydki aspekt generowanego obrazu. Dokładnie 90 stopni od kierunku do czarnej dziury powstaje artefakt graficzny - rozmazany pasek błędnie obliczanych pikseli (patrz obrazek po prawej). Powód tkwi zaszyty głęboko w mechanizmie generowania obrazu.

W skrócie wygląda to tak - nie da się w rozsądnym czasie obliczyć koloru każdego piksela przez raytracing. Korzystając zatem z symetrii czarnej dziury Schwarzschilda, stworzyłem sobie gotową tabelę zakrzywień promieni. Dzięki symetrii, każdy promień mogę opisać jednym parametrem - w uproszczeniu, tym, w jakiej odległości mija on czarną dziurę w najbliższym punkcie toru (dokładniej: parametrem zderzenia). Do odchylenia potrzebuję jeszcze drugiego parametru, a mianowicie odległości od czarnej dziury, z której go wysyłam/odbieram - im większą część pełnej trasy promień ma do przebycia, tym większe odchylenie.

Tak stabelaryzowane dane trafiały do karty graficznej. Później, w trakcie rysowania, każdy piksel był przeliczany na kierunek wysyłania promienia, a ten na parametr zderzenia. Odległość była znana niezależnie od tego. Odpowiednie odchylenie było odczytywane z tabeli i właściwy kolor nadawany pikselowi.

W teorii wszystko jest fajnie, ale pojawił się jeden problem - parametry zderzenia promieni wysłanych w różne kierunki bliskie 90 stopni od czarnej dziury są prawie identyczne. To daje niemal identyczne wartości odchylenia, co przekłada się na ten sam kolor piksela. Powstaje brzydki pasek.

(więcej…)

Nowy artykuł i program

Dodałem dzisiaj dwie nowe rzeczy.

Pierwsza z nich to 3 część cyklu o teorii względności - tym razem opisywałem pojęcie metryki i jego różne zastosowania. Do przeczytania tutaj.

Druga to programik, pozwalający zniekształcać obrazy tak, jak byłyby zniekształcone przez czarną dziurę. Pełny opis wraz z linkiem do pobrania tutaj.

Miłej zabawy :)

Część 3 - metryka

metryka1Spis treści serii

Wspomnieliśmy już o czymś takim, jak długość wektora, jednak nic o tym, co to właściwie jest. Na płaszczyźnie sprawa jest prosta - gdy przesuniemy się o v_x w osi x i v_y w osi y, odległość między punktami początkowym i końcowym wynosi \sqrt{v_x^2 + v_y^2} (co można zobaczyć, rysując trójkąt prostokątny i korzystając z twierdzenia Pitagorasa - patrz rysunek). Nie zawsze jednak musi to tak wyglądać i tu wkracza metryka.

Metryka to sposób na uogólnienie twierdzenia Pitagorasa. Nie zawsze współrzędne odpowiadają odległościom wzdłuż prostopadłych osi i nie zawsze da się utworzyć takie współrzędne (ale nie uprzedzajmy faktów). Chcemy zatem mieć jakiś sposób liczenia odległości między punktami przesuniętymi o \Delta x^\mu, gdy x^\mu to współrzędne określone w jakiś bliżej niesprecyzowany sposób.

(więcej…)

Część 2 - współrzędne, wektory i konwencja sumacyjna

Spis treści serii

Podstawowym obiektem w OTW jest czasoprzestrzeń. Jako obiekt matematyczny formalnie jest to rozmaitość różniczkowa, ale na nasze potrzeby wystarczy fakt, że jest to pewien zbiór punktów, zwanych zdarzeniami, które można opisywać współrzędnymi. W przypadku OTW czasoprzestrzeń jest 4-wymiarowa, co oznacza, że potrzebne są 4 współrzędne - jedna czasowa i trzy przestrzenne.

Współrzędne można nazywać w zasadzie dowolnie (np. x, y, z, t), ale ponieważ wielokrotnie potrzebne będzie odwoływanie się do całej czwórki współrzędnych naraz, wygodnie jest oznaczyć je numerami. Przyjęło się oznaczać współrzędną czasową jako 0, a pozostałe 1, 2, 3. Współrzędną nr \mu będziemy zapisywać tak: x^\mu (uwaga: w tym przypadku to nie jest potęgowanie!). \mu w tym przypadku nazywane jest indeksem lub wskaźnikiem (tutaj: górnym). Konwencjonalnie, kiedy mamy na myśli jedną ze wszystkich 4 współrzędnych, używamy litery greckiej; jeśli chodzi o którąś ze współrzędnych przestrzennych, używamy liter łacińskich.

(więcej…)

Nowa kategoria - artykuły

Doszedłem do wniosku, że skoro już mam swój blog, to mogę go wykorzystać też do jednego z moich ulubionych zajęć - przekazywania wiedzy. Na pierwszy ogień poszedł mój ulubiony temat, czyli teoria względności i czarne dziury. Dziedzina ta uchodzi za matematycznie bardzo złożoną, i nie bez powodu, jednak ogólny obraz jest moim zdaniem do ogarnięcia przez osobę z licealnym wykształceniem (przy założeniu, oczywiście, że będzie zainteresowana zrozumieniem tematu).

Zacząłem więc cykl artykułów, mający na celu przybliżenie Czytelnikom tej fascynującej tematyki. Czy mi to wychodzi - przekonajcie się sami :)

Część 1 - pochodne cząstkowe

Spis treści serii

Jak wspomniałem we wstępie, zakładam, że Czytelnik zna pojęcie pochodnej funkcji. Jest to dobra podstawa, ale żeby wgłębić się w teorię względności, potrzebujemy to pojęcie nieco rozszerzyć. Zapoznamy się zatem z pochodną cząstkową. Cóż to takiego?

Przypomnijmy sobie najpierw zwykłą pochodną. Pochodną funkcji f(x) zapisujemy jako f'(x) lub \frac{df}{dx}. Oznacza ona, łopatologicznie mówiąc, tempo zmiany funkcji f w miarę zmieniania argumentu x. Przykładowo, gdy f(x) = x^2, \frac{df}{dx} = 2x.

Co jednak, gdy funkcja zależy od więcej niż jednej zmiennej? Np. możemy mieć funkcję f(x,y) = x^2 + y^2, która każdemu punktowi płaszczyzny przypisze kwadrat jego odległości od początku układu współrzędnych. Jak w ogóle określić pochodną takiej funkcji?

(więcej…)

Rozwój strony

Strona zaczyna osiągać stan, w którym nadaje się do pokazania komuś, zatem jeśli to czytasz, najwyraźniej już się na to zdecydowałem :)

Oprócz dwóch artykułów o projekcie dotyczącym generowania wszechświata, dodałem listę swoich projektów i zaczynam tworzyć ich opisy. Póki co opisałem symulator czarnej dziury i zastanawiam się, czy dodać w tym opisie część matematyczną (komentarze w tej kwestii będą mile widziane). Opisy pozostałych projektów dodam w najbliższych dniach.

Generowanie struktury wszechświata

Struktura przestrzeni

Tworzenie wszechświata trzeba od czegoś zacząć. Dobrym początkiem będzie określenie jego kształtu.

Najwygodniejszym i chyba najbardziej oczywistym kształtem jest sześcian. Wówczas każda z trzech współrzędnych będzie liczbą z tego samego zakresu, a dodatkowo bardzo łatwo jest sprawić, aby wszechświat nie miał granic - wystarczy dodać warunek, że opuszczenie sześcianu z jednej strony jest równoznaczne z wejściem do sześcianu z drugiej strony. Przypomina to sytuację znaną z gry w węża, w której wąż opuszczający ekran z prawej strony wracał znowu z lewej - tylko w trzech wymiarach.

Mamy zatem sześcienną przestrzeń, w której każdy punkt może być opisany trzema liczbami: x,\; y,\; z\; \in (a,b). Pojawia się pytanie: jakiego typu danych użyć do reprezentowania współrzędnych punktu? Nie uda się na nie odpowiedzieć bez wcześniejszego sprawdzenia, z jak dużymi liczbami mamy do czynienia.
(więcej…)

Projekt Universe

Projekt, który tymczasowo nazywam po prostu "Universe" (lepsza nazwa by się przydała, ale nie jest priorytetem), ma na celu stworzenie interaktywnego wszechświata w realistycznej skali - tj., zawierającego miliardy galaktyk, złożonych z miliardów gwiazd, z których część ma planety, część tworzy układy wielokrotne itd., itp.

Inspiracja pochodzi z kilku źródeł:

  • Space Engine - program pozwalający na zwiedzanie realistycznego Wszechświata
  • Minecraft - gra dająca niemal nieograniczone możliwości budowania i interakcji ze światem
  • Wurm Online - gra w pewnych aspektach podobna do Minecrafta, dająca również ogromne możliwości kształtowania świata

W skrócie - celem byłoby osiągnięcie możliwości interakcji ze światem podobnych do tych z Minecrafta lub Wurma, lecz we wszechświecie o skali Space Engine.

Oczywiście, skala przedsięwzięcia jest ogromna, dlatego projekt będzie zapewne ciągnął się latami i jego ukończenie stoi pod znakiem zapytania. Zamierzam jednak małymi kroczkami popychać go do przodu, aż może kiedyś nabierze interesującego kształtu, a postępy prac opisywać tutaj, w kategorii "Projekt Universe".