Matematyka liczb całkowitych może generować niesamowite wzory, gdy zostaną ułożone na siatce. Nawet najbardziej podstawowe funkcje mogą przynieść oszałamiająco dopracowane projekty!
Twoje wyzwanie
Napisz 3 tweetyty (czyli 140 znaków lub mniej) funkcji dla wartości czerwonego, zielonego i niebieskiego dla obrazu 1024x1024.
Wejściowymi funkcjami będą dwie liczby całkowite i (numer kolumny dla danego piksela) i j (numer wiersza dla danego piksela), a wynikiem będzie skrót bez znaku między 0 a 1023 włącznie, który reprezentuje ilość danego kolor obecny w pikselu (i, j).
Na przykład następujące trzy funkcje tworzą poniższy obraz:
/* RED */
return (unsigned short)sqrt((double)(_sq(i-DIM/2)*_sq(j-DIM/2))*2.0);
/* GREEN */
return (unsigned short)sqrt((double)(
(_sq(i-DIM/2)|_sq(j-DIM/2))*
(_sq(i-DIM/2)&_sq(j-DIM/2))
));
/* BLUE */
return (unsigned short)sqrt((double)(_sq(i-DIM/2)&_sq(j-DIM/2))*2.0);
/* RED */
return i&&j?(i%j)&(j%i):0;
/* GREEN */
return i&&j?(i%j)+(j%i):0;
/* BLUE */
return i&&j?(i%j)|(j%i):0;
Zasady
- Biorąc pod uwagę ten kod C ++ , zastępuj w swoich funkcjach. Udostępniłem kilka makr i załączyłem bibliotekę, a ty możesz dołączyć complex.h. Możesz używać dowolnych funkcji z tych bibliotek i / lub moich makr. Proszę nie używać żadnych zewnętrznych zasobów poza tym.
Jeśli ta wersja nie działa dla Ciebie, upewnij się, że kompilujesz:
g++ filename.cpp -std=c++11
Jeśli to nie zadziała, użyj alternatywnej wersji, używając znaków bez znaku zamiast skrótów bez znaku.
Michaelangelo dostarczył oczyszczoną 24-bitową lub 48-bitową wersję kolorową .
- Możesz zaimplementować własną wersję w innym języku, ale musi ona zachowywać się w taki sam sposób, jak dostarczona wersja C ++, a tylko funkcje z wbudowanych C ++, biblioteki lub dostarczonych makr mogą być użyte do zapewnienia uczciwości.
- Publikuj tylko trzy ciała funkcji - proszę nie dołączaj mojego kodu do swojego postu
- Podaj mniejszą wersję lub osadzoną kopię obrazu. Są one tworzone w formacie ppm i może być konieczne ich przekonwertowanie na inny w celu poprawnego przeglądania na stosie wymiany.
- Ciała funkcji (bez podpisu) muszą mieć maksymalnie 140 znaków.
- To konkurs popularności - najwięcej głosów wygrywa
źródło
Odpowiedzi:
Mandelbrot 3 x 133 znaków
Pierwszą rzeczą, jaka przyszła mi do głowy, było „Mandelbrot!”.
Tak, wiem, że jest już zgłoszenie mandelbrota. Po potwierdzeniu, że sam jestem w stanie uzyskać poniżej 140 znaków, podjąłem sztuczki i optymalizacje z tego rozwiązania do mojego (dzięki Martin i Todd). Zostało miejsce na wybranie interesującej lokalizacji i powiększenia, a także ładny motyw kolorystyczny:
Łącznie 132 znaki
Starałem się obniżyć do 140 dla wszystkich 3 kanałów. W pobliżu krawędzi jest trochę szumu koloru, a lokalizacja nie jest tak interesująca jak pierwsza, ale: 132 znaki
źródło
Obrusy
Mieszkanie
Zacząłem umieszczać wzór kratki / bawełniany materiał w kratkę w perspektywie jak nieograniczony obrus:
Marszczyć
Następnie wprowadziłem tętnienie (nie do końca poprawna perspektywa, ale wciąż w 140 znakach):
Kolor
Następnie niektóre kolory były bardziej drobnoziarniste, aby nadać detalom szerszy zakres skali i aby obraz był bardziej kolorowy ...
W ruchu
Nieznaczne zmniejszenie kodu pozwala na zdefiniowanie fazy fali P z 2 miejscami po przecinku, co wystarcza dla klatek wystarczająco blisko, aby uzyskać płynną animację. Na tym etapie zmniejszyłem amplitudę, aby uniknąć wywoływania choroby morskiej, i przesunąłem cały obraz o kolejne 151 pikseli (kosztem 1 dodatkowego znaku), aby zepchnąć aliasing z górnej części obrazu. Animowane aliasing jest hipnotyzujące.
źródło
#define P
. Wymagało to gry w golfa, aby umożliwić dodatkowe postacie#define P 6.03
.Losowy malarz
Oto wpis oparty na losowości. Dla około 0,1% pikseli wybiera losowy kolor, dla pozostałych używa tego samego koloru co losowy sąsiadujący piksel. Zauważ, że każdy kolor robi to niezależnie, więc jest to po prostu nakładka losowego obrazu zielonego, niebieskiego i czerwonego. Aby uzyskać różne wyniki dla różnych przebiegów, musisz dodać
srand(time(NULL))
domain
funkcji.Teraz kilka wariantów.
Pomijając piksele, możemy uczynić go nieco bardziej rozmytym.
Następnie możemy powoli zmieniać kolory, w których przelewy powodują gwałtowne zmiany, które sprawiają, że wygląda to bardziej jak pociągnięcia pędzlem
Co muszę wymyślić:
srand
tych funkcji bez uzyskania segfault.Możesz także ustawić izotropowy losowy spacer
dać Ci
Więcej przypadkowych obrazów
Bawiłem się tym trochę więcej i stworzyłem inne losowe obrazy. Nie wszystkie z nich są możliwe w ramach ograniczeń tego wyzwania, więc nie chcę ich tutaj uwzględniać. Ale możesz je zobaczyć w tej galerii imgur wraz z niektórymi opisami tego, jak je wyprodukowałem.
Kusi mnie, aby rozwinąć wszystkie te możliwości w ramy i umieścić je w GitHub. (Nie to, że takie rzeczy już nie istnieją, ale i tak jest zabawne!)
źródło
Niektóre swirly spiczaste rzeczy
Tak, wiedziałem dokładnie, jak to nazwać.
EDYCJA: Nie używa już
pow
. EDYCJA 2: @PhiNotPi zwrócił uwagę, że nie muszę tak często używać abs.Możesz łatwo zmienić punkty odniesienia, aby uzyskać inny obraz:
@EricTressler zwrócił uwagę, że moje zdjęcia zawierają Batmana.
źródło
Oczywiście musi być zgłoszenie Mandelbrota.
Próbuję teraz ulepszyć schemat kolorów. Czy to oszustwo, jeśli zdefiniuję obliczenie jako makro
red_fn
i użyję tego makra w pozostałych dwóch, więc mam więcej znaków do fantazyjnego wyboru kolorów w kolorze zielonym i niebieskim?Edycja: Naprawdę trudno jest wymyślić przyzwoite schematy kolorów z tymi kilkoma pozostałymi bajtami. Oto jeszcze jedna wersja:
I zgodnie z sugestią githubphagocyte i dzięki ulepszeniom Todda Lehmana, możemy łatwo wybrać mniejsze sekcje:
Na przykład
daje
źródło
Julia ustawia się
Jeśli jest Mandelbrot, powinien być też zestaw Julii.
Możesz spędzić godziny na ulepszaniu parametrów i funkcji, więc jest to szybki, który wygląda przyzwoicie.
Zainspirowany udziałem Martina.
Czy chciałbyś trochę RNG?
OK, komentarz Sparra postawił mnie na tropie, aby losowo dobrać parametry tych małych Julias. Najpierw próbowałem przeprowadzić hackowanie na poziomie bitów z wynikiem,
time(0)
ale C ++ nie pozwala na szesnastkowe liczb zmiennoprzecinkowych, więc był to ślepy zaułek (przynajmniej z moją ograniczoną wiedzą). Mógłbym użyć do tego ciężkiego rzutowania, ale to nie zmieściłoby się w 140 bajtach.I tak nie zostało mi dużo miejsca, więc musiałem upuścić czerwoną Julię, aby umieścić moje makra i mieć bardziej konwencjonalny RNG (
time
d seed i realrand()
, woohoo!).Ups, czegoś brakuje. Oczywiście parametry te muszą być statyczne, w przeciwnym razie masz dziwne wyniki (ale zabawne, może zbadam trochę później, jeśli znajdę coś interesującego).
Więc oto mamy tylko zielone i niebieskie kanały:
Dodajmy teraz prosty czerwony wzór, aby wypełnić pustkę. Nie bardzo pomysłowe, ale nie jestem programistą graficznym ... jeszcze :-)
I wreszcie nowy kod z losowymi parametrami:
Pozostało już miejsce ...
źródło
Ten jest interesujący, ponieważ w ogóle nie używa parametrów i, j. Zamiast tego pamięta stan w zmiennej statycznej.
źródło
źródło
Buddhabrot (+ Antibuddhabrot)
Edycja: Teraz jest to właściwy Buddhabrot!
Edycja: Udało mi się ograniczyć intensywność kolorów do limitu bajtów, więc nie ma już fałszywie czarnych pikseli z powodu przepełnienia.
Naprawdę chciałem przestać po czwartej ... ale ...
To ulega nieznacznej kompresji podczas przesyłania (i zmniejsza się po osadzeniu), więc jeśli chcesz podziwiać wszystkie szczegóły, oto interesujące fragment 512x512 (który nie jest skompresowany i jest wyświetlany w pełnym rozmiarze):
Dzięki githubphagocyte za pomysł. Wymagało to nieco skomplikowanego nadużycia wszystkich trzech funkcji kolorów:
Zostało jeszcze kilka bajtów dla lepszego schematu kolorów, ale jak dotąd nie znalazłem niczego, co przewyższałoby obraz w skali szarości.
Podany kod wykorzystuje 4096 x 4096 punktów początkowych i wykonuje do 500 000 iteracji na każdym z nich, aby ustalić, czy trajektorie uciekają, czy nie. Na moim komputerze zajęło to od 6 do 7 godzin. Możesz uzyskać przyzwoite wyniki z siatką 2k na 2k i iteracjami 10k, co zajmuje dwie minuty, a nawet tylko siatka 1k na 1k z iteracjami 1k wygląda całkiem ładnie (to zajmuje 3 sekundy). Jeśli chcesz bawić się tymi parametrami, musisz zmienić kilka miejsc:
5e5
inBL
do liczby iteracji.4096
wRD
do żądanej rozdzielczości, a1024.
inGR
przez ten sam czynnik w utrzymaniu prawidłowego skalowania.return c[i][j]
inGR
ponieważ zawiera tylko bezwzględnej liczby odwiedzin każdego piksela. Maksymalny kolor wydaje się być w większości niezależny od liczby iteracji i skaluje się liniowo z całkowitą liczbą punktów początkowych. Więc jeśli chcesz używać siatki 1k na 1k, możesz chciećreturn c[i][j]*16;
lub podobnie, ale ten czynnik czasami wymaga trochę majstrowania.Dla tych, którzy nie są zaznajomieni z Buddhabrotem (jak ja kilka dni temu), jest on oparty na obliczeniach Mandelbrota, ale intensywność każdego piksela to częstotliwość odwiedzania tego piksela w iteracjach uciekających trajektorii. Jeśli liczymy wizyty podczas nieuchwytnych trajektorii, to jest to Antibuddhabrot. Istnieje jeszcze bardziej wyrafinowana wersja o nazwie Nebulabrot, w której używasz innej głębokości rekurencji dla każdego kanału kolorów. Ale zostawię to komuś innemu. Aby uzyskać więcej informacji, jak zawsze, Wikipedia .
Początkowo nie rozróżniałem trajektorii ucieczki i ucieczki. To wygenerowało fabułę, która jest połączeniem Buddhabrota i Antibuddhabrota (jak wskazał githubphagocyte).
Ten wygląda trochę jak wyblakłe zdjęcie ... Lubię to.
źródło
Sierpiński Pentagon
Być może widziałeś metodę chaosu przybliżania Trójkąta Sierpińskiego przez wykreślanie punktów w połowie drogi do losowo wybranego wierzchołka. Tutaj zastosowałem to samo podejście przy użyciu 5 wierzchołków. Najkrótszy kod, na którym mogłem się zgodzić, zawierał kodowanie na 5 wierzchołków i nie było mowy, żebym zmieścił to wszystko w 140 znakach. Delegowałem więc czerwony komponent do prostego tła i wykorzystałem wolne miejsce w funkcji czerwonej do zdefiniowania makra, aby pozostałe dwie funkcje również były poniżej 140. Tak więc wszystko jest ważne kosztem braku czerwonego elementu w pięciokącie.
Podziękowania dla Martina Büttnera za pomysł wspomniany w komentarzach do pytania o zdefiniowaniu makra w jednej funkcji, aby następnie użyć go w innej, a także za użycie zapamiętywania do wypełnienia pikseli w dowolnej kolejności zamiast ograniczania się do kolejności rastrowej funkcji głównej .
Obraz ma ponad 500 KB, więc jest automatycznie konwertowany do formatu jpg przez zamianę stosu. To zaciera niektóre drobniejsze szczegóły, więc dołączyłem również prawą górną ćwiartkę jako png, aby pokazać oryginalny wygląd:
źródło
Nuty
Muzyka Sierpińskiego. : D Faceci na czacie mówią, że bardziej przypomina dziurkowany papier do pozytywek.
Kilka szczegółów na temat tego, jak to działa ... właściwie to tylko powiększenie renderowania falistych trójkątów Sierpińskiego. Wygląd partytury (a także blokowanie) jest wynikiem obcięcia liczb całkowitych. Jeśli zmienię funkcję czerwoną na powiedzmy
obcięcie jest usuwane i otrzymujemy renderowanie w pełnej rozdzielczości:
Tak, to interesujące.
źródło
Generator diagramów losowych Voronoi ktoś?
OK, ten sprawił mi trudność. Myślę, że to całkiem miłe, nawet jeśli wyniki nie są tak pomysłowe jak niektóre inne. To jest kwestia losowości. Być może niektóre obrazy pośrednie wyglądają lepiej, ale naprawdę chciałem mieć w pełni działający algorytm ze schematami voronoi.
Edytować:
To jest jeden przykład końcowego algorytmu. Obraz jest w zasadzie superpozycją trzech diagramów voronoi, po jednym dla każdego składnika koloru (czerwony, zielony, niebieski).
Kod
wersja nieposkromiona, na końcu komentowana
Zajęło mi to wiele wysiłku, więc mam ochotę dzielić się wynikami na różnych etapach, a są fajne (nieprawidłowe) do pokazania.
Pierwszy krok: umieść niektóre punkty losowo, używając
x=y
Przekształciłem go w JPEG, ponieważ oryginalny plik PNG był zbyt ciężki do przesłania (
>2MB
), założę się, że to o ponad 50 odcieni szarości!Po drugie: mieć lepszą współrzędną y
Nie mogłem sobie pozwolić na kolejną tabelę współrzędnych generowanych losowo dla
y
osi, dlatego potrzebowałem prostego sposobu, aby uzyskać „ losowe ” liczby jak najmniejszej liczby znaków. Wybrałemx
współrzędną innego punktu w tabeli, wykonując bitoweAND
indeks indeksu punktu.3. Nie pamiętam, ale robi się przyjemnie
Ale w tym czasie miałem ponad 140 znaków, więc musiałem trochę pograć w golfa.
4-ty: linie skanowania
Żartowałem, to nie jest pożądane, ale trochę fajne, myśli.
Nadal pracuję nad zmniejszeniem rozmiaru algorytmu, z dumą mogę przedstawić:
Edycja StarFox
Voronoi Instagram
5.: zwiększ liczbę punktów
Mam teraz działający fragment kodu, więc przejdźmy od 25 do 60 punktów.
Trudno to zobaczyć tylko na jednym zdjęciu, ale prawie wszystkie punkty znajdują się w tym samym
y
zakresie. Oczywiście nie zmieniłem operacji bitowej,&42
jest o wiele lepszy:I oto jesteśmy w tym samym momencie, co pierwsze zdjęcie z tego postu. Wyjaśnijmy teraz kod dla tych, które byłyby zainteresowane.
Kod niepoznany i wyjaśniony
Dzięki za przeczytanie do tej pory.
źródło
Fraktal Lyapunowa
Ciąg użyty do wygenerowania tego to AABAB, a przestrzeń parametrów to [2,4] x [2,4]. (tutaj wyjaśnienie ciągu znaków i przestrzeni parametrów )
Przy ograniczonej przestrzeni kodu myślałem, że ta kolorystyka jest całkiem fajna.
Wykonałem również odmianę zestawu Mandelbrot. Wykorzystuje mapę podobną do mapy zestawu Mandelbrota. Powiedz M (x, y) to mapa Mandelbrota. Zatem M (sin (x), cos (y)) jest mapą, której używam, i zamiast sprawdzania wartości uciekających, używam x, i y, ponieważ są one zawsze ograniczone.
EDYTOWAĆ
Po dużym bólu w końcu udało mi się stworzyć gif z drugiego obrazu morfingu. Oto on:
źródło
Ponieważ jednorożce.
Nie mogłem uzyskać wersji OP z
unsigned short
wartościami kolorów do 1023, więc dopóki to nie zostanie naprawione, tutaj jest wersja zchar
maksymalną wartością koloru i 255.źródło
Wzgórza logistyczne
Funkcje
Nie golfił
Wszystkie # definicje mają zmieścić BL poniżej 140 znaków. Oto niezgolfowana wersja niebieskiego algorytmu, nieco zmodyfikowana:
Gdy wartości x spadają najczęściej dla danej wartości r (wartość j), wykres staje się jaśniejszy (zwykle przedstawiany jako ciemniejszy).
źródło
Diffusion Limited Aggregation
Zawsze fascynowała mnie agregacja z ograniczoną dyfuzją i liczba różnych sposobów, w jaki wygląda ona w prawdziwym świecie.
Trudno mi było napisać to w zaledwie 140 znakach na funkcję, więc musiałem zrobić kod okropny (lub piękny, jeśli lubisz takie rzeczy jak
++d%=4
ifor(n=1;n;n++)
). Trzy funkcje kolorów wywołują się nawzajem i definiują makra, które mają być używane, więc nie czyta się dobrze, ale każda funkcja ma nieco mniej niż 140 znaków.Aby zwizualizować, w jaki sposób cząsteczki stopniowo się agregują, tworzyłem zdjęcia w regularnych odstępach czasu. Każda ramka została wyprodukowana przez zastąpienie 1 cala
for(n=1;n;n++)
cala 0, -1 << 29, -2 << 29, -3 << 29, 4 << 29, 3 << 29, 2 << 29, 1 << 29, 1. To utrzymywało go poniżej 140 znaków dla każdego uruchomienia.Widać, że agregaty rosnące blisko siebie pozbawiają się cząstek i rosną wolniej.
Wprowadzając niewielką zmianę w kodzie, można zobaczyć pozostałe cząstki, które nie zostały jeszcze przyłączone do agregatów. Pokazuje to gęstsze regiony, w których wzrost nastąpi szybciej, oraz bardzo rzadkie regiony między agregatami, w których wzrost nie może nastąpić z powodu zużycia wszystkich cząstek.
Można to animować w taki sam sposób, jak wcześniej:
źródło
Spirala (dokładnie 140)
Jest to dokładnie 140 znaków, jeśli nie uwzględnisz nagłówków funkcji i nawiasów. Jest to taka złożona spirala, jaką mogłem zmieścić w limicie postaci.
Stopniowo budowałem na prostej spirali, dodając wzory do krawędzi spirali i eksperymentując z tym, jak można łączyć różne spirale, aby wyglądać fajnie. Oto wersja bez golfa z komentarzami wyjaśniającymi, co robi każdy kawałek. Bałagan z parametrami może dać interesujące wyniki.
Bałagan z parametrami:
Tutaj spirale są ustawione w linii, ale mają różne wzory krawędzi. Zamiast blokowych krawędzi w głównym przykładzie ma to krawędzie całkowicie złożone z fal grzechu.
Tutaj gradient został usunięty:
Animacja (
która z jakiegoś powodu nie wydaje się być zapętlona po przesłaniu, przepraszam. Musiałem ją również zmniejszyć. Po prostu otwórz ją w nowej karcie, jeśli przegapiłeś animację):A oto album imgur ze wszystkimi obrazami. Chciałbym zobaczyć, czy ktoś może znaleźć inne fajne wzory spiralne. Muszę też powiedzieć, że jest to zdecydowanie jedno z najfajniejszych wyzwań, jakie kiedykolwiek widziałem. Cieszyć się!
EDYCJA: Oto niektóre tła wykonane z tych spiral o zmienionych parametrach.
Łącząc moje wzory krawędzi spirali z niektórymi fraktalami, które widziałem tutaj za pomocą operacji xor / i / lub operacji, oto ostatnia spirala:
źródło
Hołd dla klasyka
V1 : Zainspirowany materiałem „Bądź szczęśliwy” DreamWarrior, ten prosty przekaz zawiera mały obraz pikselowy w każdym kanale kolorów. Nie musiałem nawet grać w golfa na kod!
V2 : teraz ze znacznie krótszym kodem i grubą czarną ramką izolującą tylko „ekran gry”.
V3 : statek kosmiczny, kula, uszkodzeni kosmici i niebieska ramka, o rany! Z grubsza staram się do tego dążyć .
Zdarzyło mi się natrafić na edycję Umber Ferrule, której awatar zainspirował mnie do dodania kolejnego wpisu opartego na pikselach. Ponieważ podstawowa idea kodu jest w dużej mierze podobna do Space Space Invaders, dołączam go do tego wpisu, chociaż oba zdecydowanie miały różne trudne punkty. W tym przypadku poprawienie koloru różowego (kosztem bieli) i fakt, że jest to dość duży duszek, okazało się niezłym wyzwaniem. Szesnastkowe sekwencje specjalne (
\xFF
itp.) W czerwonym kanale reprezentują odpowiadające im znaki w pliku źródłowym (to znaczy czerwony kanał w pliku źródłowym zawiera dane binarne), podczas gdy ósemkowe sekwencje specjalne są dosłowne (tj. Obecne w pliku źródłowym).źródło
Malowanie akcji
Chciałem spróbować odtworzyć coś podobnego do dzieła Jacksona Pollocka - kapanie i polewanie farbą poziomego płótna. Chociaż podobały mi się wyniki, kod był o wiele za długi, aby opublikować to pytanie, a moje najlepsze wysiłki nadal ograniczały go do około 600 bajtów. Tak więc kod zamieszczony tutaj (który ma funkcje odpowiednio 139 bajtów, 140 bajtów i 140 bajtów) został opracowany z ogromną pomocą niektórych geniuszy na czacie . Ogromne podziękowania dla:
na bezustanną sesję golfa w grupie.
Makro E (q) jest używane w funkcjach RD i GR. Zmiana wartości argumentu zmienia sposób, w jaki zmieniają się czerwone i zielone składniki kolorów. Makro J kończy się liczbą, która służy do określenia, jak bardzo zmienia się niebieski komponent, co z kolei wpływa na komponenty czerwony i zielony, ponieważ są one z niego obliczane. Dołączyłem kilka zdjęć z czerwonymi i zielonymi argumentami E zróżnicowanymi, aby pokazać różnorodność możliwych kombinacji kolorów. Najedź kursorem na zdjęcia, aby zobaczyć wartości czerwone i zielone, jeśli chcesz je uruchomić samodzielnie.
Wszystkie te obrazy można wyświetlić w pełnym rozmiarze, jeśli je pobrzesz. Rozmiar pliku jest niewielki, ponieważ płaski kolor odpowiada algorytmowi kompresji PNG, więc nie było wymagane kompresowanie stratne w celu przesłania na stronę.
Jeśli chcesz zobaczyć obrazy z różnych etapów gry w golfa, gdy wypróbowaliśmy różne rzeczy, możesz zajrzeć na czacie malowania akcji .
źródło
Pomyślałem, że pobawię się parametrami tego kodu ... Całe podziękowania należą się @Manuel Kasten. Są tak fajne, że nie mogłem się oprzeć opublikowaniu.
BubbleGumRupture http://i57.tinypic.com/3150eqa.png
SeussZoom http://i59.tinypic.com/am3ypi.png
SeussEternalForest http://i61.tinypic.com/35akv91.png
źródło
Edycja: To jest teraz poprawna odpowiedź, dzięki deklaracjom przesyłania dalej
GR
iBL
.Baw się dobrze z sekwencją Q Hofstadtera! Jeśli używamy odległości radialnej od jakiegoś punktu jako wejścia i wyjścia jako koloru odwrotnego, otrzymujemy coś, co wygląda jak kolorowy winyl.
Sekwencja jest bardzo podobna do sekwencji Fibonacciego, ale zamiast cofnąć się o 1 i 2 kroki wstecz, bierzesz dwie poprzednie wartości, aby ustalić, jak daleko cofnąć się przed pobraniem sumy. Rośnie mniej więcej liniowo, ale od czasu do czasu dochodzi do wybuchu chaosu (w rosnących odstępach), który następnie ustala się ponownie w niemal liniowej sekwencji przed następnym wybuchem:
Możesz zobaczyć te zmarszczki na obrazie po regionach, które wyglądają bardzo „płasko” w kolorze.
Oczywiście używanie tylko jednego koloru jest nudne.
Teraz kod. Potrzebuję funkcji rekurencyjnej do obliczenia sekwencji. Aby to zrobić, używam,
RD
gdyj
jest negatywne. Niestety, to nie pozostawia wystarczającej liczby znaków do obliczenia wartości czerwonego kanału, więcRD
z kolei wywołujeGR
z przesunięciem w celu wytworzenia czerwonego kanału.Oczywiście jest to właściwie najprostsze możliwe użycie sekwencji i pozostało mnóstwo znaków. Pożycz go i rób z nim inne szalone rzeczy!
Oto kolejna wersja, w której granica i kolory są określone przez sekwencję Q. W tym przypadku było wystarczająco dużo miejsca
RD
, że nie potrzebowałem nawet deklaracji przekazania:źródło
Oblicza to transformację Joukowskiego zbioru koncentrycznych kół wyśrodkowanych w punkcie lekko odsuniętym od początku. Lekko zmodyfikowałem intensywności w niebieskim kanale, aby uzyskać nieco zmienności kolorów.
źródło
Cel C
Przepisz kod C ++ w Objective-C, ponieważ nie udało mi się go skompilować ... Dał takie same wyniki jak inne odpowiedzi, kiedy działałem na iPadzie, więc to wszystko dobrze.
Oto moje zgłoszenie:
Kod za tym jest dość prosty:
Można powiększyć kwadratów przez pomnożenie
i
ij
przez0.5
,0.25
itd., Zanim zostaną one przetworzone.źródło
x^(x-y)^y
(to mnie też odrzuciło za pierwszym razem). Jeśli masz możliwości iOS, oto mój kod: gist.github.com/Jugale/28df46f87037d81d2a8fRozprysk farby Sierpińskiego
Chciałem grać więcej kolorami, więc zmieniałem swoją drugą odpowiedź (swirly) i ostatecznie z tym skończyłem.
To teraz mój awatar. : P
źródło
Czuję się zmuszony do przesłania tego wpisu, który nazywam „niezdefiniowanym zachowaniem”, które zilustruje działanie kompilatora w przypadku funkcji, które powinny zwracać wartość, ale nie:
Wszystkie czarne piksele:
Pseudolosowe piksele:
I oczywiście wiele innych możliwych wyników w zależności od kompilatora, komputera, menedżera pamięci itp.
źródło
groovy
Tylko kilka trygonometrii i dziwne sztuczki makro.
R & D:
GR:
BL:
EDYCJA: jeśli
M_PI
nie jest dozwolona z powodu obecności tylko w systemach kompatybilnych z POSIX, można ją zastąpić literałem3.14
.źródło
acos(-1)
to dobry zamiennikM_PI
.Nie jestem dobry z matematyki. Zawsze byłem biednym uczniem na lekcji matematyki. Więc zrobiłem prosty.
Użyłem zmodyfikowanego kodu JavaScript użytkownika 1455003 . I to jest mój pełny kod .
Jest bardzo krótki, więc wszystkie trzy funkcje mieszczą się w jednym tweecie.
Kolejne bardzo krótkie funkcje. Znalazłem ten wzór sierpińskiego (i pewien wzór styczny), gdy bałaganiłem różne funkcje matematyczne. To jest pełny kod
źródło
i&j
renderuje trójkąt Sierpińskiego. Co jest niesamowite .JavaScript
Inna wersja. ciała funkcyjne są tweetowane.
Zmieniona funkcja renderowania obrazu. draw (rgbFunctions, setCloseEvent);
Purpurowy
źródło
Malarz Planetarny
Zainspirowany oczywiście niesamowitym wejściem Martina , jest to inne podejście. Zamiast losowego rozsiewania części pikseli, zaczynam od lewego górnego rogu jako RGB (512 512 512) i stamtąd przechodzę losowo po każdym kolorze. Wynik wygląda jak coś z teleskopu (imo).
Każdy piksel bierze średnią pikseli powyżej / po lewej stronie i dodaje trochę losowości. Możesz grać ze zmiennością, zmieniając
p
zmienną, ale myślę, że używam dobrej równowagi (głównie dlatego, że lubię niebieski, więc większa zmienność rozmycia daje dobre wyniki).Podczas uśredniania występuje nieznaczne ujemne odchylenie od podziału na liczby całkowite. Myślę jednak, że to działa i daje ładny efekt zaciemnienia w dolnym rogu.
Oczywiście, aby uzyskać więcej niż jeden wynik, musisz dodać
srand()
linię do swojej głównej funkcji.źródło
Odbite fale
Podstawowy wzór szachownicy zniekształcony zgodnie z pozycją fali rozszerzającej się z punktu przypominającego kamień upuszczony do stawu (bardzo daleki od fizycznie dokładnego!). Zmienna
w
to liczba pikseli od tego punktu, w którym przesunęła się fala. Jeśliw
jest wystarczająco duża, fala odbija się od boków obrazu.w
= 225w
= 360w
= 5390Oto GIF przedstawiający kolejne obrazy wraz ze wzrostem fali. Podałem kilka różnych rozmiarów, z których każda pokazuje tyle klatek, ile pozwala limit rozmiaru pliku 500 KB.
Jeśli znajdę sposób, aby to dopasować, idealnie chciałbym mieć modelowanie interferencji fal, aby fale wyglądały bardziej realistycznie, gdy się krzyżują. Jestem jednak zadowolony z tej refleksji.
Zauważ, że tak naprawdę nie modelowałem odbicia fali w 3 partiach po 140 bajtów. Tak naprawdę nie ma refleksji, po prostu tak to wygląda. Ukryłem wyjaśnienie na wypadek, gdyby ktoś chciał zgadnąć w pierwszej kolejności:
źródło