Spirala Ulama na parkietażu Penrose'a

Podzielność. Reszty z dzielenia. Kongruencje. Systemy pozycyjne. Równania diofantyczne. Liczby pierwsze i względnie pierwsze. NWW i NWD.
Labinnah
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 19 lip 2019, o 19:14
Płeć: Mężczyzna
Lokalizacja: Łódź

Spirala Ulama na parkietażu Penrose'a

Post autor: Labinnah »

Jako że jest to mój pierwszy post na forum - witam wszystkich.

Pewnie większości z Was znana jest spirala Ulama, w różnych jej odmianach na kwadratach, sześciokątach i innych i charakterystyczne linie z liczbami pierwszymi. Byłem ciekawy czy taki efekt występuje też na pokryciu quasi periodycznych typu parkietażu Penrose'a. Na początku próbowałem zamalowywać romby na piechotę, ale ciężko "na oko" stwierdzić który jest bliżej środka (za punkt odniesienia przyjąłem środek [przecięcie przekątnych] rombu). W sumie dobrze się stało bo efekt jest widoczny dopiero w bardzo dużej skali i przy ręcznym malowaniu na pewno bym się zniechęcił zanim stały by się on widoczny.

Poniżej bardzo znacznie zmniejszony efekt zamalowania lub nie ~ 120 milionów rombów.
AU
AU
penrose-ulam18-preview-vsmall.png (186.87 KiB) Przejrzano 301 razy
Na wyjściu widoczne są ewidentne promienie (20 sztuk) wychodzące ze środka. Dodatkowo na pełnoskalowym obrazku jaki wygenerowałem widać delikatniejsze koncentryczne kręgi, jakby ścieżki na płycie.

Nie jestem do końca przekonany czy to jest prawdziwy efekt czy tylko wynik jakiegoś mojego błędu programistycznego, przybliżeń liczb zmiennoprzecinkowych czy też przybliżeń w sortowaniu rombów w spiralę. Jednakże efekt jest na tyle ciekawy że postanowiłem podzielić się nim z kimś kto być może będzie to w stanie potwierdzić i być może wyciągnąć z tego jakieś przydatne wnioski

Jako że mogę wkleić tylko jeden link, podaję

Kod: Zaznacz cały

https://github.com/Hannibal-pl/penrose-ulam
, gdzie wrzuciłem kod źródłowy (tak wiem że niezbyt ładny, optymalny, itd...) programu, który stworzyłem do wygenerowania tego obrazka (a raczej jego pełnoskalowej wersji).
sylvi91
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 10 paź 2017, o 04:40
Płeć: Mężczyzna
wiek: 47
Lokalizacja: Łódź
Podziękował: 6 razy

Re: Spirala Ulama na parkietażu Penrose'a

Post autor: sylvi91 »

Cześć.
Na załączonych obrazkach na tym forum to i tak niewiele widać. Ale faktycznie wygenerowałem plik graficzny o wielkości 21.7 MB i kiedy powiększyłem to zobaczyłem romby, o których zamalowywaniu wspominałeś.
Właściwie ciekawy efekt i program, który to robi. Nie znam biblioteki Cairo, ale nie wiem czy nie lepiej było by zapisywać wynik do pliku graficznego wektorowego niż rastrowego. Wtedy wynik programu powinien być chyba mniejszy objetościowo i dać lepsze efekty przy powiększeniu. Może niedługo zmienią skrypt forum na nowocześniejszy, to obrazki będa lepiej obsługiwane. Geometria i przedstawianie pewnych zagadnień na płaszczyźnie lub w 3-D to istotny element matematyki, a niektóre rysunki wykonane programowo nie sposób tu pokazać.
Labinnah
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 19 lip 2019, o 19:14
Płeć: Mężczyzna
Lokalizacja: Łódź

Re: Spirala Ulama na parkietażu Penrose'a

Post autor: Labinnah »

Ja również jej nie znam, mój program to znacznie zmodyfikowana wersja skryptu do rysowania samego parkietażu Penrose'a wzięta z tej strony:

Kod: Zaznacz cały

https://preshing.com/20110831/penrose-tiling-explained/
.

