{"id":902,"date":"2014-03-25T01:48:50","date_gmt":"2014-03-24T23:48:50","guid":{"rendered":"http:\/\/descartesjs.org\/documentacion\/?p=902"},"modified":"2021-08-06T18:07:25","modified_gmt":"2021-08-06T17:07:25","slug":"graficos-3d-relaciones-espaciales","status":"publish","type":"post","link":"https:\/\/reddescartes.org\/documentacion\/graficos-3d-relaciones-espaciales\/","title":{"rendered":"Ejercicios con gr\u00e1ficos 3D &#8211; Relaciones espaciales"},"content":{"rendered":"<h2><strong>Descripci\u00f3n del ejercicio<\/strong><\/h2>\n<p>En este apartado, construiremos una escena que muestre un cubo compuesto por varios bloques generados aleatoriamente. Debemos incluir un texto que pregunte por el n\u00famero de bloques y otro texto que muestre \u201ccorrecto\u201d o \u201cincorrecto\u201d, seg\u00fan la respuesta.<\/p>\n<p><strong>Tama\u00f1o de la escena.<\/strong>\u00a0 Debemos cambiar las dimensiones de la escena a 600&#215;400.<\/p>\n<p><b>Espacio de trabajo<\/b>. Insertaremos un espacio 3D con las caracter\u00edsticas que\u00a0 se observan en la imagen de abajo. Asignamos 50 al desplazamiento en y (0.y = 50), -100 al desplazamiento en x (O.x = -100), escala de 90, despliegue pintor y una imagen de fondo.<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-903 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel1.png\" alt=\"rel1\" width=\"675\" height=\"203\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel1.png 844w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel1-300x90.png 300w\" sizes=\"(max-width: 675px) 100vw, 675px\" \/><\/p>\n<p><b>Controles.<\/b> Usaremos tres controles.<\/p>\n<p><b>Control de escala. <\/b>El programa Descartes trae un control de escala que usaremos en otra sesi\u00f3n. Por ahora a\u00f1adimos, al interior de la escena, un control num\u00e9rico tipo barra identificado por la letra <b>a <\/b>(id)<b> <\/b>y de nombre <b>Escala<\/b>. El valor inicial es de 1.5, incremento de 0.1, m\u00ednimo 1.5 y m\u00e1ximo 3, con posici\u00f3n en el<strong> sur<\/strong> (parte inferior de la escena).<\/p>\n<p><b>Control de inicio.<\/b> A\u00f1adimos un control num\u00e9rico tipo bot\u00f3n con el siguiente nombre \u201cOtro ejercicio\u201d, con posici\u00f3n y tama\u00f1o definidos por (E1._w-125, 10, 120,30) y cuya acci\u00f3n ser\u00e1 similar a la de inicio; sin embargo, el efecto es recalcular las variables usadas en la escena, de tal forma que se reinicie.<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-905 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel1b.png\" alt=\"rel1b\" width=\"665\" height=\"415\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel1b.png 831w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel1b-300x187.png 300w\" sizes=\"(max-width: 665px) 100vw, 665px\" \/><\/p>\n<p>\u00a0<b>Control para pregunta. <\/b>\u00a0Insertamos un control num\u00e9rico tipo <b>campo de texto<\/b> cuya posici\u00f3n, como en el primer control, ser\u00e1 en el <strong>sur<\/strong> de la escena. El nombre de este control es \u201c\u00bfcu\u00e1ntos bloques hay?\u201d Su identificaci\u00f3n (id) ser\u00e1 n3 (ver imagen siguiente).<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-906 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel2.png\" alt=\"rel2\" width=\"673\" height=\"200\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel2.png 841w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel2-300x89.png 300w\" sizes=\"(max-width: 673px) 100vw, 673px\" \/><\/p>\n<p style=\"text-align: left;\">Es importante modificar el alto de los controles que se ubican en la parte inferior de la escena, para facilitar la interacci\u00f3n en dispositivos m\u00f3viles. Para ello, en la opci\u00f3n botones, hacemos el cambio como se indica en la siguiente imagen:<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-907 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel2b.png\" alt=\"rel2b\" width=\"671\" height=\"151\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel2b.png 839w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel2b-300x67.png 300w\" sizes=\"(max-width: 671px) 100vw, 671px\" \/><\/p>\n<p><strong>Algoritmo de inicio<\/strong><b>. <\/b>Usaremos cinco variablesr, cuyos valores iniciales son n\u00fameros aleatorios. Si bien el cubo es un paralelep\u00edpedo que tiene sus tres dimensiones iguales, generaremos tres variables que har\u00e1n variar las divisiones en cada uno de los lados del cubo. Para este efecto, hablaremos de largo, ancho y alto.<\/p>\n<ul>\n<li>\u00a0<b>Largo. <\/b>Definido por \u00a0<b>p = ent(rnd*4)+1. <\/b>La usaremos para generar aleatoriamente el n\u00famero de divisiones que tendr\u00e1 el largo del cubo. Var\u00eda entre 1 y 4.<\/li>\n<li>\u00a0<b>Ancho. <\/b>Definido por\u00a0<b>q = ent(rnd*5)+1. <\/b>La usaremos para generar aleatoriamente el n\u00famero de divisiones que tendr\u00e1 el ancho del cubo. Var\u00eda entre 1 y 5.<\/li>\n<li><b>\u00a0<\/b><b>Alto. <\/b>Definido por \u00a0<b>r = ent(rnd*4)+1. <\/b>La usaremos para generar aleatoriamente el n\u00famero de divisiones que tendr\u00e1 la altura del cubo. Var\u00eda entre 1 y 4.<\/li>\n<\/ul>\n<p><b>\u00a0<\/b><b>Rotaciones del espacio. <\/b>Otro efecto que a\u00f1adiremos es la rotaci\u00f3n aleatoria del espacio E1. El <i>Nippe <\/i>Descartes ofrece un par\u00e1metro que permite este tipo de rotaci\u00f3n.<\/p>\n<ul>\n<li><b style=\"line-height: 1.5em;\">E1.rot.z.<\/b><span style=\"line-height: 1.5em;\"> Permite rotar el espacio E1 alrededor del eje z un n\u00famero de grados asignados. Por ejemplo, E1.rot.z = 30 lo har\u00e1 rotar 30 grados.<\/span><\/li>\n<li><b style=\"line-height: 1.5em;\">E1.rot.y.<\/b><span style=\"line-height: 1.5em;\"> Permite rotar el espacio E1 alrededor del eje y un n\u00famero de grados asignados. Por ejemplo, E1.rot.y = 30 lo har\u00e1 rotar 30 grados.<\/span><\/li>\n<\/ul>\n<p>De acuerdo a lo anterior, insertaremos en el algoritmo de inicio las variables, tal como se indica en la imagen:<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-910 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel3.png\" alt=\"rel3\" width=\"477\" height=\"186\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel3.png 596w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel3-300x117.png 300w\" sizes=\"(max-width: 477px) 100vw, 477px\" \/><\/p>\n<ul>\n<li><b>E1.rot.z = ent(45*rnd)+10. <\/b>Permite rotar el espacio alrededor del eje z un valor de\u00a0n grados, donde\u00a0n\u00a0var\u00eda entre 10 y 54 grados.<\/li>\n<li><b>E1.rot.y = ent(25*rnd)+10.<\/b><b>\u00a0<\/b>Permite rotar el espacio alrededor del eje y un valor de <b>n grados<\/b>, donde <b>n<\/b> var\u00eda entre 10 y 34 grados.<\/li>\n<\/ul>\n<p><b>Gr\u00e1ficos 3D. <\/b>\u00a0Usaremos seis superficies y tres textos.<\/p>\n<p><img class=\" wp-image-912 alignright\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel4.png\" alt=\"rel4\" width=\"198\" height=\"154\" \/><b>Cara 1 del cubo. \u00a0<\/b>Insertamos una superficie cuya expresi\u00f3n es \u201c<b>x=a*u y=a*v z=0\u201d<\/b>. Es decir, un plano sobre xy. Observemos que el tama\u00f1o en que podemos ver el plano depende del factor de escala que llamamos <b>a. <\/b>Por defecto este plano se dibujar\u00eda como la primera imagen de abajo (izquierda). Si activamos las aristas, la imagen cambia (ver imagen central) a un plano dividido por siete l\u00edneas en cada uno de sus lados, dado que <b>Nu = 7 <\/b>y<b> Nv = 7<\/b>. Si cambiamos estos valores por <b>Nu = p <\/b>y<b> Nv = q,<\/b> las aristas variar\u00e1n aleatoriamente cada vez que hacemos clic en el bot\u00f3n <b>Otro ejercicio. <\/b>Finalmente, debemos escoger un color para esta cara.<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-913 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel5.png\" alt=\"rel5\" width=\"669\" height=\"220\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel5.png 836w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel5-300x98.png 300w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><b><\/b><\/p>\n<p style=\"text-align: left;\"><b><img class=\" wp-image-914 alignright\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel6.png\" alt=\"rel6\" width=\"197\" height=\"203\" \/>Cara 2 del cubo. <\/b>Insertamos otra superficie cuya expresi\u00f3n es la de cara anterior. Es decir, expresi\u00f3n: x<b>=a*u y=a*v z=0<\/b>. La rotaremos 90 grados alrededor del eje x, para ello usamos un <b>rotini <\/b>de (90, 0, 0). Si observamos la figura del lado derecho comprenderemos lo que estamos haciendo. Para garantizar que las divisiones del lado com\u00fan sean iguales, usaremos <b>Nu = p <\/b>(Nu va sobre el eje x). La otra dimensi\u00f3n es el alto del cubo, es decir <b>Nv = r. <\/b>Terminamos esta cara activando las aristas y usando otro color.<\/p>\n<p><b>Cara 3 del cubo. <\/b>Insertamos una superficie igual a la anterior. Lo \u00fanico que cambiaremos es su posici\u00f3n a un <b>posini <\/b>de (0, a, 0). De esa manera creamos una cara paralela a la anterior. Activa aristas y cambia color.<\/p>\n<p style=\"text-align: center;\"><img class=\"size-full wp-image-915 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel7.png\" alt=\"rel7\" width=\"616\" height=\"190\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel7.png 616w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel7-300x92.png 300w\" sizes=\"(max-width: 616px) 100vw, 616px\" \/><\/p>\n<p><b><img class=\" wp-image-916 alignright\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel8.png\" alt=\"rel8\" width=\"175\" height=\"182\" \/>Cara 4 del cubo. <\/b>Insertamos una superficie igual a la anterior cambiando <b>posini <\/b>a (0, 0, a) y <b>rotini <\/b>a (0, 0, 0). De esa manera creamos la cara superior del cubo. Como esta cara es paralela a la primera, entonces <b>Nu = p <\/b>y<b> Nv = q.<\/b> Activamos aristas y cambiamos el color. <b><\/b><\/p>\n<p><b><img class=\" wp-image-917 alignright\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel9.png\" alt=\"rel9\" width=\"220\" height=\"253\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel9.png 275w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel9-261x300.png 261w\" sizes=\"(max-width: 220px) 100vw, 220px\" \/>Cara 5 del cubo. <\/b>Insertamos una superficie con expresi\u00f3n igual a las anteriores. Es decir <b>x=a*u y=a*v z=0<\/b>. Para esta cara veremos la utilidad de lo que aprendimos en la clase 13. La cara inicial es la de color amarillo de la imagen derecha. La cara de color rojo es la segunda cara que agregamos. La cara que vamos a agregar es la de color magenta. Para lograr esta cara debemos desplazar la amarilla a lo largo del eje x con un <b>posini<\/b> de (a, 0, 0) y rotarla alrededor del eje y con un <b>rotini <\/b>\u00a0de (0, -90, 0). <b>Nu = r <\/b>y<b> Nv = q <\/b>\u00bfpor qu\u00e9?<\/p>\n<p>Activamos aristas y usamos otro color.<\/p>\n<p><b>Cara 6 del cubo. <\/b>Esta cara es igual a la anterior (cara opuesta) con <b>posini <\/b>(0, 0, 0). Activamos aristas y usamos otro color.<\/p>\n<p><b>Texto 1. <\/b>Este texto escribir\u00e1 el mensaje \u201c\u00a1Correcto!\u201d cuando n3 = p*q*r, que ubicaremos en [20, 200]. Observemos en la imagen de abajo un ejemplo de la escena.<\/p>\n<p style=\"text-align: center;\"><img class=\" wp-image-918 aligncenter\" src=\"https:\/\/descartesjs.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel10.png\" alt=\"rel10\" width=\"503\" height=\"422\" srcset=\"https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel10.png 559w, https:\/\/reddescartes.org\/documentacion\/wp-content\/uploads\/2014\/04\/rel10-300x251.png 300w\" sizes=\"(max-width: 503px) 100vw, 503px\" \/><\/p>\n<p><b>Texto 2. <\/b>Este texto escribir\u00e1 el mensaje \u201c\u00a1Incorrecto!\u201d cuando n3 es diferente de p*q*r y mayor que cero (esta \u00faltima condici\u00f3n, para evitar que aparezca al inicio de la escena). Lo ubicaremos en [20, 150]. El programa Descartes representa el s\u00edmbolo de \u201cdiferente\u201d con la combinaci\u00f3n de estos dos s\u00edmbolos !=. De acuerdo con lo anterior, el texto aparecer\u00e1 \u00a0cuando esta condici\u00f3n sea verdadera: <b>dibujar-si<\/b> = (n3!=p*q*r)&amp;(n3&gt;0).<\/p>\n<p><b>Texto 3. <\/b>Este texto escribir\u00e1 el mensaje \u201cEscribe el n\u00famero y presiona ENTER\u201d en la posici\u00f3n [5, 360].<\/p>\n<p><b>Texto 4. <\/b>Un t\u00edtulo para la escena, similar al que aparece en la escena final:<\/p>\n<div style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Ejercicios_3D_JS\/ejemplo1.html\" width=\"610\" height=\"420\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/div>\n<div style=\"text-align: center;\"><\/div>\n<div style=\"text-align: center;\">\n<h2 style=\"text-align: left;\">EJERCICIOS<\/h2>\n<p style=\"text-align: left;\">Con lo aprendido anteriormente, \u00a0proponemos realizar ejercicios m\u00e1s complejos, como los que se describen a continuaci\u00f3n:<\/p>\n<p style=\"text-align: left;\"><strong>Ejercicio 1.\u00a0\u00a0<\/strong>Construir una escena que muestre un cubo compuesto por varios bloques generados aleatoriamente. Las divisiones del alto deben ser iguales a las del largo. La escena final que se espera es la siguiente:<\/p>\n<div style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Ejercicios_3D_JS\/ejemplo2.html\" width=\"610\" height=\"420\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/div>\n<p style=\"text-align: left;\"><strong>Ejercicio 2.<\/strong> \u00a0Construir una escena que muestre un cubo compuesto por varios bloques generados aleatoriamente y un paralelep\u00edpedo compuesto, tambi\u00e9n de bloques aleatorios, ubicados sobre la cara superior del cubo. El alto del paralelep\u00edpedo no tiene divisiones.<\/p>\n<div style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Ejercicios_3D_JS\/ejemplo3.html\" width=\"610\" height=\"420\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/div>\n<p style=\"text-align: left;\"><strong>Ejercicio 3.<\/strong>\u00a0Construir una escena que muestre un cubo compuesto por varios bloques generados aleatoriamente. Las divisiones del alto son s\u00f3lo dos. De la divisi\u00f3n superior se deben restar algunos bloques.<\/p>\n<div style=\"text-align: center;\">\n<!-- iframe plugin v.4.5 wordpress.org\/plugins\/iframe\/ -->\n<iframe src=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Ejercicios_3D_JS\/ejemplo4.html\" width=\"610\" height=\"420\" scrolling=\"yes\" class=\"iframe-class\" frameborder=\"0\"><\/iframe>\n<\/div>\n<p style=\"text-align: left;\">Puede descargarse todas las escenas anteriores desde <a href=\"https:\/\/descartesjs.org\/repositorio\/documentacion_4D\/Ejercicios_3D_JS.zip\">este enlace<\/a>.<\/p>\n<p style=\"text-align: left;\">\u00a1Eso es todo!<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Descripci\u00f3n del ejercicio En este apartado, construiremos una escena que muestre un cubo compuesto por varios bloques generados aleatoriamente. Debemos incluir un texto que pregunte por el n\u00famero de bloques y otro texto que muestre \u201ccorrecto\u201d o \u201cincorrecto\u201d, seg\u00fan la respuesta. Tama\u00f1o de la escena.\u00a0 Debemos cambiar las dimensiones de la escena a 600&#215;400. Espacio de trabajo. Insertaremos un espacio 3D con las caracter\u00edsticas que\u00a0 se observan en la imagen de abajo. Asignamos 50 al desplazamiento en y (0.y = 50), -100 al desplazamiento en x (O.x = -100), escala de 90, despliegue pintor y una imagen de fondo. Controles.<\/p>\n<a class=\"more-link\" rel=\"nofollow\" href=\"https:\/\/reddescartes.org\/documentacion\/graficos-3d-relaciones-espaciales\/\">[Leer m\u00e1s...]<\/a>","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[39],"tags":[110,75],"_links":{"self":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/902"}],"collection":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/comments?post=902"}],"version-history":[{"count":15,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/902\/revisions"}],"predecessor-version":[{"id":925,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/posts\/902\/revisions\/925"}],"wp:attachment":[{"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/media?parent=902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/categories?post=902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/reddescartes.org\/documentacion\/wp-json\/wp\/v2\/tags?post=902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}