Ich habe POV-ray heruntergeladen und diesen glänzenden Metallkugel-90er-Stil gerendert:
Ihre Aufgabe ist es, dasselbe zu tun, indem Sie die Rendering-Engine selbst in so wenigen Bytes wie möglich implementieren. Sie müssen dieses genaue Bild nicht replizieren - jedes Bild einer reflektierenden Kugel über einem unendlichen Schachbrett reicht aus, solange es die folgenden Kriterien erfüllt.
Regeln:
Das Bild muss eine reflektierende Kugel zeigen, die über einem unendlichen Schachbrett schwebt. Sowohl das Schachbrett selbst als auch seine Reflexion in der Kugel müssen im Bild gezeigt werden. Es muss visuell klar sein, dass dies das ist, was wir sehen. Darüber hinaus liegen die Angaben zu Geometrie, Farben, Materialeigenschaften usw. bei Ihnen.
Es muss etwas Licht in der Szene sein: Teile der Kugel sollten dunkler sein als andere Teile, und visuell sollte es möglich sein, ungefähr zu sagen, woher das Licht kommt. Darüber hinaus liegen die Details des Beleuchtungsmodells bei Ihnen. (Sie können Ihr eigenes vereinfachtes Beleuchtungsmodell erfinden, wenn Sie möchten.) Die Kugel muss keinen Schatten werfen.
Die beiden oben genannten Kriterien - ob es wirklich wie eine glänzende Kugel über einem Schachbrett aussieht, das von einer Lichtquelle beleuchtet wird - werden von der Community anhand von Abstimmungen beurteilt. Daher muss eine Antwort eine positive Punktzahl haben, um gewinnberechtigt zu sein.
Die Ausgabe muss mindestens 300x300 Pixel betragen. Es kann auf dem Bildschirm angezeigt oder in eine Datei geschrieben werden.
Ihr Code sollte auf einem vernünftigen modernen Computer in weniger als einer Stunde ausgeführt werden. (Dies ist großzügig - POV-ray rendert die obige Szene praktisch sofort.)
Es darf keine integrierte Raytracing-Funktion verwendet werden - Sie müssen den Renderer selbst implementieren.
Dies ist Codegolf , daher gewinnt der positiv bewertete Eintrag mit dem kürzesten Code (in Bytes). Sie können jedoch auch gerne das Metaspiel spielen, bei dem Sie die meisten Stimmen erhalten, indem Sie ein hübsches Bild zeichnen (wobei Sie den Code natürlich kurz halten).
Diese Herausforderung mag lächerlich schwierig erscheinen, aber da die Geometrie feststeht, ist der Algorithmus zum Rendern einer solchen Szene durch Raytracing ziemlich einfach. Es geht wirklich nur darum, jedes Pixel im Ausgabebild zu durchlaufen und einen mathematischen Ausdruck auszuwerten, um festzustellen, welche Farbe es haben sollte. Ich bin also optimistisch, dass wir einige gute Antworten sehen werden.
quelle
Antworten:
Python 2,
484468467 BytesHinweis: Nach
if I>0:
einem Zeilenumbruch folgt ein einzelnes Tabulatorzeichen vort=
...Wenn Sie das Programm ausführen, wird ein 800x600-Image mit dem Namen "s.pgm" erstellt
Ausgehend von einer "echten" Raytracer-Formel (zum Golfen etwas überarbeitet).
Auf meinem toten alten PC dauert das Rendern ca. 3s (0,7s mit pypy).
quelle
0000
mite4
ganz.a if b else c
mit(c,a)[b]
so lange , wie Sie verlassen sich auf nicht Kurzschließen zB Division durch Null - Fehler zu vermeiden. Auch könnenif A:code;return B\nelse:return C
Sie mit ersetzencode;return(C,B)[A]
.