Co do zapisu wektorowego to nie sądzę aby plik zawierający prawie miliard węzłów dał się otworzyć w jakimkolwiek programie, już przy kilku milionach zwykle jest już z tym problem.

Dodatkowo przy wklejaniu tego rysunku nie chodziło mi o to że składa się on bazowo z rombów tylko o to jak te "pokolorowane" rozkładają się na płaszczyźnie. A to widać na wklejonej tu zmniejszonej wersji, nawet jak z rombów została tylko mgiełka.

Celem moim było zainteresowanie kogoś bardziej zaznajomionego z matematyką, gdyż potencjalnie można z tego wyciągnąć jakie ciekawe właściwości. Np można spróbować ustalić ciągi liczb (a jeszcze lepiej ich wzory) które leżą na "tych widocznych promieniach" i sprawdzić czy mają one coś ciekawego do powiedzenia w kontekście liczb pierwszych. Czy też może wzorek z promieniami wynika tylko i wyłącznie z właściwości samego parkietażu (koncentryczne kręgi zapewne tylko z tego wynikają).
sylvi91
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 10 paź 2017, o 04:40
Płeć: Mężczyzna
wiek: 47
Lokalizacja: Łódź
Podziękował: 6 razy

Spirala Ulama na parkietażu Penrose'a

Post autor: sylvi91 »

No ale dla mnie po obejrzeniu takiego malutkiego obrazka rastrowego, który wstawiłeś, a w którym widac jakieś cienie rozchodzące się od środka do zewnątrz to nic się kompletnie nie dało zrozumieć.
Przede wszystkim nasuwa mi się pytanie: gdzie tu nawiązanie do Spirali Ulama?
Uruchomiłem na razie twój skrypt i wygenerowałem sam odpowiedniej wielkości plik rastrowy, który po powiększeniu
faktycznie pokazał jakieś romby. Także metoda z parkietażu niby działa. Gęstość obiektów na poszczególnych sekcjach (tych powiedzmy to promieniach) faktycznie jest różna. Także mogę na razie powiedzieć tylko, że nie jest to efekt samej rasteryzacji obrazu. Ale jak działa twój algorytm to się nie zastanawiałem. Czy jest tu błąd tego mi nie wiem. Czy ma to faktycznie związek ze Spiralą Ulama i rozkładem na niej liczb pierwszych też nie wiem. Może coś podpowiesz?
Na razie to wiamo mi tyle, że sam nie wiesz czy nie popełniłeś błędu i uzyskany efekt jest wogóle rozkładem liczb pierwszych.
No jeśli faktycznie potrafisz poddać analizie ten swój program i wytłumaczyć krok po kroku co On robi to może dojdziemy do jakichś konstruktywnych wniosków. Widziałem w kodzie fragment implementacji Sita Eratostenesa więc jakieś liczby pierwsze to twoje cudo wylicza.
Pozdrawiam.
Labinnah
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 19 lip 2019, o 19:14
Płeć: Mężczyzna
Lokalizacja: Łódź

Re: Spirala Ulama na parkietażu Penrose'a

Post autor: Labinnah »

1. Co to ma wspólnego ze spiralą Ulama.
Spiralę Ulama oryginalnie nanosi się na pokrycie całej płaszczyzny kwadratami, są wersje z sześciokątami i jeszcze inne. Ja chciałem sprawdzić jak to będzie wyglądać na pokryciu płaszczyzny quasi periodycznym czyli np parkietażem Penrose'a. Ponieważ bezpośredniej spirali nie da się na tym narysować, postanowiłem odwzorować tylko jej ideę. Kolejność elementów wyznaczyłem w następujący sposób:
- Za punkty odniesienia uznałem środek rombu.
- W pierwszej kolejności biorę pod uwagę odległość tego środka od początku układu współrzędnych
- W następnej kąt pomiędzy odcinkiem łączącym środek rombu z początkiem układu a negatywną osią x-ów (ta oś była najbardziej oczywista programistyczne).
Tak ponumerowane romby oznaczałem w taki sam sposób jak na zwykłej spirali Ulama - zamalowywałem te których pozycja była liczbą pierwszą.

