Valora este artículo
(4 votos)

nivel medioLos puzles son un excelente material de motivación y está probado que son facilitadores del aprendizaje.

La elaboración de un puzle con DescartesJS es una tarea interesante y ahora nos va a permitir seguir avanzando en la presentación de los distintos recursos que se pueden extraer de esta herramienta de programación.

La propuesta que se hace aquí procede, como ya hemos hecho en las escenas precedentes, de una aportación de técnicas con las que nuestro compañero cartesiano Eduardo Barbero Corral realiza sus propios puzles.

Hago repaso de su esquema de trabajo y aporto conceptos complementarios que pueden ayudar a comprender mejor al lector menos experimentado con DescartesJS.

Hemos clasificado este trabajo como de nivel medio debido a que algunas propuestas que se incluyen requieren tener cierta soltura y conocimiento de la herramienta, pero quien esté trabajando a un nivel básico todavía, bien que podrá superar sin dificultad y con estudio una gran parte del contenido.

Un puzle de arrastre parte de una imagen que está troceada en piezas de igual tamaño, generalmente de forma cuadrada y la actividad consiste en armar o componer la imagen original a partir de dichas piezas.

La programación de un puzle, aunque este sea elemental, p.e de cuatro piezas, va a requerir que se aborden estas cuestiones:

  • Trocear una imagen en piezas cuadradas utilizando alguna aplicación como PhotoScape o TileMage-Image Splitter ambas gratuitas.
  • Diseñar y realizar un tablero virtual donde hay que situar una cuadrícula – que habrá que dibujar con Descartes y las piezas (imágenes).
  • Desplazar las imágenes apoyadas en su correspondiente control gráfico.
  • Restringir el movimiento de los controles gráficos para que las piezas no puedan desaparecer de la escena cuando se arrastren.
  • Procurar un efecto imán para que la imagen sea atraída y encajada en un cuadro cualquiera cuando aquella se sitúe a una distancia muy próxima del mismo.
  • Verificar si hay piezas montadas en el mismo cuadro y comunicarlo mediante un mensaje de texto.
  • Verificar si todas las piezas están correctamente encajadas en su cuadro correspondiente y comunicarlo mediante un mensaje de texto.

Dejamos los enlaces a los artículos anteriores por si alguien necesita repasar algún detalle de procedimiento que en este obviamos:

    1. Escenas con DescartesJS: Técnicas y trucos (B01)
    2. Escenas con DescartesJS: Técnicas y trucos (B02)
    3. Escenas con DescartesJS: Técnicas y trucos (B03)

Idea del proyecto

Escena_M04: Puzle de arrastre con efecto imán

La escena va a ser sencilla. Disponemos a un lado, de una cuadrícula de 2x2 (2 filas y dos columnas) y tendremos al otro lado las cuatro piezas mezcladas, situadas de forma aleatoria cada vez que se inicia la escena.

Una vez realizado este trabajo se podrá seguir una pauta similar para programar puzles nxn de mayor dimensión: 3x3, 4x4, 5x5, etc. o más general de forma rectangular nxm.

La Figura 1 te lleva al puzle ya elaborado para que puedas practicar y entender mejor los resultados que se pretende conseguir en este proyecto.

Figura 1

Figura 1

La escena debe permitir interaccionar con las piezas, poderlas arrastrar hacia la cuadrícula y situarlas correctamente en su cuadro. Decimos entonces que el puzle ha quedado armado.

En dos momentos se requiere que el usuario reciba información a través de sendos mensajes de texto:

  • Cuando al menos dos piezas están montadas en el mismo cuadro.
  • Cuando el puzle ha quedado armado.

M04 F02

Figura 2

M04 F03

Figura 3

En este proyecto se abordarán los siete puntos de la Introducción.

Proponemos la siguiente organización para las carpetas y archivos que se van a utilizar en el proyecto. La siguiente Figura 4, indica una estructura similar utilizada para desarrollar las escenas de los anteriores proyectos

M04 F04
Figura 4

La carpeta lib contiene el intérprete descartes-min.js y se puede generar automáticamente sin más que guardar en la carpeta escena_M04, con la opción Librería portable > sólo para JS, el archivo puzle.html  que incluye el código de la escena.

La carpeta piezas contiene las 4 piezas que se deberán denominar 1.jpg, 2.jpg, 3.jpg y 4.jpg

Para realizar este proyecto debes de conseguir una imagen que sea cuadrada para trocear. Si no lo fuera debes recortarla con un programa de edición de imagen y si fuera el caso redimensionarla.

Para este artículo se ha seleccionado una imagen cuadrada de 300x300 px. Cada una de las cuatro piezas del troceado resulta ser una imagen cuadrada de 150x150px.


Troceado de la imagen

Existen diferentes programas que permiten trocear una imagen. Si no dispones de ninguno puedes descargarte PhotoScape que es gratuito e incluye una opción de troceado dentro de una interesante gama de posibilidades de edición. 

Figura 5

M04 F05

 

Paso 1: Añadir la imagen. Seleccionar 2 columnas y 2 filas. Trocear

