Wir haben keine einzige Herausforderung beim Zeichnen eines echten dreidimensionalen Würfels.
Herausforderung
Ihre Aufgabe ist es, einen gedrehten Würfel mit Perspektive zu zeichnen. Es kann in einem separaten Fenster oder als Bild sein.
Eingang
Ihre Eingabe besteht aus 3 separaten Zahlen zwischen 0 und 359,99 ... Diese repräsentieren die Drehung um die x-, y- und z-Achse in Grad.
0 0 0
30 0 40
95 320 12
Ausgabe
Sie können es entweder in einem separaten Fenster anzeigen oder ein Bild speichern. Sie können jede Art von Anzeige verwenden (vektorbasiert, gerastert usw.).
Bearbeiten: ASCII ist ebenfalls zulässig, um Golfsprachen nur mit Textausgabe zuzulassen.
Die Ausgabe für gerasterte oder ASCII-Grafiken muss mindestens 50 * 50 betragen (Pixel für die Rasterung, Zeichen für ASCII).
Zusätzliche Information
Die positive z-Achse zeigt aus dem Fenster, die x-Achse ist horizontal und die y-Achse ist vertikal. Grundsätzlich der OpenGL-Standard.
Drehungen erfolgen gegen den Uhrzeigersinn, wenn Sie den Würfel in der negativen Richtung einer bestimmten Achse betrachten, z. B. nach unten auf die y-Achse.
Die Kamera sollte sich in negativer z-Richtung auf der z-Achse in einem angemessenen Abstand vom Würfel befinden, der Würfel sollte sich auf (0; 0; 0) befinden. Das. Der Würfel muss außerdem vollständig sichtbar sein und mindestens 50% des Zeichenrahmens einnehmen. Die Kamera sollte in positiver z-Richtung auf den Würfel schauen.
Die Rotationen des Würfels werden in der Reihenfolge x-> y-> z angewendet.
Der Würfel wird um seine Mitte gedreht, er bewegt sich nicht.
Um einen Würfel im 2D-Raum zu projizieren, müssen Sie die x- und y-Koordinaten des Würfels durch den Abstand parallel zur z-Achse zwischen dem Punkt und der Kamera teilen.
Regeln
Rendering-Bibliotheken sind zulässig, die Eckpunkte müssen jedoch im Code definiert werden. Keine 3D-Würfel-Modellklasse.
Testfälle
quelle
google will tell you the formula.
Nein , Herausforderungen sollten so viel Material und Informationen wie möglich enthalten, die zur Lösung erforderlich sind und im Hauptteil des Beitrags enthalten sind . Ich sollte nicht googeln oder Wikipedia gehen müssen, um zu verstehen.Antworten:
Schuhe (Rubin)
235231Alles von Grund auf neu berechnet.
Anruf von der Kommandozeile zB
shoes cube3d.rb 0 30 0
Die Idee ist, gleichzeitig die vier Eckpunkte eines Tetraeders in 3d zu erzeugen / zu drehen. Wenn diese dann auf 2d reduziert werden, erzeugen wir die vier Eckpunkte des inversen Tetraeders (die insgesamt 8 Eckpunkte sind die des Würfels). Dies ergibt 4 Eckpunktpaare, die den 4 Körperdiagonalen entsprechen. Schließlich werden die 2d-Eckpunkte durch Linien verbunden: Jeder Scheitelpunkt des ursprünglichen Tetraeders muss mit jedem Scheitelpunkt des inversen Tetraeders verbunden werden, der die 12 Kanten und 4 Körperdiagonalen des Würfels bildet. Die Bestellung stellt sicher, dass die Körperdiagonalen nicht aufgezeichnet werden.
Ausgabe von Testfällen
Beachten Sie, dass die Drehung um die z-Achse vom POV des Betrachters aus im Uhrzeigersinn erfolgt, um mit den letzten beiden Testfällen übereinzustimmen. Dies scheint jedoch im Widerspruch zur Spezifikation zu stehen. Die Drehrichtung kann durch Ändern von
*i**c
-> umgekehrt werden/i**c
ungolfed
Beachten Sie, dass aus historischen Gründen in Zeile 9 ein Skalierungsfaktor von 90 angewendet wird (der für das Golfen mit 90 Grad in Zeile 2 identisch ist), aber am Ende gab es keinen Golfvorteil bei der Verwendung dieses bestimmten Werts, so dass er zu einem geworden ist willkürliche Wahl.
quelle
HTML / CSS / JS, 739 Byte, wahrscheinlich nicht konkurrierend
Aber ich wollte nur CSS 3D-Transformationen zeigen.
Code-Snippet anzeigen
quelle
Ahorn,
130 + 14(in Bearbeitung)Dies zeichnet eine konstante Funktion in einem Feld und verwendet dann Plotoptionen, um Häkchen, Beschriftungen und die Funktion selbst auszublenden. Durch Hinzufügen
projection=.5
zu den Optionen wird die Kamera näher gebracht und die perspektivische Ansicht ermöglicht.Ich habe dies geschrieben, bevor die Spezifikationen fertiggestellt wurden und die Rotationsreihenfolge
x, y', z''
statt istx, y, z
. Bis ich die Winkel fixiere, ist hier eine andere LösungPOV-Ray, 182
liest Eingabe über die
a.txt
Datei , die enthalten sollte ,#declare R=<xx,yy,zz>;
mit
xx,yy,zz
wobei der Drehwinkelquelle