2. Jak działa program
- Znajduje liczby pierwsze, ale to oczywiste.
- Następnie na podstawie algorytmu jaki znalazłem generuje dwukolorowe trójkąty równoboczne które łączone w jednokolorowe pary tworzą romby parkietażu.
- Tworzy to pewien problem ponieważ nie mamy dostępu do konkretnego rombu tylko do jego połówek. Na szczęście środki podstaw tych trójkątów to też środek rombu który współtworzą. Tak więc sortując wszystkie wygenerowane trójkąty po tym punkcie, zgodnie z opisem z pkt. 1 otrzymujemy w wyniku ciąg trójkątów, w którym kolejno każde 2 należą do tego samego rombu. A co równie ważne są już ustawione w porządku jaki nas interesuje.
- Teraz każdą parę która jest na pozycji liczby pierwszej zamalowuje na czarno.
- Generuje obrazek i koniec.
- Przy mniejszych wielkościach można włączyć jeszcze kod, który wypisze numer zaczernionego rombu, ale przy dużej skali byłoby to już bez sensu.
sylvi91
Użytkownik
Użytkownik
Posty: 64
Rejestracja: 10 paź 2017, o 04:40
Płeć: Mężczyzna
wiek: 47
Lokalizacja: Łódź
Podziękował: 6 razy

Re: Spirala Ulama na parkietażu Penrose'a

Post autor: sylvi91 »

Dobrze.
Jednak nazywanie tego rozkładu Spirala Ulama to raczej błąd. Jeśli ma to związek ze Spiralą Ulama to tylko taki, że prezentuje rozkład liczb pierwszych na płaszczyźnie korzystając z idei zaproponowanej przez polskiego matematyka.
Inne spirale z rozkładem liczb pierwszych, też ciężko nazywać Spiralami Ulama, gdyż ta jest w kształcie pierwotnie i niezmiennie kwadratowym. Inne wariacje spiral z rozkładem liczb pierwszych nie są więc Spiralami Ulama, tylko ich własnych autorów, choć za pierwowzór mają tą kwadratową.
Tak samo jak ja zrobiłem rozkład liczb pierwszych na Spirali Fibonacciego. To nie oznacza, że skoro to rozkład spiralny i dotyczy liczb pierwszych jest tu gdzieś zaszyta Spirala Ulama.

Twój pomysł ciekawy jest i zrobiłem zmianę flagi parametru SHOW_NR na true. Dało to ciut lepsze zobrazowanie zagadnienia.
Numeracja, która wypada na kolejnych rombach jest dla mnie jednak niezrozumiała.
Nie wiem np. czemu sprawdzasz tablicę bool z wartościami liczb pierwszych poprzez wartośc indexu i dzielonego przez 2.
Chodzi o ten fragment:

Kod: Zaznacz cały

for(int i = 0; i < tcount; i++) {
		if (integers[(i / 2) + 1]) { ... rysuj ... }
Skoro sprawdzamy każdy element tablicy bool z liczbami pierwszymi pojedyńczo, to nie powinno być tu chyba dzielenia? Inaczej można chyba oczekiwać różnych wzorów na ekranie, bo czemu nie podzielić wartości zmiennej i w pętli for na \(\displaystyle{ 3}\) albo \(\displaystyle{ 5}\) albo \(\displaystyle{ 111}\) ? Chodzi o 2 jako parę trójkątów?
Labinnah
Użytkownik
Użytkownik
Posty: 4
Rejestracja: 19 lip 2019, o 19:14
Płeć: Mężczyzna
Lokalizacja: Łódź

Re: Spirala Ulama na parkietażu Penrose'a

Post autor: Labinnah »

Tak, ta 2 to odnosi się tylko do pary trójkątów. Tylko w sumie tworzą romb, a liczę przecież romby a nie trójkąty.

Poniżej trochę czytelniejsza prezentacja sposobu zamalowywania:
AU
AU
penrose-ulam5-preview.png (154.34 KiB) Przejrzano 301 razy
Dodałem też gałąź do gita ze zmodyfikowaną wersją generującą takie obrazki.
ODPOWIEDZ