M04 F06
Figura 6

Paso 2: Trocear. Seleccionar carpeta de destino. Trocear.

M04 F07
Figura 7

Paso 3: Acceder a la carpeta de destino. Renombrar las imágenes.

PhotoScape nombra cada imagen troceada añadiendo al nombre de la imagen original un número de orden contando de arriba a abajo y de izquierda a derecha es decir sigue un orden por filas y luego por columnas: la pieza 1 es la que corresponde a la casilla (1, 1), la pieza 2 la correspondiente a la casilla (1, 2), la pieza 3 la correspondiente a la casilla (2,1) y la pieza 4 la correspondiente a la casilla (2, 2).

Editor de escenas de Descartes

Abrir el Gestor de escenas y editar la escena, modificando en primer lugar su tamaño a 700x400px.

Escena adecuada para situar una cuadrícula de 300x300px y un espacio separado para situar inicialmente las cuatro imágenes.

Actuaciones en el panel Botones

Desmarcar los cuatro botones.

Actuaciones en el panel Espacio

Ponerlo fijo, para que no se pueda desplazar por arrastre. La escala será de 150 y debe coincidir con la longitud del lado de la pieza para simplificar los cálculos de situación.

Cuida que el tablero esté colocado adecuadamente, debe de estar a la izquierda y verse entero, para ello modificas los valores O.x, O.y según convenga.

nivel basico pLa posición por defecto del origen de coordenadas (O.x, O.y) es el centro de la escena a 350px del borde izquierdo y a 200px del borde superior.

La Figura 8, muestra la red, los ejes y los números en el espacio. Esto nos permite ver mejor cómo organizar los elementos que van a aparecer en la escena. Después hay que quitarlos y poner un color de fondo para la escena al gusto del programador (ver Figura 1)

M04 F08
Figura 8

Para dibujar más adelante la cuadrícula 2x2 en el lado izquierdo de la escena, debemos posicionar el origen de coordenadas de tal manera que las coordenadas de los vértices del marco sean valores enteros sencillos. Hemos preferido que estos vértices sean (0,0), (0,2), (-2,2), (-2,0) así que para que la cuadrícula 2x2 quede dentro de la escena hay que situar O.y 150 píxeles más abajo, tal como se aprecia en la Figura 9.

M04 F09
Figura 9


Actuaciones en el panel Controles

Las piezas, que son gráficos de imagen, se mueven con controles gráficos que hay que definir previamente.

Agrega el primer control gráfico g1. Ponle un tamaño en número de píxeles que sea la mitad del de la escala, eso significa los pixeles que tiene de radio, para que coincida con el tamaño de una pieza de puzle. Posición (rnd+0.6, rnd*2) para que inicialmente aparezca a la derecha en lugar aleatorio.

Después pon dibujar-si=0 para que sea invisible el disco del control gráfico y no tape la pieza.

Los restantes controles g2, g3 y g4 se definen idénticamente como g1. Para añadir más rápidamente estos controles se pueden copiar g1 tres veces con la herramienta * situada en la ventana de agregar.


M04 F10Figura 10

nivel basico p

  • rnd es una función interna Descartes y al invocarla da un valor real aleatorio en [0, 1)
  • Un control gráfico g1 es un círculo que puede moverse con el puntero del ratón o variando sus coordenadas g1.x y g1.y que quedan definidas por defecto como controles numéricos y pueden ser referidos como variables en cualquier parte de la configuración de la escena. El tamaño de un control gráfico se refiere al radio del mismo y la posición que demos para este control será la que ocupará el centro del mismo.

La Figura 11 nos muestra cómo se va a apoyar la pieza del puzle 1.jpg al control gráfico g1.

El número de cada celda que aparece en la figura indica el lugar de destino para la correspondiente pieza, ¡no debe de verse en el puzle!

La posición de destino correcta de la imagen 1.jpg es (-2, 2) ya que si se da únicamente la expresión de las coordenadas de una imagen, estas se refieren a la posición del vértice superior izquierdo. 

M04 F11
Figura 11

Al definir el control g1 con la condición dibujar-si = 0, el control no se verá en la escena y dejará completamente descubierta la imagen que va apoyada.


Actuaciones en el panel Gráficos

Lo primero es dibujar la cuadrícula 2x2. Esto se consigue, para este caso tan simple, dibujando un polígono de vértices (0,0)(0,2)(-2,2)(-2,0)(0,0) y ancho 6 (ancho en píxeles de la línea) para resolver el borde y dos segmentos perpendiculares para hacer la división en cuatro cuadrados: (-1,0)(-1,2) y (-2,1)(2,1), ancho 1. Poner el mismo color a las líneas (p.e. blanco) y color de relleno al polígono (Ver Figura 10).

Luego se van agregando una a una las imágenes de las piezas.

Para la pieza 1, el archivo es piezas/1.jpg, pones de coordenadas la expresión (g1.x-0.5, g1.y+0.5) para que se pueda mover con el control gráfico y esté centrada. Observar la expresión que ponemos para que la imagen encaje correctamente con el control sobre el que va apoyado, según la Figura 11. Por lo que explicaremos seguidamente escribimos la condición dibujar-si = (c1=0).

