Ganzzahlige Mathematik kann erstaunliche Muster erzeugen, wenn sie über ein Raster gelegt wird. Selbst die grundlegendsten Funktionen können erstaunlich aufwändige Designs ergeben!
Deine Herausforderung
Schreiben Sie für ein 1024x1024-Bild 3 tweetbare (dh 140 Zeichen oder weniger) Funktionskörper für die Werte Rot, Grün und Blau.
Die Eingabe für die Funktionen ist zwei ganze Zahlen i (Spaltennummer für das gegebene Pixel) und j (Zeilennummer für das gegebene Pixel), und die Ausgabe ist ein vorzeichenloser Kurzschluss zwischen 0 und 1023 einschließlich, der die Menge des gegebenen darstellt im Pixel vorhandene Farbe (i, j).
Die folgenden drei Funktionen ergeben beispielsweise das folgende Bild:
/* 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;
Die Regeln
- Ersetzen Sie in Anbetracht dieses C ++ - Codes in Ihren Funktionen. Ich habe einige Makros zur Verfügung gestellt und die Bibliothek eingeschlossen, und Sie können complex.h einschließen. Sie können alle Funktionen aus diesen Bibliotheken und / oder meinen Makros verwenden. Verwenden Sie darüber hinaus keine externen Ressourcen.
Wenn diese Version für Sie nicht funktioniert, stellen Sie sicher, dass Sie mit Folgendem kompilieren:
g++ filename.cpp -std=c++11
Wenn dies nicht funktioniert, verwenden Sie bitte die alternative Version mit nicht unterzeichneten Zeichen anstelle von nicht unterzeichneten Kurzzeichen.
Michaelangelo hat eine bereinigte 24-Bit- oder 48-Bit-Farbausgabeversion bereitgestellt .
- Sie können Ihre eigene Version in einer anderen Sprache implementieren, sie muss sich jedoch genauso verhalten wie die bereitgestellte C ++ - Version, und es dürfen nur Funktionen aus den integrierten C ++ - Funktionen, der Bibliothek oder den bereitgestellten Makros verwendet werden, um sie fair zu gestalten.
- Posten Sie nur Ihre drei Funktionskörper - bitte fügen Sie meinen Code nicht in Ihren Beitrag ein
- Bitte fügen Sie entweder eine kleinere Version oder eine eingebettete Kopie Ihres Bildes bei. Sie werden in ein ppm-Format umgewandelt und müssen möglicherweise in ein anderes konvertiert werden, damit sie beim Stapelaustausch richtig angezeigt werden können.
- Funktionskörper (ohne Signatur) dürfen maximal 140 Zeichen lang sein.
- Dies ist ein Beliebtheitswettbewerb - die meisten Stimmen gewinnen
quelle
Antworten:
Mandelbrot 3 x 133 Zeichen
Das erste, was mir in den Sinn kam, war "Mandelbrot!".
Ja, ich weiß, dass es bereits eine Mandelbrot-Einreichung gibt. Nachdem ich bestätigt habe, dass ich es selbst unter 140 Zeichen schaffen kann, habe ich die Tricks und Optimierungen aus dieser Lösung in meine übernommen (danke Martin und Todd). Das ließ Raum, um einen interessanten Ort und Zoom sowie ein schönes Farbthema zu wählen:
132 Zeichen insgesamt
Ich habe versucht, es für alle 3 Kanäle auf 140 zu bringen. Es gibt ein wenig Farbrauschen in der Nähe des Randes, und die Position ist nicht so interessant wie die erste, aber: 132 Zeichen
quelle
Tischdecken
Eben
Ich fing an, ein kariertes / kariertes Muster wie ein grenzenloses Tischtuch in die richtige Perspektive zu rücken:
Welligkeit
Dann habe ich eine Welligkeit eingeführt (nicht unbedingt korrekte Perspektive, aber immer noch in 140 Zeichen):
Farbe
Dann habe ich einige Farben feiner gemasert, um eine größere Auswahl an Details zu erhalten und das Bild bunter zu machen ...
In Bewegung
Wenn Sie den Code nur geringfügig weiter reduzieren, können Sie eine Wellenphase P mit zwei Dezimalstellen definieren, die gerade für Frames ausreicht, die für eine reibungslose Animation nah genug sind. In diesem Stadium habe ich die Amplitude reduziert, um Seekrankheit zu vermeiden, und das gesamte Bild um weitere 151 Pixel nach oben verschoben (zum Preis von 1 zusätzlichen Zeichen), um das Aliasing vom oberen Rand des Bildes zu entfernen. Animiertes Aliasing ist faszinierend.
quelle
#define P
. Es erforderte Golfspielen, um die zusätzlichen Charaktere zuzulassen#define P 6.03
.Zufälliger Maler
Hier ist ein zufallsbasierter Eintrag. Für ungefähr 0,1% der Pixel wählt es eine zufällige Farbe, für die anderen verwendet es die gleiche Farbe wie ein zufälliges benachbartes Pixel. Beachten Sie, dass jede Farbe dies unabhängig tut, so dass dies eigentlich nur eine Überlagerung eines zufälligen grünen, blauen und roten Bildes ist. Um bei verschiedenen Läufen unterschiedliche Ergebnisse zu erzielen, müssen Sie
srand(time(NULL))
diemain
Funktion erweitern.Nun zu einigen Variationen.
Durch Überspringen von Pixeln können wir das Bild etwas verschwommener machen.
Und dann können wir langsam die Farben ändern, wobei die Überläufe zu plötzlichen Änderungen führen, die das Aussehen von Pinselstrichen noch verstärken
Dinge, die ich herausfinden muss:
srand
diese Funktionen nicht nutzen, ohne einen Segfault zu erhalten.Sie können den Random Walk auch isotrop machen
dir geben
Mehr zufällige Bilder
Ich habe ein bisschen mehr damit gespielt und ein paar andere zufällige Bilder geschaffen. Nicht alle davon sind im Rahmen dieser Herausforderung möglich, daher möchte ich sie hier nicht aufnehmen. Aber Sie können sie in dieser Bildergalerie sehen, zusammen mit einigen Beschreibungen, wie ich sie hergestellt habe.
Ich bin versucht, all diese Möglichkeiten zu einem Framework zu entwickeln und auf GitHub zu stellen. (Nicht, dass so etwas noch nicht existiert, aber es macht trotzdem Spaß!)
quelle
Einige wirbelnde, spitze Dinge
Ja, ich wusste genau, wie ich es nennen sollte.
BEARBEITEN: Nicht mehr verwendet
pow
. EDIT 2: @PhiNotPi wies darauf hin, dass ich nicht so viel abs verwenden muss.Sie können die Referenzpunkte ziemlich einfach ändern, um ein anderes Bild zu erhalten:
@ EricTressler wies darauf hin, dass meine Bilder Batman enthalten.
quelle
Natürlich muss es eine Mandelbrot-Einreichung geben.
Ich versuche jetzt, das Farbschema zu verbessern. Ist es ein Betrug, wenn ich die Berechnung als Makro definiere
red_fn
und dieses Makro in den anderen beiden verwende, damit ich mehr Zeichen für eine ausgefallene Farbauswahl in Grün und Blau habe?Bearbeiten: Es ist wirklich schwierig, mit diesen wenigen verbleibenden Bytes anständige Farbschemata zu finden. Hier ist eine andere Version:
Und gemäß dem Vorschlag von Githubphagocyte und mit den Verbesserungen von Todd Lehman können wir leicht kleinere Abschnitte auswählen:
Z.B
gibt
quelle
Julia setzt
Wenn es einen Mandelbrot gibt, sollte es auch einen Julia-Satz geben.
Sie können stundenlang daran arbeiten, die Parameter und Funktionen zu optimieren. Dies ist also nur eine kurze Anleitung, die anständig aussieht.
Inspiriert von Martins Teilnahme.
Möchten Sie etwas RNG?
OK, Sparrs Kommentar hat mich dazu veranlasst, die Parameter dieser kleinen Julias zufällig zu bestimmen. Ich habe zuerst versucht, Hacken auf Bit-Ebene mit dem Ergebnis von durchzuführen,
time(0)
aber C ++ erlaubt keine hexadezimalen Fließkommazahlen, so dass dies eine Sackgasse war (zumindest mit meinen begrenzten Kenntnissen). Ich hätte ein schweres Casting verwenden können, um es zu erreichen, aber das hätte nicht in die 140 Bytes gepasst.Ich hatte sowieso nicht mehr viel Platz, also musste ich die rote Julia fallen lassen, um meine Makros zu platzieren und ein konventionelleres RNG (
time
d seed und realrand()
, woohoo!) Zu haben.Hoppla, etwas fehlt. Offensichtlich müssen diese Parameter statisch sein, oder Sie haben einige seltsame Ergebnisse (aber lustig, vielleicht werde ich später nachforschen, ob ich etwas Interessantes finde).
Also hier sind wir mit nur grünen und blauen Kanälen:
Fügen wir nun ein einfaches rotes Muster hinzu, um die Lücke zu füllen. Nicht wirklich einfallsreich, aber ich bin kein Grafikprogrammierer ... bis jetzt :-)
Und zum Schluss der neue Code mit zufälligen Parametern:
Es ist noch Platz übrig ...
quelle
Dieser ist interessant, weil er die i, j-Parameter überhaupt nicht verwendet. Stattdessen merkt es sich den Zustand in einer statischen Variablen.
quelle
quelle
Buddhabrot (+ Antibuddhabrot)
Edit: Es ist jetzt ein richtiger Buddhabrot!
Bearbeiten: Ich habe es geschafft, die Farbintensität innerhalb der Bytegrenze zu begrenzen, sodass es aufgrund des Überlaufs keine falsch schwarzen Pixel mehr gibt.
Ich wollte unbedingt nach vier aufhören ... aber ...
Dies wird beim Hochladen leicht komprimiert (und beim Einbetten verkleinert). Wenn Sie also alle Details bewundern möchten, sehen Sie sich die interessanten 512x512-Ausschnitte an (die nicht komprimiert werden und in voller Größe angezeigt werden):
Danke an Githubphagocyte für die Idee. Dies erforderte einen ziemlich komplizierten Missbrauch aller drei Farbfunktionen:
Für ein besseres Farbschema sind noch einige Bytes übrig, aber bisher habe ich nichts gefunden, was das Graustufenbild übertrifft.
Der angegebene Code verwendet 4096 x 4096 Startpunkte und durchläuft bis zu 500.000 Iterationen, um zu bestimmen, ob die Flugbahnen entkommen oder nicht. Das hat auf meiner Maschine zwischen 6 und 7 Stunden gedauert. Mit einem Raster von 2 x 2 k und Iterationen von 10 k, die zwei Minuten dauern, können Sie gute Ergebnisse erzielen, und selbst ein Raster von 1 x 1 k mit Iterationen von 1 k sieht recht gut aus (das dauert etwa 3 Sekunden). Wenn Sie mit diesen Parametern experimentieren möchten, müssen einige Punkte geändert werden:
5e5
inBL
an Ihre Iterationsanzahl an.4096
inRD
auf die gewünschte Auflösung und die1024.
inGR
den gleichen Faktor die richtige Skalierung zu halten.return c[i][j]
inGR
da , dass nur die absolute Anzahl der Besuche jeden Pixel enthält. Die maximale Farbe scheint weitgehend unabhängig von der Iterationszahl zu sein und skaliert linear mit der Gesamtzahl der Startpunkte. Wenn Sie also ein 1k x 1k-Raster verwenden möchten, möchten Sie vielleichtreturn c[i][j]*16;
oder ähnliches, aber dieser Faktor erfordert manchmal ein wenig Fummeln.Für diejenigen, die mit dem Buddhabrot nicht vertraut sind (wie ich vor ein paar Tagen), basiert es auf der Mandelbrot-Berechnung, aber die Intensität jedes Pixels gibt an, wie oft dieses Pixel in den Iterationen der entkommenden Flugbahnen besucht wurde. Wenn wir die Besuche während nicht entkommender Flugbahnen zählen, handelt es sich um ein Antibuddhabrot. Es gibt eine noch raffiniertere Version namens Nebulabrot, bei der Sie für jeden Farbkanal eine andere Rekursionstiefe verwenden. Aber ich überlasse das jemand anderem. Weitere Informationen finden Sie wie immer bei Wikipedia .
Ursprünglich habe ich nicht zwischen entkommenen und nicht entkommenen Flugbahnen unterschieden. Das erzeugte eine Handlung, die die Vereinigung eines Buddhabrots und eines Antibuddhabrots ist (wie durch Githubphagozyten hervorgehoben).
Dieser sieht ein bisschen aus wie ein verblasstes Foto ... das gefällt mir.
quelle
Sierpinski Pentagon
Möglicherweise haben Sie die Chaos- Spielmethode zur Annäherung an das Sierpinski-Dreieck kennengelernt, indem Sie Punkte auf halbem Weg zu einem zufällig ausgewählten Scheitelpunkt gezeichnet haben. Hier habe ich den gleichen Ansatz mit 5 Eckpunkten gewählt. Der kürzeste Code, auf den ich mich festlegen konnte, beinhaltete die harte Codierung der 5 Eckpunkte, und es gab keine Möglichkeit, alles in 140 Zeichen einzupassen. Daher habe ich die rote Komponente an einen einfachen Hintergrund delegiert und den freien Platz in der roten Funktion verwendet, um ein Makro zu definieren, um die anderen beiden Funktionen auch unter 140 zu bringen. Es gilt also alles auf Kosten der Abwesenheit einer roten Komponente im Fünfeck.
Vielen Dank an Martin Büttner für die in den Kommentaren der Frage erwähnte Idee, ein Makro in einer Funktion zu definieren, um es dann in einer anderen zu verwenden, und für die Verwendung von Memoization, um die Pixel in einer willkürlichen Reihenfolge zu füllen, anstatt auf die Rasterreihenfolge der Hauptfunktion beschränkt zu sein .
Das Bild hat eine Größe von über 500 KB und wird durch Stapelaustausch automatisch in JPG konvertiert. Dies verwischt einige der feineren Details, daher habe ich auch nur das obere rechte Viertel als PNG eingefügt, um den ursprünglichen Look zu zeigen:
quelle
Noten
Sierpinski-Musik. : D Die Leute im Chat sagen, es sieht eher aus wie das gelochte Papier für Spieluhren.
Einige Details, wie das funktioniert ... ähm, es ist eigentlich nur ein Zoom auf ein Rendering einiger gewellter Sierpinski-Dreiecke. Der Noten-Look (und auch die Blockhaftigkeit) ist das Ergebnis von Integer-Kürzungen. Wenn ich die rote Funktion ändere, sagen wir
Die Kürzung wird entfernt und wir erhalten die volle Auflösung rendern:
Also ja, das ist interessant.
quelle
Zufälliger Voronoi-Diagrammgenerator jemand?
OK, dieser hat mir eine harte Zeit bereitet. Ich finde es aber ziemlich schön, auch wenn die Ergebnisse nicht so kunstvoll sind wie bei einigen anderen. Das ist der Deal mit Zufälligkeit. Vielleicht sehen einige Zwischenbilder besser aus, aber ich wollte unbedingt einen voll funktionsfähigen Algorithmus mit Voronoi-Diagrammen haben.
Bearbeiten:
Dies ist ein Beispiel für den endgültigen Algorithmus. Das Bild ist im Grunde genommen die Überlagerung von drei Voronoi-Diagrammen, eines für jede Farbkomponente (rot, grün, blau).
Code
ungolfed, kommentierte Version am Ende
Es hat mich sehr viel Mühe gekostet, daher möchte ich die Ergebnisse in verschiedenen Phasen teilen, und es gibt nette (falsche), die ich zeigen kann.
Erster Schritt: Einige Punkte nach dem Zufallsprinzip setzen lassen, mit
x=y
Ich habe es in JPEG konvertiert, weil das ursprüngliche PNG zu schwer für das Hochladen war (
>2MB
), ich wette, das sind weit mehr als 50 Graustufen!Zweitens: Haben Sie eine bessere y-Koordinate
Ich konnte es mir nicht leisten, eine andere zufällig generierte Koordinatentabelle für die
y
Achse zu erstellen. Daher brauchte ich eine einfache Methode, um " zufällige " Koordinaten mit so wenigen Zeichen wie möglich zu erhalten. Ich ging für die Verwendung desx
in der Tabelle von einem anderen Punkt koordinieren, um eine bitweise tutAND
auf dem Index des Punktes.3. Ich erinnere mich nicht, aber es wird schön
Aber zu dieser Zeit war ich weit über 140 Zeichen, so dass ich es ziemlich viel Golf spielen musste.
Viertens: Scanlines
Nur ein Scherz, das ist nicht erwünscht, aber irgendwie cool.
Ich arbeite immer noch an der Verkleinerung des Algorithmus und bin stolz darauf, Folgendes präsentieren zu können:
StarFox Edition
Voronoi instagram
5. Erhöhen Sie die Anzahl der Punkte
Ich habe jetzt ein funktionierendes Stück Code, gehen wir also von 25 auf 60 Punkte.
Das ist auf nur einem Bild schwer zu erkennen, aber die Punkte befinden sich fast alle im selben
y
Bereich. Natürlich habe ich die bitweise Operation nicht geändert,&42
ist viel besser:Und hier sind wir am selben Punkt wie das allererste Bild aus diesem Beitrag. Lassen Sie uns nun den Code für die seltenen erklären, die interessiert wären.
Ungolfed und erklärt Code
Vielen Dank fürs Lesen.
quelle
Das Lyapunov-Fraktal
Die Zeichenfolge, die verwendet wurde, um dies zu generieren, war AABAB und der Parameterraum war [2,4] x [2,4]. ( Erklärung von String und Parameterraum hier )
Mit begrenztem Code-Platz fand ich diese Färbung ziemlich cool.
Ich habe auch eine Variation des Mandelbrot-Sets gemacht. Es wird eine Karte verwendet, die der Mandelbrot-Set-Karte ähnelt. Sagen Sie, M (x, y) ist die Mandelbrot-Karte. Dann ist M (sin (x), cos (y)) die Abbildung, die ich verwende, und anstatt zu prüfen, ob escape-Werte vorhanden sind, verwende ich x und y, da sie immer begrenzt sind.
BEARBEITEN
Nach langem Hin und Her habe ich mich endlich daran gemacht, ein GIF für das Morphing des zweiten Bildes zu erstellen. Hier ist es:
quelle
Weil Einhörner.
Ich konnte die OPs-Version mit
unsigned short
und Farbwerten bis 1023 nicht zum Laufen bringen. Bis dies behoben ist, ist hier eine Version mitchar
und einem maximalen Farbwert von 255.quelle
Logistische Hügel
Die Funktionen
Ungolfed
Alle #Definitionen müssen für BL unter 140 Zeichen passen. Hier ist die ungolfed Version des blauen Algorithmus, leicht modifiziert:
Wo die Werte von x für ein gegebenes r (j-Wert) am häufigsten fallen, wird die Darstellung heller (normalerweise als dunkler dargestellt).
quelle
Diffusionslimitierte Aggregation
Ich war schon immer fasziniert von der diffusionsbegrenzten Aggregation und der Anzahl der unterschiedlichen Erscheinungsformen in der realen Welt.
Ich fand es schwierig, dies in nur 140 Zeichen pro Funktion zu schreiben, daher musste ich den Code schrecklich machen (oder schön, wenn Sie Dinge wie
++d%=4
und mögenfor(n=1;n;n++)
). Die drei Farbfunktionen rufen sich gegenseitig auf und definieren Makros zur gegenseitigen Verwendung, sodass sie nicht gut lesbar sind, aber jede Funktion hat knapp 140 Zeichen.Um zu veranschaulichen, wie sich die Partikel allmählich ansammeln, habe ich in regelmäßigen Abständen Schnappschüsse angefertigt. Jeder Frame wurde durch Ersetzen der 1
for(n=1;n;n++)
durch 0, -1 << 29, -2 << 29, -3 << 29, 4 << 29, 3 << 29, 2 << 29, 1 << 29 erzeugt. 1. Dadurch wurde das Limit von 140 Zeichen für jeden Lauf knapp unterschritten.Sie können sehen, dass Aggregate, die nahe beieinander wachsen, sich gegenseitig die Partikel entziehen und langsamer wachsen.
Wenn Sie den Code geringfügig ändern, werden die verbleibenden Partikel angezeigt, die noch nicht an den Aggregaten haften. Dies zeigt die dichteren Regionen, in denen das Wachstum schneller erfolgt, und die sehr spärlichen Regionen zwischen Aggregaten, in denen aufgrund des Verbrauchs aller Partikel kein Wachstum mehr stattfinden kann.
Dies kann auf die gleiche Weise wie zuvor animiert werden:
quelle
Spirale (genau 140)
Das sind genau 140 Zeichen, wenn Sie die Funktionsüberschriften und -klammern nicht einschließen. Es ist so viel Spiralkomplexität, wie ich in die Zeichenbegrenzung einpassen könnte.
Nach und nach baute ich eine einfache Spirale auf, fügte Muster an den Spiralrändern hinzu und experimentierte, wie verschiedene Spiralen kombiniert werden könnten, um cool auszusehen. Hier ist eine ungolfed Version mit Kommentaren, die erklären, was jedes Stück macht. Das Spielen mit Parametern kann zu interessanten Ergebnissen führen.
Spielerisch mit Parametern:
Hier sind die Spiralen aneinander gereiht, haben aber unterschiedliche Kantenmuster. Anstelle der blockartigen Kanten im Hauptbeispiel weist dies Kanten auf, die vollständig aus Sinuswellen bestehen.
Hier wurde der Farbverlauf entfernt:
Eine Animation (
die sich aus irgendeinem Grund nach dem Hochladen nicht zu wiederholen scheint. Tut mir leid. Außerdem musste ich sie verkleinern. Öffne sie einfach in einem neuen Tab, wenn du die Animation verpasst hast.):Und hier ist das Imgur-Album mit allen Bildern. Ich würde gerne sehen, ob jemand andere coole Spiralmuster findet. Außerdem muss ich sagen, dass dies bei weitem eine der coolsten Herausforderungen ist, die ich je gesehen habe. Genießen!
EDIT: Hier sind einige Hintergründe aus diesen Spiralen mit geänderten Parametern.
Durch Kombinieren meiner Spiralkantenmuster mit einigen der Fraktale, die ich hier durch die Verwendung von xor / und / oder Operationen gesehen habe, ist hier eine letzte Spirale:
quelle
Hommage an einen Klassiker
V1 : Inspiriert von DreamWarriors "Be happy", bettet diese einfache Einreichung ein kleines Pixel-Art-Bild in jeden Farbkanal ein. Ich musste nicht einmal den Code spielen!
V2 : jetzt mit erheblich kürzerem Code und einem dicken schwarzen Rand, der nur den "Spielbildschirm" isoliert.
V3 : Raumschiff, Kugel, beschädigte Aliens und blaue Grenze, oh mein Gott! Der Versuch , für Ziel dieses grob.
Ich bin zufällig auf einen Schnitt von Umber Ferrule gestoßen, dessen Avatar mich dazu inspiriert hat, einen weiteren pixelbasierten Eintrag hinzuzufügen. Da die Kernidee des Codes weitgehend der von Space Invaders ähnelt, füge ich sie diesem Eintrag hinzu, obwohl die beiden definitiv unterschiedliche herausfordernde Punkte hatten. In diesem Fall erwies es sich als schöne Herausforderung, Pink richtig zu machen (auf Kosten von Weiß) und die Tatsache, dass es sich um ein ziemlich großes Sprite handelt. Die hexadezimalen Escapes (
\xFF
usw.) im roten Kanal stellen die entsprechenden Zeichen in der Quelldatei dar (dh der rote Kanal in der Quelldatei enthält Binärdaten), während die oktalen Escapes literal sind (dh in der Quelldatei vorhanden sind).quelle
Action-Malerei
Ich wollte versuchen, etwas Ähnliches wie Jackson Pollock nachzubilden - Farbe über eine horizontale Leinwand zu tropfen und zu gießen. Obwohl mir die Ergebnisse gefallen haben, war der Code viel zu lang, um auf diese Frage zu antworten, und meine besten Bemühungen haben ihn immer noch auf etwa 600 Byte reduziert. Der hier veröffentlichte Code (mit Funktionen von 139 Bytes, 140 Bytes und 140 Bytes) wurde mit enormer Hilfe einiger Genies im Chat erstellt . Vielen Dank an:
für eine unerbittliche gruppen-golfsitzung.
Das E (q) -Makro wird in den RD- und GR-Funktionen verwendet. Durch Ändern des Werts des Arguments wird die Art und Weise geändert, in der sich die roten und grünen Komponenten der Farben ändern. Das J-Makro endet mit einer Zahl, mit der bestimmt wird, wie stark sich die blaue Komponente ändert, was sich wiederum auf die rote und die grüne Komponente auswirkt, da sie daraus berechnet werden. Ich habe einige Bilder mit den roten und grünen Argumenten von E hinzugefügt, um die Vielfalt der möglichen Farbkombinationen zu zeigen. Bewegen Sie den Mauszeiger über die Bilder für die roten und grünen Werte, wenn Sie diese selbst ausführen möchten.
Alle diese Bilder können in voller Größe angezeigt werden, wenn Sie sie herunterladen. Die Dateigröße ist klein, da die flache Farbe dem PNG-Komprimierungsalgorithmus entspricht. Daher war keine verlustbehaftete Komprimierung erforderlich, um auf die Site hochzuladen.
Wenn Sie Bilder aus verschiedenen Phasen des Golfspiels sehen möchten, während wir verschiedene Dinge ausprobiert haben, können Sie im Action-Painting-Chat nachsehen .
quelle
Ich dachte, ich würde mit den Parametern dieses Codes spielen ... Das gesamte Guthaben geht an @Manuel Kasten. Diese sind einfach so cool, dass ich nicht widerstehen konnte, etwas zu posten.
BubbleGumRupture http://i57.tinypic.com/3150eqa.png
SeussZoom http://i59.tinypic.com/am3ypi.png
SeussEternalForest http://i61.tinypic.com/35akv91.png
quelle
Bearbeiten: Dies ist jetzt eine gültige Antwort, dank der Vorwärtserklärungen von
GR
undBL
.Viel Spaß mit Hofstädters Q-Sequenz! Wenn wir den radialen Abstand von einem Punkt als Eingabe und die Ausgabe als Umkehrfarbe verwenden, erhalten wir etwas, das wie farbiges Vinyl aussieht.
Die Sequenz ist der Fibonacci-Sequenz sehr ähnlich, aber anstatt 1 und 2 Schritte in der Sequenz zurückzugehen, nehmen Sie die beiden vorherigen Werte, um zu bestimmen, wie weit Sie zurückgehen müssen, bevor Sie die Summe nehmen. Es wächst ungefähr linear, aber hin und wieder kommt es (in zunehmenden Abständen) zu einem Chaosausbruch, der sich dann vor dem nächsten Ausbruch wieder in einer fast linearen Reihenfolge niederschlägt:
Sie können diese Wellen im Bild nach Regionen sehen, die in der Farbe sehr "flach" aussehen.
Nur eine Farbe zu verwenden ist natürlich langweilig.
Nun zum Code. Ich brauche die rekursive Funktion, um die Sequenz zu berechnen. Dazu benutze ich
RD
wann immerj
es negativ ist. Leider, das nicht verlassen genug Zeichen Rotkanalwert selbst zu berechnen, soRD
ruft wiederumGR
mit einem den roten Kanal zu erzeugen , versetzt.Dies ist natürlich so ziemlich die einfachste Verwendung der Sequenz, und es sind noch viele Zeichen übrig. Fühlen Sie sich frei, es auszuleihen und andere verrückte Dinge damit zu tun!
Hier ist eine andere Version, bei der die Grenze und die Farben durch die Q-Sequenz bestimmt werden. In diesem Fall war genügend Platz,
RD
so dass ich nicht einmal die Forward-Deklaration brauchte:quelle
Dies berechnet die Joukowsky-Transformation eines Satzes konzentrischer Kreise, die auf einem Punkt zentriert sind, der geringfügig vom Ursprung versetzt ist. Ich habe die Intensitäten im blauen Kanal leicht verändert, um ein wenig Farbabweichung zu erzielen.
quelle
Ziel c
Den C ++ - Code in Objective-C umgeschrieben, da ich ihn nicht kompilieren konnte ... Es gab die gleichen Ergebnisse wie andere Antworten, wenn es auf meinem iPad ausgeführt wurde, das ist also alles gut.
Hier ist mein Beitrag:
Der Code dahinter ist ziemlich einfach:
Sie können in auf Plätzen vergrößern durch Multiplikation
i
undj
durch0.5
,0.25
usw. , bevor sie verarbeitet werden.quelle
x^(x-y)^y
(Das hat mich auch das erste Mal fertig gemacht). Wenn Sie iOS-Funktionen haben, finden Sie hier meinen Code: gist.github.com/Jugale/28df46f87037d81d2a8fSierpinski Paint Splash
Ich wollte mehr mit Farben spielen, also änderte ich meine andere Antwort (die wirbelnde) und endete schließlich damit.
Es ist jetzt mein Avatar. : P
quelle
Ich fühle mich gezwungen, diesen Eintrag einzureichen, den ich als "undefiniertes Verhalten" bezeichne. Dies zeigt, was Ihr Compiler mit Funktionen macht, die einen Wert zurückgeben sollen, dies aber nicht tun:
Alle schwarzen Pixel:
Pseudozufällige Pixel:
Und natürlich eine Vielzahl weiterer möglicher Ergebnisse, abhängig von Ihrem Compiler, Computer, Speichermanager usw.
quelle
groovig
Nur ein paar Trigonometrie und seltsame Makrotricks.
RD:
GR:
BL:
BEARBEITEN: Wenn dies
M_PI
nicht zulässig ist, weil es nur auf POSIX-kompatiblen Systemen vorhanden ist, kann es durch das Literal ersetzt werden3.14
.quelle
acos(-1)
ist ein guter Ersatz fürM_PI
.Ich kann nicht gut rechnen. Ich war immer ein schlechter Schüler im Matheunterricht. Also habe ich einfach eins gemacht.
Ich habe modifiziert Javascript-Code von user1455003 verwendet . Und das ist mein vollständiger Code .
Es ist sehr kurz, sodass alle drei Funktionen in einen Tweet passen.
Eine weitere sehr kurze Funktionen. Ich habe dieses Sierpinski-Muster (und einige Tangentenmuster) gefunden, als ich mit verschiedenen mathematischen Funktionen rumgespielt habe.Dies ist der vollständige Code
quelle
i&j
Rendert einfach das Sierpinski-Dreieck. Welches ist genial .JavaScript
Andere Version. Funktionskörper sind tweetbar.
Überarbeitete Bildrenderfunktion. draw (rgbFunctions, setCloseEvent);
Lila
quelle
Planetenmaler
Inspiriert von Martins offensichtlich großartigem Beitrag , ist dies eine andere Einstellung dazu. Anstatt einen Teil der Pixel zufällig auszusondern, beginne ich mit der linken oberen Ecke als RGB (512.512.512) und gehe von dort aus auf jeder Farbe zufällig spazieren. Das Ergebnis sieht aus wie ein Teleskop (imo).
Jedes Pixel nimmt den Durchschnitt der darüber / links liegenden Pixel und fügt ein bisschen Zufall hinzu. Sie können mit der Variabilität spielen, indem Sie die
p
Variable ändern , aber ich denke, ich verwende eine gute Balance (hauptsächlich, weil ich blau mag, damit mehr Unschärfevolatilität gute Ergebnisse liefert).Bei der Mittelwertbildung kommt es zu einer leichten negativen Verzerrung durch die Ganzzahldivision. Ich denke, es funktioniert jedoch und gibt der unteren Ecke einen schönen Verdunkelungseffekt.
Natürlich müssen Sie
srand()
Ihrer Hauptfunktion eine Zeile hinzufügen, um mehr als nur ein einziges Ergebnis zu erhalten .quelle
Reflektierte Wellen
Ein grundlegendes Schachbrettmuster, das entsprechend der Position einer Welle verzerrt ist, die sich von einem Punkt aus aus ausdehnt, wie ein Stein, der in einen Teich gefallen ist (sehr weit von der physischen Genauigkeit entfernt!). Die Variable
w
ist die Anzahl der Pixel von dem Punkt an, an dem sich die Welle bewegt hat. Wennw
es groß genug ist, wird die Welle von den Seiten des Bildes reflektiert.w
= 225w
= 360w
= 5390Hier ist ein GIF, das eine Folge von Bildern zeigt, wenn sich die Welle ausdehnt. Ich habe eine Reihe verschiedener Größen angegeben, von denen jede so viele Frames anzeigt, wie es die maximale Dateigröße von 500 KB zulässt.
Wenn ich einen Weg finden kann, wie ich ihn einpassen kann, möchte ich im Idealfall eine Welleninterferenz modellieren, damit die Wellen realistischer aussehen, wenn sie sich kreuzen. Ich bin jedoch mit dem Nachdenken zufrieden.
Beachten Sie, dass ich die Wellenreflexion in 3 Lots von 140 Bytes nicht wirklich modelliert habe. Es wird nicht wirklich darüber nachgedacht, es sieht einfach so aus. Ich habe die Erklärung ausgeblendet, falls jemand zuerst raten möchte:
quelle