Pobrałem POV-ray i renderowałem ten błyszczący metalowy kula w stylu lat 90 .:
Twoim zadaniem jest zrobić to samo, ale zrobić to, wdrażając sam silnik renderujący w jak najmniejszej liczbie bajtów. Nie musisz replikować tego dokładnego obrazu - wystarczy dowolny obraz odbijającej się kuli nad nieskończoną szachownicą, o ile spełnia poniższe kryteria.
Zasady:
Obraz musi przedstawiać kulę odbijającą unoszącą się nad nieskończoną szachownicą. Zarówno sama szachownica, jak i jej odbicie w kuli muszą być pokazane na obrazie. Musi być wizualnie jasne, że właśnie to widzimy. Poza tym szczegóły dotyczące geometrii, kolorów, właściwości materiału itp. Zależą od Ciebie.
Na scenie musi być trochę światła: części kuli powinny być ciemniejsze niż inne części, a wizualnie powinno być możliwe przybliżone określenie, skąd pochodzi światło. Poza tym szczegóły modelu oświetlenia zależą od Ciebie. (Jeśli chcesz, możesz wynaleźć własny uproszczony model oświetlenia). Kula nie musi rzucać cienia.
Dwa powyższe kryteria - czy naprawdę wygląda jak błyszcząca kula nad szachownicą oświetloną źródłem światła - zostaną ocenione przez społeczność za pomocą głosowania. Dlatego odpowiedź musi mieć pozytywny wynik, aby móc wygrać.
Dane wyjściowe muszą mieć co najmniej 300 x 300 pikseli. Może być wyświetlany na ekranie lub zapisany w pliku, albo jest w porządku.
Twój kod powinien działać w niecałą godzinę na rozsądnym nowoczesnym komputerze. (Jest to hojne - POV-ray renderuje powyższą scenę praktycznie natychmiast.)
Nie można używać wbudowanej funkcji śledzenia promieni - należy samodzielnie zaimplementować moduł renderujący.
To jest golf golfowy , więc wygrywa pozycja z dodatnim wynikiem z najkrótszym kodem (w bajtach). Możesz również zagrać w meta-grę, w której najwięcej głosów uzyskasz, rysując ładny obrazek (oczywiście z pominięciem kodu).
To wyzwanie może wydawać się absurdalnie trudne, ale ponieważ geometria jest ustalona, algorytm renderowania takiej sceny za pomocą śledzenia promieni jest dość prosty. To tak naprawdę tylko przypadek iteracji nad każdym pikselem na obrazie wyjściowym i oceny wyrażenia matematycznego, aby zobaczyć, jaki powinien być kolor, więc jestem optymistą, że zobaczymy kilka dobrych odpowiedzi.
źródło
Odpowiedzi:
Python 2,
484468467 bajtówUwaga: po
if I>0:
pojawieniu się nowego wiersza, po którym następuje pojedynczy znak tabulacji przedt=
...Uruchomienie programu spowoduje utworzenie obrazu 800x600 o nazwie s.pgm
Zaczęłam od „prawdziwych” formuł ray tracera (trochę poprawiłam grę w golfa).
Renderowanie zajmuje około 3 sekund na moim martwym starym komputerze (0,7 sekundy z pypy).
źródło
0000
jee4
przez cały.a if b else c
o(c,a)[b]
ile nie polegasz na zwarciach, aby uniknąć np. Dzielenia przez zero błędów.if A:code;return B\nelse:return C
Możesz także zastąpićcode;return(C,B)[A]
.