nivel basico p

dibujar-si es un campo de texto donde puede escribirse una expresión booleana u otra expresión que se interpreta como tal dependiendo del valor que tenga.
El gráfico se dibuja si la expresión es vacía o si la expresión tiene valor verdadero o mayor que cero.


La particularidad de este puzle es el efecto imán. Es decir, que cuando una pieza está muy cerca de ser colocada en una casilla parece como si una fuerza obliga a adaptarse perfectamente en ella. Para conseguir este efecto imán, para cada pieza incluiremos dos entradas de la misma imagen, una se dibuja cuando c1=0 y otra se dibuja cuando c1=1.

Veamos la circunstancia que se da para cada uno de estos valores posibles de la variable auxiliar c1.

Después de leer las actuaciones en el panel Programa para el caso c1=1 hay que añadir una nueva entrada en el panel Gráficos para dibujar la pieza 1.jpg en la posición (ent(g1.x), 1+ent(g1.y)) y dibujar-si = (c1=1).

En resumen, en el panel Gráficos tenemos para cada pieza 1.jpg, 2.jpg, 3.jpg y 4.jpg dos definiciones, una con la condición dibujar-si = (c1=1) y otra con la condición dibujar-si = (c1=0) y en este mismo orden para que las piezas cuando sean arrastradas sobre el tablero lo hagan por encima de las que ya están encajadas.

Es conveniente añadir también un control numérico de botón con la acción de iniciar la escena. 

Actuaciones en el panel Programa

En el algoritmo Cálculos y evaluar siempre, en relación con la variable auxiliar c1 asociada a la imagen 1.jpg, escribimos la entrada

c1=(g1.x<0)*(abs(g1.x-ent(g1.x)-0.5)<0.05)*(abs(g1.y-ent(g1.y)-0.5)<0.05)

abs y ent son las funciones valor absoluto y la parte entera respectivamente con la definición matemática habitual.

La parte (g1.x<0) de la expresión es para que el efecto imán solo se produzca cuando la imagen está en el lado izquierdo de la escena, donde está el tablero para situar las piezas.

Observar que c1 tendrá valor 1 cuando la pieza esté colocada a una distancia muy próxima para encajar en una casilla. Esta distancia se ha fijado en menos de 0.05 tanto para la abscisa como para la ordenada de la pieza (0.05 unidades cartesianas de 150 píxeles equivale aproximadamente a 8 píxeles.).

Cuando c1 tome el valor 1, entonces la imagen en las coordenadas (g1.x, g1.y) se sustituye por la misma imagen en las coordenadas (ent(g1.x), 1+ent(g1.y)), es decir en las coordenadas del vértice superior izquierdo de la casilla que tiene tan cerca.

Añadimos después las restantes auxiliares c2, c3 y c4 asociadas a las imágenes respectivas 2.jpg, 3.jpg y 4.jpg.

Para que el proceso sea menos tedioso podemos obtener estas auxiliares copiando cada vez c1 y cambiando las referencias al subíndice 1 por 2, 3 y 4 en su correspondiente caso.

Propuesta final

Son tres las cuestiones que hasta este momento han quedado sin resolver y aunque el puzle, con lo dicho, es funcional conviene no desatenderlas:

  • Notificar mediante un mensaje de texto cuando el puzle ha quedado armado. P.e: ¡Enhorabuena!.
    Dependiendo del tema tratado en la imagen original, no siempre resulta fácil saber si la imagen ha sido bien recompuesta. 
  • Notificar mediante un mensaje de texto cuando dos piezas se han superpuesto en la misma casilla.
    P.e: “Hay piezas montadas! o, mejor, “Hay piezas superpuestas”.
  • Restringir el movimiento de los controles gráficos para que no puedan desaparecer de la escena cuando se arrastren, pues se corre el riesgo de hacer desaparecer alguna pieza si se arrastra más allá de los bordes del tablero.

El programador de DescartesJS con más recursos podrá resolver estas cuestiones cuando el número de piezas del puzle supere con mucho a cuatro. Pero queremos que también participen de esta actividad cualquier lector con nivel básico y teniendo en cuenta que manejamos pocas piezas, damos las siguientes pautas para ello.

Notificar mediante un mensaje de texto cuando el puzle ha quedado armado

Para verificar que la pieza 1 ha quedado encajada en la casilla 1 basta preguntar si la expresión c1*(ent(g1.x)=-2)*(ent(g1.y)=1) toma el valor 1.

Análogamente haremos para verificar si las restantes piezas 2, 3 y 4 están encajadas en sus respectivas casillas.

La condición para que las cuatro piezas estén encajadas en sus respectivas casillas y el puzle, por tanto, haya quedado armado es que el producto de las cuatro expresiones correspondientes valga 1.

Recomiendo crear un auxiliar, p.e. llamado armado, en el algoritmo CALCULOS del panel Programa y asignarle el valor del producto anterior.

