No tenemos el único desafío de dibujar un cubo tridimensional real, así que aquí va:
Desafío
Su tarea es dibujar un cubo girado con perspectiva. Puede estar en una ventana separada o como una imagen.
Entrada
Su entrada es 3 números separados entre 0 y 359.99 ... Estos representan la rotación alrededor de los ejes x, y y z en grados.
0 0 0
30 0 40
95 320 12
Salida
Puede mostrarlo en una ventana separada o guardar una imagen. Puede usar cualquier tipo de visualización (basada en vectores, rasterizada, etc.).
Editar: ASCII también está permitido, para permitir idiomas de golf con solo salida de texto.
La salida para gráficos rasterizados o ASCII debe ser de al menos 50 * 50 (píxeles para rasterización, caracteres para ASCII)
Información Adicional
El eje z positivo señala desde la ventana, el eje x es horizontal y el eje y es vertical. Básicamente el estándar OpenGL.
Las rotaciones son en sentido antihorario si observa el cubo en la dirección negativa de un eje específico, por ejemplo, mirando hacia abajo para el eje y.
La cámara debe estar en el eje z a una distancia razonable del cubo en la dirección negativa de z, el cubo debe estar en (0; 0; 0). Los. el cubo también debe ser completamente visible y ocupar al menos el 50% del marco de dibujo. La cámara debe mirar en la dirección z positiva hacia el cubo.
Las rotaciones del cubo se aplican en el orden x-> y-> z.
El cubo gira alrededor de su centro, no se mueve.
Para proyectar un cubo en el espacio 2d, debe dividir las coordenadas x e y del cubo con la distancia paralela al eje z entre el punto y la cámara.
Reglas
Las bibliotecas de representación están permitidas, pero los vértices deben definirse en el código. No hay clase de modelo de cubo 3d.
Casos de prueba
fuente
google will tell you the formula.
No , los desafíos deben contener la mayor cantidad de material e información necesaria para resolverlos, incluido en el cuerpo de la publicación . No debería tener que buscar en Google o Wikipedia para comenzar a entender.Respuestas:
Zapatos (Ruby)
235231Todo se calculó desde cero.
Llamar desde la línea de comandos, por ejemplo
shoes cube3d.rb 0 30 0
La idea es generar / rotar simultáneamente los cuatro vértices de un tetraedro en 3d. Luego, a medida que se reducen a 2d, generamos los cuatro vértices del tetraedro inverso (los 8 vértices totales son los del cubo). Esto da 4 pares de vértices correspondientes a las 4 diagonales del cuerpo. Finalmente, los vértices 2D están conectados por líneas: cada vértice del tetraedro original debe estar conectado a cada vértice del tetraedro inverso que forma los 12 bordes y las 4 diagonales del cuerpo del cubo. El pedido asegura que las diagonales del cuerpo no se tracen.
Salida de casos de prueba
Tenga en cuenta que, para ser coherente con los dos últimos casos de prueba, la rotación sobre el eje z es en sentido horario desde el punto de vista del espectador. Sin embargo, esto parece estar en contradicción con la especificación. La dirección de rotación se puede revertir modificando
*i**c
->/i**c
sin golf
Tenga en cuenta que, por razones históricas, se aplica un factor de escala de 90 en la línea 9 (elegido para ser igual a 90 grados en la línea 2 para jugar al golf), pero al final no hubo ninguna ventaja en el uso de este valor en particular, por lo que se ha convertido en un elección arbitraria
fuente
HTML / CSS / JS, 739 bytes, probablemente no competitivos
Pero solo quería mostrar transformaciones CSS 3D.
Mostrar fragmento de código
fuente
Arce,
130 + 14(en progreso)Esto traza una función constante dentro de un cuadro, luego usa las opciones de trazado para ocultar las marcas, las etiquetas y la función misma. Agregar
projection=.5
a las opciones acerca la cámara, permitiendo la vista en perspectiva.Escribí esto antes de que se finalizaran las especificaciones y el orden de rotación es en
x, y', z''
lugar dex, y, z
. Hasta que arregle los ángulos, aquí hay otra soluciónPOV-Ray, 182
lee la entrada a través del
a.txt
archivo que debería contener#declare R=<xx,yy,zz>;
con
xx,yy,zz
ser los ángulos de rotaciónfuente