Spirala Ulama i program generujący plik BMP

Niedawno przeglądają sieć natknąłem się na ten obrazek po prawej stronie. Jest to tzw. spirala Ulama. Ciekawe jest to że pixele czarne i białe nie są przypadkowo rozrzucone po tej bitmapie. Rysunek po prawej stronie przedstawia liczby ułożone w spirali, co łatwo zauważyć. I jeżeli każdą z tych liczb potraktować jako poszczególny pixel, a w dodatku liczby które są liczbami pierwszymi pokolorować na czarno, a resztę np. na biało to otrzymamy coś podobnego do rusunku poniżej. Mówię coś podobnego ponieważ rysunek ten obiega nieco od koncepcji którą przed chwilą przedstawiłem.
Spirala Ulama

A tak swoją drogą zajmując się rysunkiem, co w nim takiego wyjątkowego? Jeżeli przyjrzymy mu się dokładniej możemy zauważyć pewne prawidłowości np. dwie przykładowe proste linie: pionowa i pozioma stykające się w środku obrazka. Dodatkowo możemy zaobserwować, że począwszy od środka, poziomo w prawo i pionowo w górę istnieje linia na której nie ma liczb pierwszych, oraz w takiej samej orientacji poziomo w lewo i pionowo w górę występują linie na której jest bardzo duże skupienie liczb pierwszych.
Spirala Ulama
Zauważamy również, że w środku obrazka jest jakby skupienie czarnych punktów tzn. skupienie liczb pierwszych wokół liczby 1. Dlaczego tak jest to prawdopodobnie na razie jest niewyjaśnione, zatem przed przyszłymi matematykami stoi kolejne wyzwanie. I również na przekątnej spirali możemy zauważyć skupisko liczb pierwszych. Potwierdzają to testy statystyczne, o czym możemy przeczytać w Wikipedii.

Spirala Ulama

Kolejnym zjawiskiem jakie udało mi się zaobserwować jest to, że na przekątnej bitmapy zauważamy skupisko liczb pierwszych tworzących linie proste, które w dodatku są do siebie albo równoległe albo prostopadłe.
Spirala Ulama
Jednak najciekwszą rzeczą wydają się kwadraty. które jesteśmy w stanie odrysować s poszczególnych skupisk liczb pierwszych i które wydaje się są ułożone względem siebie w pewnym szyku.
Spirala Ulama
Powyższe spostrzeżenia to w większości moje obserwacje, zatem istnieje zapewne wiele prawidłowości które można zaobserwować gołym okiem, dlatego zachęcam do komentowania i opisywania swoich spostrzeżeń.
Jak już wspomniałem rusunek spirali Ulama którą przedstawiłem na swojej stronie nie jest idealnym pierwowzorem tego co możecie znaleźć w sieci. Prawdopodobnie bardziej niż, sam rysunek zainteresowało mnie wygenerowanie go. Dlatego poświęcając kilka godzin napisałem aplikację do tego celu w języku C++. W swoim kodzie przyjąłem że jedynka jest liczbą pierwszą, co jest rzadko spotykane. Program który napisałem operuje na dynamicznej tablicy (taka która jest tworzona w czasie rzeczywistym działania programu RTS). Wypełniana jest ona liczbami od 1 do n (n – liczba podana przez użytkownika), oczywiście według koncepcji spirali Ulama. Następnie wykonuje się funkcja która “rysuje” bitmapę, wedle schematu opisanego na samym początku artykułu. Słowo rysuję zostało ujęte w cudzysłów ponieważ program ten generuje plik .bmp od zera tzn. tworzy jego strukturę początkując od nagłówka informacyjnego, następnie tworząc nagłówek główny, po którym następuje paleta określająca kolory puntków (odsyłam do opisu budowy pliku BMP tutaj). Program ten posiada niestety swoje wady. Aby móc oglądać spiralę w rozmiarach 1024×1024 (do której link można znaleźć np tutaj), musiałem zostawić komputer z działającym programem na ok 5h. Dużo mniejsze pliki są oczywiście generowane w przystępnym czasie. Dlaczego ten czas jest tak ogromy (samo zapisanie pliku BMP, w paint’cie zajmuje mniej niż sekundę), może wynikać z wykorzystania biblioteki iostream, w której strumień zapisuje pliki bezpośrednio na dysku.
Kod źródłowy

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s