Luego en el panel Gráficos poner la condición dibujar-si = armado, al Texto "¡Enhorabuena!" (ver Figura 3).

Notificar mediante un mensaje de texto cuando dos piezas estén superpuestas en la misma casilla

Supongamos que dos piezas, la 1 y la 2, están superpuestas y encajadas en cierta casilla, no necesariamente la casilla 1 o la casilla 2. Es obvio que se verifica c1*c2=1 pero también ent(g1.x)=ent(g2.x) y ent(g1.y)=ent(g2.y). En consecuencia c1*c2*(ent(g1.x)=ent(g2.x))*(ent(g1.y)=ent(g2.y)) tomará el valor 1.

Análogamente podemos suponer para las parejas de piezas 1 y 3, 1 y 4, 2 y 3, 2 y 4, 3 y 4. ¡En total hay 6 combinaciones posibles!.

Asignemos cada expresión a su correspondiente auxiliar, por ejemplo, s12, s13, s14, s23, s24, s34 y añadámoslos como entradas en el algoritmo CALCULOS.

Añadamos una entrada más, definiendo p.e el auxiliar montadas = s12+s13+s14+s23+s24+s34

Es obvio que montadas tomará el valor 1 cuando alguna pareja de piezas está superpuesta en una determinada casilla. Para notificar al usuario del puzle de esta circunstancia, bastará añadir, en el panel Gráficos, una entrada con el texto “Hay piezas montadas” y dibujar-si=montadas (ver Figura 2).

Restringir el movimiento de los controles gráficos

Es importante limitar el desplazamiento de los controles gráficos y en consecuencia la correspondiente pieza que va apoyada. Con esto evitaremos que por descuido al arrastrar el control más allá de los bordes del tablero la pieza pueda desaparecer y no podamos terminar de montar el puzle.

Sabemos que (g1.x, g1.y) son las coordenadas del control gráfico g1. Estas coordenadas se pueden definir convenientemente como controles numéricos y podemos conseguir esa limitación de movimientos.

En estas condiciones definimos el control gráfico g1 en la posición por defecto (0, 0) y definimos g1.x y g1.y según se indica en las figuras

M04 F12
Figura 12

M04 F13
Figura 13

Estos controles quedan ocultos en la escena con la condición dibujar-si=0. El valor se g1.x y g1.y cambia al arrastrar el control gráfico g1 pero el desplazamiento queda restringido al espacio entre los valores mínimo y máximo.

Completamos copiando las mismas definiciones de g1.x y g1.y para g2.x y g2.y, g3.x yg3.y, g4.x yg4.y

Tablero con cuadrícula o sin cuadrícula

El programador del puzle podrá optar por facilitar un tablero con cuadrícula para situar las piezas o prescindir de la misma. El puzle que hemos instrumentado en este artículo podría seguir siendo funcional si prescindimos de los dos segmentos perpendiculares que acompañan al polígono de 4 vértices que delimitan el tablero.

Ahora bien si nos interesa dejar la cuadrícula y pensamos en puzles de mayor dimensión, por ejemplo de 4x5 es más práctico dibujarla utilizando dos familias de segmentos. Solo con el fin de diferenciar aquí las dos familias utilizamos en el ejemplo siguiente un color diferente para dibujar cada una, en el puzle todos los segmentos tendrán el mismo color.

M04 F14
Figura 14

Configuración de la familia de 5 segmentos horizontales:

M04 F15
Figura 15

nivel basico p
  • La línea de segmentos tienen un ancho (grosor) de 2 px y no se dibujan los puntos extremos tamaño=0 px
  • pasos es el número de partes en que se subdivide el intervalo y por tanto s tomará todos los valores enteros en [0, 4]

 
Configuración de la familia de 6 segmentos verticales:

M04 F16
Figura 16

Esperamos haber facilitado con esta nueva edición de Técnicas y Trucos el aprendizaje a los que siguen el nivel básico y estimulado a todos los demás cartesianos para enfocar, con su propia técnica, la solución de los problemas abordados aquí.

 icono zip escena_M04.zip


Autoría:
Eduardo Barbero Corral (Proyecto y técnicas de programación)
Ángel Cabezudo Bueno
(Interpretación, edición de la escena, ilustraciones y redacción)

Este material está publicado bajo una licencia:
Licencia Creative Commons
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional

Valora este artículo
(7 votos)

La posibilidad de comunicar escenas Descartes con páginas html facilita incorporar resultados obtenidos de la ejecución de comandos Geogebra e incluso construcciones completas que pueden ser manipuladas desde la propia escena.

En este artículo se presenta una primera escena de ejemplo que utiliza los resultados de tres comandos Geogebra: Derivada, Integral y Circunferencia. Estos tres comandos tienen en común que su ejecución devuelve un único valor que puede enviarse a la escena Descartes como una cadena de caracteres. En próximos artículos se verá cómo incorporar los resultados de comandos que devuelven una lista de datos o una lista de listas.

