Nie mamy ani jednego wyzwania dotyczącego narysowania prawdziwej trójwymiarowej kostki, więc oto:
Wyzwanie
Twoim zadaniem jest narysowanie obróconego sześcianu z perspektywą. Może znajdować się w osobnym oknie lub jako obraz.
Wejście
Wprowadzono 3 oddzielne liczby od 0 do 359,99 ... Przedstawiają obrót wokół osi x, y i z w stopniach.
0 0 0
30 0 40
95 320 12
Wynik
Możesz wyświetlić go w osobnym oknie lub zapisać obraz. Możesz użyć dowolnego rodzaju wyświetlacza (oparty na wektorach, zrasteryzowany itp.).
Edycja: ASCII jest również dozwolony, aby zezwolić na języki gry w golfa z tylko tekstem.
Dane wyjściowe dla grafiki rasteryzowanej lub ASCII muszą wynosić co najmniej 50 * 50 (piksele dla rasteryzacji, znaki dla ASCII)
Dodatkowe informacje
Dodatnia oś Z wskazuje okno, oś X jest pozioma, a oś Y jest pionowa. Zasadniczo standard OpenGL.
Obracanie odbywa się w kierunku przeciwnym do ruchu wskazówek zegara, jeśli spojrzysz na sześcian w kierunku ujemnym określonej osi, np. Patrząc w dół w kierunku osi y.
Kamera powinna znajdować się na osi Z w rozsądnej odległości od sześcianu w ujemnym kierunku Z, sześcian powinien znajdować się w (0; 0; 0). The. sześcian musi być również w pełni widoczny i zajmować co najmniej 50% ramki rysunkowej. Kamera powinna patrzeć w sześcian w kierunku dodatnim.
Obroty sześcianu są stosowane w kolejności x-> y-> z.
Sześcian jest obracany wokół środka, nie porusza się.
Aby rzutować sześcian na przestrzeń 2d, musisz podzielić współrzędne xiy sześcianu z odległością równoległą do osi Z między punktem a kamerą.
Zasady
Biblioteki renderowania są dozwolone, ale wierzchołki muszą być zdefiniowane w kodzie. Brak klasy modelu kostki 3d.
Przypadki testowe
źródło
google will tell you the formula.
Nie , wyzwania powinny zawierać jak najwięcej materiałów i informacji potrzebnych do ich rozwiązania, zawartych w treści postu . Nie powinienem iść na googling lub na Wikipedię, żeby zacząć rozumieć.Odpowiedzi:
Buty (rubinowe)
235231Wszystko obliczone od zera.
Zadzwoń z wiersza poleceń np
shoes cube3d.rb 0 30 0
Chodzi o to, aby jednocześnie generować / obracać cztery wierzchołki czworościanu w 3D. Następnie, gdy zostaną one zredukowane do 2d, generujemy cztery wierzchołki odwrotnego czworościanu (łącznie 8 wierzchołków to te sześcianu). Daje to 4 pary wierzchołków odpowiadające 4 przekątnym ciała. Wreszcie 2d wierzchołki są połączone liniami: każdy wierzchołek pierwotnego czworościanu musi być połączony z każdym wierzchołkiem odwrotnego czworościanu, tworząc 12 krawędzi i 4 przekątne bryły sześcianu. Kolejność zapewnia, że przekątne korpusu nie zostaną narysowane.
Dane wyjściowe przypadków testowych
Zauważ, że aby zachować spójność z dwoma ostatnimi przypadkami testowymi, obrót wokół osi Z odbywa się zgodnie z ruchem wskazówek zegara od POV przeglądarki. Wydaje się to jednak być sprzeczne ze specyfikacją. Kierunek obrotu można odwrócić, modyfikując
*i**c
->/i**c
bez golfa
Należy pamiętać, że ze względów historycznych w linii 9 stosuje się współczynnik skali 90 (wybrano, aby był taki sam jak 90 stopni w linii 2 dla gry w golfa), ale ostatecznie nie było żadnej przewagi golfowej w korzystaniu z tej konkretnej wartości, więc stała się dowolny wybór.
źródło
HTML / CSS / JS, 739 bajtów, prawdopodobnie niekonkurencyjny
Ale chciałem tylko pochwalić się transformacjami CSS 3D.
Pokaż fragment kodu
źródło
Klon,
130 + 14(w trakcie)Wypisuje stałą funkcję w ramce, a następnie używa opcji drukowania do ukrycia znaczników, etykiet i samej funkcji. Dodanie
projection=.5
do opcji przybliża kamerę, umożliwiając widok perspektywiczny.Napisałem to, zanim specyfikacje zostały sfinalizowane, a kolejność rotacji jest
x, y', z''
zamiastx, y, z
. Dopóki nie poprawię kątów, oto inne rozwiązaniePOV-Ray, 182
czyta wejście za pośrednictwem
a.txt
pliku, który powinien zawierać#declare R=<xx,yy,zz>;
z
xx,yy,zz
czym kąty obrotuźródło