Nous n'avons pas un seul défi à dessiner un vrai cube en 3 dimensions, alors voici:
Défi
Votre tâche consiste à dessiner un cube en rotation avec perspective. Il peut être dans une fenêtre séparée ou sous forme d'image.
Contribution
Votre entrée est composée de 3 nombres séparés entre 0 et 359,99 ... Ceux-ci représentent la rotation autour des axes x, y et z en degrés.
0 0 0
30 0 40
95 320 12
Production
Vous pouvez soit l'afficher dans une fenêtre séparée, soit enregistrer une image. Vous pouvez utiliser n'importe quel type d'affichage (vectoriel, tramé, etc.).
Edit: ASCII est également autorisé, pour autoriser les langues de golf avec uniquement une sortie textuelle.
La sortie pour les graphiques tramés ou ASCII doit être d'au moins 50 * 50 (pixels pour la pixellisation, caractères pour ASCII)
Information additionnelle
L'axe z positif pointe vers la fenêtre, l'axe x est horizontal et l'axe y est vertical. Fondamentalement, la norme OpenGL.
Les rotations sont dans le sens antihoraire si vous regardez le cube dans le sens négatif d'un axe spécifique, par exemple en regardant vers le bas pour l'axe y.
La caméra doit être sur l'axe z à une distance raisonnable du cube dans la direction z négative, le cube doit être à (0; 0; 0). Le. le cube doit également être entièrement visible et occuper au moins 50% du cadre de dessin. La caméra doit regarder dans le sens z positif au cube.
Les rotations du cube sont appliquées dans l'ordre x-> y-> z.
Le cube tourne autour de son centre, il ne bouge pas.
Pour projeter un cube dans un espace 2D, vous devez diviser les coordonnées x et y du cube avec la distance parallèle à l'axe z entre le point et la caméra.
Règles
Les bibliothèques de rendu sont autorisées, mais les sommets doivent être définis dans le code. Aucune classe de modèle de cube 3D.
Cas de test
la source
google will tell you the formula.
Non , les défis doivent contenir autant de matériel et d'informations nécessaires pour les résoudre que possible, inclus dans le corps du message . Je ne devrais pas avoir à aller sur Google ou sur Wikipedia pour commencer à comprendre.Réponses:
Chaussures (Ruby)
235231Tout est calculé à partir de zéro.
Appel depuis la ligne de commande, par exemple
shoes cube3d.rb 0 30 0
L'idée est de générer / faire tourner simultanément les quatre sommets d'un tétraèdre en 3D. Puis, comme ceux-ci sont réduits à 2d, nous générons les quatre sommets du tétraèdre inverse (le total des 8 sommets étant ceux du cube). Cela donne 4 paires de sommets correspondant aux 4 diagonales du corps. Enfin les 2d sommets sont reliés par des lignes: chaque sommet du tétraèdre d'origine doit être connecté à chaque sommet du tétraèdre inverse formant les 12 arêtes et 4 diagonales du corps du cube. La commande garantit que les diagonales du corps ne sont pas tracées.
Sortie des cas de test
Notez que, pour être cohérent avec les deux derniers cas de test, la rotation autour de l'axe z est dans le sens horaire à partir du PDV du visualiseur. Cela semble cependant être en contradiction avec la spécification. Le sens de rotation peut être inversé en modifiant
*i**c
->/i**c
non golfé
Notez que pour des raisons historiques, un facteur d'échelle de 90 est appliqué dans la ligne 9 (choisi pour être identique à 90 degrés dans la ligne 2 pour le golf) mais en fin de compte, il n'y avait aucun avantage au golf à utiliser cette valeur particulière, il est donc devenu un choix arbitraire.
la source
HTML / CSS / JS, 739 octets, probablement non concurrents
Mais je voulais juste montrer les transformations CSS 3D.
Afficher l'extrait de code
la source
Érable,
130 + 14(en cours)Cela trace une fonction constante à l'intérieur d'une boîte, puis utilise des options de tracé pour masquer les graduations, les étiquettes et la fonction elle-même. L'ajout
projection=.5
aux options rapproche la caméra, permettant une vue en perspective.J'ai écrit ceci avant que les spécifications ne soient finalisées et l'ordre de rotation est à la
x, y', z''
place dex, y, z
. Jusqu'à ce que je fixe les angles, voici une autre solutionPOV-Ray, 182
lit l'entrée dans le
a.txt
fichier qui doit contenir#declare R=<xx,yy,zz>;
avec
xx,yy,zz
les angles de rotationla source