Para poder comprender el código con el que se establece la comunicación desde Descartes, se recuerda la sintáxis de los comandos Geogebra que se utilizan en este ejemplo:

  • Derivada[función,orden]. 

Por ejemplo: Derivada[cos(x),2] calcula la segunda derivada de la función cos(x)

  • Integral[función,extremo_Inf,extremo_Sup].  

Por ejemplo: Integral[cos(x),1,2] calcula la integral definida de la función cos(x) en el intervalo [1,2]

  • Circunferencia[Punto1,Punto2,Punto3].  

Por ejemplo: Circunferencia[(0,0),(1,1),(2,2)] calcula la ecuación de la circunferencia que pasa por los puntos A=(0,0), B=(1,1) y C=(2,2).

La escena Descartes que se presenta en este artículo incluye cuatro espacios.

espacios

Uno de ellos es un espacio HTMLFrame que tiene como identificador el nombre Cal y será el que permitirá la comunicación con la página calculos.html que está vinculada a este espacio a través del parámetro 'archivo'.

La página calculos.html incluye el código javascript necesario para poder enviar y recibir datos de la construcción Geogebra que está embebida en ella. Esta página no necesita ser modificada y debe incorporarse en el mismo directorio que la página que contenga la escena Descartes (de no ser así se tendrá que modificar la ruta de acceso a ella en el parámetro 'archivo' del espacio HTMLFrame).

El funcionamiento de la escena Descartes que se presenta como ejemplo es sencilla. Elegida una de las tres opciones del menú, se inicia la comunicación con Geogebra. Si la opción elegida del menú es 'Calculo de la Derivada' se ejecuta la función Calculo1(), si se elige la opción 'Circunferencia por tres puntos' la función a ejecutar será Calculo2() y en el caso de que la opción sea 'Cálculo de la integral de un intervalo' la función asociada es Calculo3().

Las tres funciones tienen un código similar, en primer lugar construyen una cadena de caracteres con la sintásis del código Geogebra a ejecutar y después inician la comunicación enviando a la página incluida en el espacio Cal el evento 'evalua' pasándole como parámetro esta cadena de caracteres. Por ejemplo, el código incluido en la función Calculo1() es el siguiente:

n1='Derivada['+f+','+orden+']'
Cal.set('evalua',n1)

A la hora de generar la cadena de caracteres n1 se ha utilizado los valores de f y orden que están vinculados a los dos controles que se muestran en la escena para modificar, respectivametne, la expresión de la función y el orden de la derivada.

La página calculos.html, que está asociada al espacio Cal, recibe entonces el mensaje y ejecuta el código asociado al evento 'evalua' tras lo cual devuelve a la escena Descartes el resultado en una cadena de caracteres que siempre tiene por nombre vCalculado.

Todo este proceso es totalmente transparente al autor de la escena que puede utilizar el valor de la variable vCalculado de la misma forma que cualquier otra variable creada en la propia escena. Así, si por ejemplo se quiere representar la función derivada obtenida tras ejecutar Calculo1(), bastaría con:

  1. Evaluar la cadena de caracteres que se ha devuelto con el valor de la derivada: f1=_Eval_(vCalculado)
  2. Definir una función fun1(x)=f1 para poder crear un objeto gráfico de tipo ecuación cuya expresión sea: y=fun1(x)

Se puede practicar con la escena descargándola del siguiente enlace: Ejemplo1_CAS-JS.zip

Valora este artículo
(11 votos)

Los fenómenos físicos son dependientes de las características intrínsecas del medio en el que se desarrollan. Por tanto, pueden estar influidos o condicionados por la forma del espacio en el que acontecen o en el que se manifiestan. Por ejemplo, en un espacio euclídeo, dos rayos de luz emitidos en direcciones paralelas continuarán su viaje indefinidamente sin intersecarse. Sin embargo, si el espacio de propagación es curvo, geometrías no euclídeas, convergerán o divergirán según su curvatura sea positiva o negativa.

curvatura

Hiperboloide, cilindro y esfera con curvatura de Gauss negativa, nula y positiva respectivamente
Fuente de la Imagen wikipedia

¿Cómo un habitante de un determinado mundo puede investigar y conocer la forma del espacio en el que habita? Nosotros, como habitantes tridimensionales, observamos diferencias evidentes en la forma que tienen los mundos bidimensionales, las superficies, representadas en la imagen anterior. Pero un habitante bidimensional de alguno de esos lugares ¿cómo puede saber la forma que tiene la superficie que habita? La respuesta puede encontrarse en una relectura del párrafo inicial realizada desde otra perspectiva, es decir, si ese habitante emite dos rayos de luz y comprueba que divergen, entonces su mundo tiene curvatura negativa; si no se intersecan tiene curvatura nula y se cortan su curvatura es positiva. Así pues, un experimento físico realizado en el mundo que habita le permite determinar y confirmar la forma de su hábitat, lo puede ver matemáticamente, aunque no pueda verlo nunca de una perspectiva exterior. La clave la encontramos en la curvatura, ésta es la herramienta matemática que nos permite saber, observar, lo que nunca podremos ver.

Taller de curvatura

De manera análoga un habitante unidimensional, el de una línea, podrá conocer la forma de su espacio vital si es capaz de determinar la curvatura de la misma y para ello, al igual que antes, puede basarse en  algún experimento físico que permita discriminarla. Por tanto, el concepto de curvatura en una línea es un conocimiento previo que ha de comprender y adquirir como base de su investigación. Y al aprendizaje de este concepto le ayuda, nos ayuda, nuestra compañera Consolación Ruiz Gil (Solín) con su unidad didáctica titulada “Curvatura” en la que nos lleva al taller, al laboratorio matemático, y nos introduce progresivamente en ese concepto y en su medida. Para ello:

  • Tomando como referencia a la circunferencia, curva básica en el estudio geométrico, introduce la medida de su curvatura deduciendo cómo depende de su radio y por tanto es siempre una cantidad positiva. Ésta, disminuye a medida que es mayor el radio e incluso como situación límite puede asignarse a una línea recta una curvatura nula.
  • Se plantea un segundo acceso al taller al tratar de dar respuesta a la medición de la curvatura a cualquier otra curva en un determinado punto y, para ello, se marca la estrategia de aproximarla en él por un arco de circunferencia, aquel que más se le asemeja, y consecuentemente asignarle como curvatura la de esa arco. A partir de lo experimentado en este taller, Solín procede a plantear analíticamente cómo determinar ese arco y ello requiere adentrarse en un nivel microscópico. Ello obliga a acudir al laboratorio y utilizar el cálculo infinitesimal. Surge la circunferencia osculatriz y se formaliza el concepto de curvatura en cualquier curva que sea derivable.
  • La unidad didáctica finaliza referenciando artículos de difusión y periodísticos en los que la curvatura es la base para la determinación de la forma de nuestro mundo. ¿Cómo es éste? ¿“Es plano” –entendido este término aquí como “Euclídeo” o con curvatura nula--? ¿Tiene curvatura no nula? Las ondas gravitatorias, sobre las que el pasado 11 de febrero de 2016 se publicó su existencia, ayudan a establecer esa curvatura del espacio-tiempo.

Así pues, un experimento físico  (LIGO) como es la determinación de la existencia de las ondas gravitatorias nos permite adentrarnos en el conocimiento de la forma del mundo que habitamos estos seres físicamente tridimensionales (largo, ancho, alto), anexos o inmersos en una cuarta componente dimensional tiranizada por ése que siempre pasa (“Tempus fugit”). Y todo ello gracias a la curvatura, la curvatura espacio-tiempo.

LIGO ha sido posible gracias a la posibilidad de medir longitudes del orden de 10^-19 m, pero la Teoría de cuerdas plantea que nuestro universo tiene once dimensiones: una temporal, tres espaciales ordinarias y siete compactas inobservables en la práctica y que solamente son relevantes a escalas pequeñas del orden de la longitud de Planck: 10^-35 m. ¡Quedan curvaturas que estudiar! 

Valora este artículo
(5 votos)

nivel basico

En el presente artículo se explica una técnica empleada por nuestro compañero Eduardo Barbero Corral que permite validar cuando se han distribuido correctamente una serie de nombres sobre un espacio bidimensional. 

Creemos que ya no es necesario detallar, de la misma forma como lo hicimos en los dos proyectos precedentes, las herramientas de edición necesarias, como conseguirlas y como invocarlas a lo largo del proceso de elaboración. Basta remitirse a los primeros pasos indicados en “Escenas con DescartesJS: Técnicas y trucos” y en “Escenas con DescartesJS: Técnicas y trucos (B02)”.

  • Suponemos que el lector sabe acceder al editor de escenas de DescartesJS, desplazarse por los distintos paneles de configuración, agregar elementos a la lista en cada panel, rellenar ventanas y casillas correspondientes a cada elemento.

  • Recordamos que la escena tiene que ser generada con la opción Librería portable-solo para JS y que habrá que modificar las dimensiones de la escena por defecto, 970x550 píxeles, abriendo la ventana de código desde cualquier panel de configuración.

B03 F01
Figura 1


Idea del proyecto

Escena_B03: Distribución de nombres en un mapa.

Se trata de una escena en la que aparece, como fondo, la imagen del mapa político de la Comunidad Autónoma de Castilla y León (España), a un lado, en columna, los nombres de sus nueve provincias. El alumno debe moverlos, arrastrando el puntero, hasta colocarlos en el lugar correspondiente.

Comenzamos por conseguir la imagen del mapa.

Debe ser una imagen limpia y de buena calidad, de un tamaño adecuado a lo que pretendemos y la situaremos en la carpeta raíz del proyecto escena_B03

El archivo que contiene la imagen del mapa se denomina mapacylmudo.jpg y como su nombre indica es un mapa mudo.

Figura 2
Figura 2

Esta figura lleva un enlace a la escena ya elaborada, donde se puede practicar y en consecuencia comprender lo que se pretende hacer en este proyecto.

La siguiente Figura 3 muestra la estructura de carpetas que contiene los materiales del proyecto.

B03 F03

Figura 3

La carpeta lib debe de contener el archivo descartes-min.js necesario para que la escena que porta el archivo index.html pueda ser interpretada.

El tamaño de la escena por defecto tiene que modificarse para que coincida con el de la imagen, 605x410 píxeles y debe de ser la imagen de fondo en la escena (Ver la Figura 1)

Solo en el caso de que los nombres de las provincias estén bien situados deberá aparecer el mensaje “muy bien” indicando esta circunstancia y desaparecer el texto titular “Coloca cada nombre en el centro de la provincia”, como nuestra la Figura 4

Figura 4
Figura 4

Actuaciones en el panel Botones

En esta ocasión hay que desmarcar las casillas de los cuatro botones Créditos, Config, Inicio y Limpiar que por defecto ocuparían las cuatro esquinas de la escena. Aunque deben de quedar ocultos, en cualquier momento se pueden ver en una ventana emergente al hacer clic derecho sobre la escena.

Actuaciones en el panel Espacio

En el panel Espacio se escribe el nombre de la imagen, mapacylmudo.jpg, indicando la trayectoria dentro de la carpeta del proyecto, que se verá como fondo de la escena y en posición centrada.

B03 F05
Figura 5

Obsérvese que están desmarcadas las casillas que dibujan la red, los ejes, texto y números. Así es como se desea que quede el espacio finalmente, pero es conveniente que se activen a lo largo del proceso de elaboración de la escena pues facilita las coordenadas de posición que deben ocupar los diferentes textos.

La escala (píxeles de la unidad coordenada) por defecto es 48, por lo que no es necesario explicitar este valor.

Marcaremos la casilla de fijo para que el espacio no se desplace al arrastrar el puntero.

Actuaciones en el panel Controles

Insertamos tantos controles gráficos como número de provincias g1, g2, g3, ..., g9.

Estos controles quedarán alineados en columna, a la izquierda. (-4.5, 3.2), (-4.5, 2.4), (-4.5, 1.6), (-4.5, 0.8), (-4.5, 0), (-4.5, -0.8), (-4.5, -1.6), (-4.5, -2.4), (-4.5, -3.2)

Tienen un tamaño de 20 píxeles, adecuado según la escala para poderlos seleccionar fácilmente y ser arrastrados a la posición correspondiente sobre el mapa.

El control existe, pero no se tiene que ver en la escena pues la idea es que sirva exclusivamente de soporte al nombre de la provincia que le va a acompañar; esto se consigue poniendo valor 0 en la ventana de condición dibujar-si.

Veremos con más detalle en el panel Gráficos la relación que debe de existir entre las coordenadas de esos controles y las de los textos de las provincias.

B03 F06
Figura 6

También ponemos un control numéricotipo botón, para ejecutar la acción de inicio, que quedará en el ángulo inferior izquierdo, interior, de la escena. Este botón permite reiniciar la escena y practicar de nuevo desde un principio.

B03 F07
Figura 7


Actuaciones en el panel Programa

En esta sección determinamos la forma de averiguar si el control gráfico se ha arrastrado al sitio adecuado en el mapa.

Empezamos por anotar las coordenadas de un punto centrado en la región del mapa correspondiente a cada provincia. Podemos utilizar por ejemplo una hoja de cálculo o un simple editor de texto. Para ver las coordenadas de estos puntos marcamos la casilla texto en el panel Espacio a fin de que se visualicen las coordenadas del punto cuando se hace clic izquierdo sobre el mapa. Una vez registradas las coordenadas de estos puntos se debe desmarcar la casilla texto en el panel Espacio.

Así por ejemplo un punto centrado en la región del mapa correspondiente a la provincia de Ávila tiene las coordenadas (-0.3, -2.56)

B03 F08
Figura 8

Necesitamos una variable auxiliar para cada provincia cuyo valor refleje si el control gráfico se ha aproximado lo suficiente a ese punto centrado en la región del mapa y así poder validar la posición. Basta que este auxiliar tome en cada momento el valor 0 o el valor 1. Estableceremos un margen de aproximación de las coordenadas: Para Ávila, la diferencia de abcisas, en valor absoluto, menor que 0.5 y la diferencia de ordenadas, en valor absoluto, menor que 0.7

avb=(abs(g1.x+0.3)<0.5)*(abs(g1.y+2.56)<0.7)

Si el control gráfico g1 está dentro de esa zona la respuesta es correcta y el auxiliar avb toma el valor 1.

Los márgenes son diferentes para cada provincia dado que la forma y el tamaño de cada región en el mapa es irregular.

Los auxiliares y su correspondiente expresión algebraica para las distintas provincias se pueden observar en la Figura 9.

Han sido escritas en el algoritmo CALCULOS y se evalúan siempre.

B03 F09
Figura 9

Actuaciones en el panel Gráficos

Situar el texto titular

Al inicio, encabezando la escena vemos el texto “Coloca cada nombre en el centro de su provincia”

B03 F10
Figura 10

Utilizamos un gráfico tipo texto para escribirlo y la opción Texto simple para dar formato: SansSerif, Negrita y tamaño 20. El color es turquesa (rojo=00, verde=ff, azul=ff) y lleva borde de color negro.

La posición en escena de un gráfico tipo texto se expresa en píxeles, como ya hemos advertido en las ediciones anteriores. Aquí este texto va situado en [114,10] es decir a 114 píxeles hacia la derecha y 10 píxeles hacia abajo del vértice superior izquierdo de la escena que se toma como origen [0,0].

Para determinar esta posición se visualiza, solo con esta finalidad, la red, ejes coordenados y números del espacio y se tiene en cuenta que la unidad coordenada es de 48 píxeles (escala por defecto).

Podemos hacer un cálculo muy simple para determinar la posición del texto:

114 píxeles=48 píxeles*2.38 (unidades coordenadas hacia la derecha)
10 píxeles=48 píxeles*0.21 (unidades coordenadas hacia abajo)

B03 F11
Figura 11

El texto tiene que verse únicamente cuando los nombres de las provincias no están aún bien situadas en su región en el mapa, así pues, debemos de poner la condición

dibujar-si: avb*bub*leb*pab*sab*seb*sob*vab*zab=0

es decir, mientras algún nombre de provincia no esté bien situado.

Situar los nombres de las provincias .

Insertamos tantos puntos como nombres de provincias haya que distribuir en el mapa. Observemos que un punto puede llevar asociado un texto que se visualiza próximo a modo de etiqueta. Cada texto será el nombre de una provincia y va a estar apoyado en un control gráfico (g1.x, g1.y), (g2.x, g2.y),… (g9.x, gy.9). De esta manera conseguimos que el nombre asociado al punto se desplace al arrastrar el control gráfico.

B03 F12
Figura 12

Modificamos algo la colocación del punto gráfico para que el centro de cada control gráfico coincida con el centro de cada nombre:

(g1.x-0.44, g1.y-0.1), (g2.x-0.65, g2.y-0.1), (g3.x-0.48, g3.y-0.1), (g4.x-0.8, g4.y-0.1), (g5.x-1, g5.y-0.1), (g6.x-0.75, g6.y-0.1), (g7.x-0.5, g7.y-0.1), (g8.x-0.92, g8.y-0.1), (g9.x-0.7, g9.y-0.1)

Al arrastrar el control gráfico que, aunque oculto, queda situado en el centro del nombre de la provincia, arrastramos también el nombre de la provincia cuyas coordenadas están vinculadas a las de aquel.

El formato del texto se consigue con la opción Texto simple, pulsando el botón texto que precede a la ventana donde se escribe el nombre de la provincia: Tipo de letra SansSerif y tamaño 20.


Situar el texto "muy bien"


B03 F13
Figura 13


Se verá solamente cuando todos los nombres estén correctamente colocados, para ello se pone la condición

dibujar-si: avb*bub*leb*pab*sab*seb*sob*vab*zab=1

es decir, si todos los auxiliares de provincias tiene el valor 1 y por lo tanto los controles gráficos correspondientes están bien situados dentro del margen establecido.

B03 F14
Figura 14

El formato del texto es SansSerif, Negrita y tamaño 40 y se obtiene con la opción Texto simple. El color es turquesa, como el texto de encabezado y se bordea, también, con color negro.

Propuesta final

Animamos a la realización de escenas que sigan el mismo principio técnico de elaboración que hemos presentado en este artículo, por ejemplo:

  • Posicionar adecuadamente los nombres de los elementos de un polígono regular (radio, apotema, lado, diagonal).

El docente sabrá encontrar enseguida otras aplicaciones relacionadas con la actividad que esté desarrollando con sus alumnos. Se debe entender que el fondo de la escena puede ser una imagen de naturaleza cualquiera, no necesariamente la de un mapa geográfico y los nombres tendrían que ver con el contexto donde deban de ir situados. 

 icono zip escena_B03.zip

Autoría:

Eduardo Barbero Corral (Idea del proyecto y técnicas de programación DescartesJS)

Ángel Cabezudo Bueno (Interpretación, edición de la escena, ilustraciones  y redacción)

Este material está publicado bajo una licencia:
Licencia Creative Commons
Creative Commons Reconocimiento-NoComercial-SinObraDerivada 4.0 Internacional

Página 2 de 10
SiteLock

Módulo de Búsqueda

Frase Clave

Título del artículo

Categoría

Etiqueta

Publicador

Ayuda

Acceso

Lo más leído de lo publicado hace un mes

Canal Youtube

Calculadora Descartes

Versión 3.1 con estadística bidimensional

ComparteCódigo para embeber

Utilizamos cookies para mejorar nuestro sitio web y su experiencia al usarlo. Las cookies utilizadas para el funcionamiento esencial de este sitio ya se han establecido. Para saber más sobre las cookies que utilizamos y cómo eliminarlas , consulte nuestra Política de Privacidad.

  Acepto las Cookies de este sitio.
EU Cookie Directive Module Information