• Curva 2-D

    El panel de configuración específico del tipo curva tiene este aspecto:

    graficos_curva

    La siguiente tabla explica los campos específicos.

    Campo Descripción
    expresión

    Es un campo de texto cuya expresión debe tener la forma (f(t), g(t)), donde f y g son funciones cualesquiera del parámetro t.

    parámetro Debe ser una sola palabra, de preferencia corta. Por defecto es t. El programa dibujará el polígono con vértices: (f(t),g(t)) para t entre el primero y el último de los valores del intervalo, con incrementos iguales a la longitud del intervalo entre el número de pasos. No confundir este parámetro con el correspondiente a las familias.
    intervalo Debe contener dos expresiones ti y tf reales entre corchetes y separadas por una coma, es decir, [ti,tf]. El intervalo por defecto es [0,1]. El parámetro recorre el intervalo definido entre ti y tf en el número de pasos especificado.
    pasos El parámetro recorre el intervalo definido entre el primero y el segundo valor en el número de pasos especificado y dibuja la curva como un polígono con vértices (f(t),g(t)) con
    t = ti,
    t = ti+(tf-ti)/pasos,
    t = ti+2*(tf-ti)/pasos,

    etc… hasta llegar a
    t = ti+pasos*(tf-ti)/pasos = tf.
    En otras palabras, pasos es el número de subintervalos iguales en que se divide el intervalo. y el parámetro pasa por los extremos de los subintervalos.
    ancho

    Es el ancho o grueso del trazo en píxeles. El valor por defecto es 1.
    Se recomienda utilizar poco los anchos diferentes de 1 pues ralentizan el dibujo.

    relleno Si el selector relleno está activado, el programa rellena el interior de la curva (considerada como un polígono). Si la curva no tiene un interior bien definido, el resultado puede ser algo extraño.
  • Ecuación 2-D

    Los lugares geométricos determinados por las ecuaciones en x e y dan lugar a gráficos. Estos son los gráficos del tipo ecuación.

    El panel de configuración específico del tipo ecuación tiene este aspecto:

    panel_graficos

    La siguiente tabla explica los campos específicos.

    Campo Descripción
    expresión Es un campo de texto. Su contenido debe ser una ecuación en las variables x e y. Las posibilidades serían :
    y=f(x) Se calcula la abscisa x de cada pixel, se calcula y=f(x) y se dibujan líneas entre un punto y el siguente. La gráfica no se dibuja en los valores x que no están en el dominio de f. Cuando hay una singularidad entre dos pixeles consecutivos, el programa busca los valores límite por la izquierda y la derecha y los usa para dibujar, pero no une la gráfica entre ellos.
    x=f(y) Se calcula la ordenada y de cada pixel, se calcula x=f(y) y se dibujan líneas entre un punto y el siguente. La gráfica no se dibuja en los valores y que no están en el dominio de.Cuando hay una singularidad entre dos pixeles consecutivos, el programa busca los valores límite por la arriba y abajo y los usa para dibujar, pero no une la gráfica entre ellos.
    f(x,y)=g(x,y) El programa define F(x,y) = f(x,y) – g(x,y) y busca las soluciones de F(x,y)=0 usando un método de Newton en dos dimensiones. Cuando encuentra un cero de F, sigue la trayectoria de ceros en las direcciones perpendiculares al gradiente.La búsqueda de ceros se inicia en una red de 8 x 8 puntos distanciados unos de otros por lo menos 3 pixeles. Si una ecuación tiene curvas cerradas como soluciones y éstas son pequeñas o tiene muchas soluciones a poca distancia unas de otras, es posible que el programa no las encuentre todas.
    ancho

    Es el ancho o grueso del trazo en píxeles. El valor por defecto es 1. Se recomienda utilizar poco los anchos diferentes de 1 pues ralentizan el dibujo.

    relleno+

    Si la ecuación es de la forma y=f(x) y el selector relleno+ está activado, el espacio entre el eje x y la gráfica, arriba del eje x, se colorea del color seleccionado.

    Si la ecuación es de la forma x=g(y) y el selector relleno+ está activado, el espacio entre el eje y y la gráfica, a la derecha del eje y, se colorea del color seleccionado.

    relleno-

    Si la ecuación es de la forma y=f(x) y el selector relleno- está activado, el espacio entre el eje x y la gráfica, abajo del eje x, se colorea del color seleccionado.

    Si la ecuación es de la forma x=g(y) y el selector relleno- está activado, el espacio entre el eje y y la gráfica, a la izquierda del eje y, se colorea del color seleccionado.

    visible Si este selector está seleccionado, en la parte inferior de la escena aparecerá un campo de texto donde se ve la expresión de la ecuación en el mismo color de la gráfica y con el color de fondo de la escena. Por defecto este selector aparece activado. Si hay varias ecuaciones o curvas en una escena, abajo de ella aparecen los campos de texto de todas y cada una de las que son visibles. Si son muchas los campos pueden resultar demasiado pequeños, por lo que se recomienda no dejar visibles los campos de texto de más de tres o cuatro ecuaciones o curvas.
    editable Este campo sólo se puede utilizar si visible está selecionado. Cuando editable se activa, el contenido del campo de texto que aparece bajo la escena con la ecuación (o curva) puede ser modificado por el usuario. Esta opción puede ser útil cuando se desea que el alumno practique la escritura de fórmulas.

    Nota: Hay un pequeño conjunto de formas canónicas de ecuaciones de la recta y de las curvas, que reciben un tratamiento especial. Su utilidad radica en que los dibujos se realizan muy rápidamente. Estas son las formas canónicas que Descartes reconoce:

    y=m*x+b

    x=m*y+a

    A*x+B*y=C

    e=sqrt((x-Fx)^2+(y-Fy)^2/(d+(x-Fx)*cos(t)+(y-Fy)*sen(t))

    e=sqrt((x-Fx)^2+(y-Fy)^2)/(d-((x-Fx)*(Dx-Fx)+(y-Fy)*(Dy-Fy))/d)

    Si se escriben exactamente tal como aparecen (sin cambiar una sola letra), el programa las reconoce y hace el dibujo de la recta o curva cónica con un procedimiento muy rápido. La única utilidad de estas formas radica en la rapidez con que se dibujan, cosa que puede aprovecharse en alguna escena específica sobre rectas y cónicas para mejorar la interactividad (ver por ejemplo Excentricidad y Directriz).

     

  • Evento

    Los eventos son condiciones booleanas que, cuando se cumplen, pueden realizar una acción. En consecuencia, tienen asociado un identificador, una condición (expresión booleana) y la la acción a realizar. En la siguiente imagen se muestra el panel de configuración de eventos:

    evento

    Los elementos que aparecen son los siguientes.

    • id. Es el identificador del evento.
    • condición. Condición que, cuando se cumple, genera la acción. Una vez realizada la acción, ésta sólo vuelve a realizarse cuando la condición deja de cumplirse y luego vuelve a cumplirse.
    • acción. Acción que se realizará si se pulsa el botón en un control numérico con interfaz botón. Existen las siguientes acciones:
      • mensaje. Abre una pequeña ventana con un mensaje de texto cuyo contenido es el del parámetro..
        La posición de esta ventana puede determinarse con el valor de pos_mensajes que puede tomar los siguientes valores: centro, arr_izq, arriba, arr_der, izquierda, derecha, ab_izq, abajo y ab_der.
        El valor por defecto de pos_mensajes es centro.
      • calcular. Realiza los cálculos (asignaciones) indicadas en el parámetro y actualiza inmediatamente todos los controles con estos nuevos valores.
      • abrir URL. Abre una página Web en una ventana nueva del navegador
      • abrir Escena. Abre una escena de Descartes en una ventana autónoma
      • créditos. Abre la ventana de créditos
      • config. Abre la ventana de configuración
      • inicio. Reinicia la escena
      • limpiar. Borra todos los rastros dejados por los gráficos.
      • animar. Comienza la animación, la detiene (pausa) o la continúa.
      • iniciar animación. Inicializa la animación, es decir, la devuelve a su punto inicial.
      • reproducir. Inicia la reproducción del archivo de audio indicado en el parámetro.
    • parámetro. El parámetro de la acción.
      • Si la acción es «mensaje» entonces el parámetro es el contenido del mensaje.
      • Si la acción es «calcular», entonces parámetro debe contener cero o varias asignaciones (separadas por ; o salto de línea) que el programa realizará cuando se ejecute la acción.
      • Si la acción es «abrir URL», el parámetro puede ser cualquier URL.
      • Si la acción es «abrir Escena» el parámetro debe ser una dirección relativa y lo que hace es abrir la primera escena de Descartes que encuentra en esa dirección.
      • Si la acción es «reproducir» entonces el parámetro debe llevar la acción relativa de un fichero de audio con extensión mp3 .
    • ejecución Determina el modo de ejecución de la acción del evento. Hay tres formas de ejecución
      • una-sola-vez. La acción sólo se ejecuta la primera vez que se cumple la condición.
      • alternar. En este caso la acción se ejecuta una vez cuando la condición se cumple y no se vuelve a ejecutar hasta que la condición ha dejado de ser verdadera y vuelve a ser verdadera otra vez.
      • siempre. Significa que la acción se ejecutará cada vez que la condición se cumpla.

      El valor por defecto es alternar.

    • pos_mensajes. Determina la posición donde aparecerá el mensaje si la acción seleccionada es, precisamente, «mensaje». Las opciones son: centro, arr_izq, arriba, arr_der, izquierda, derecha, ab_izq, abajo y ab_der. El valor por defecto es «centro».

    Como un evento puede desencadenar una acción y una acción puede realizar cálculos, es fácil lograr que un evento realice cálculos. En la siguiente escena se define un evento con la condición p>2, con acción calcular y con parámetro p=0.1, de manera que cada vez que el usuario aumenta el valor de p más allá de 2, el programa lo devuelve a su valor mínimo 0.1. Si se mantiene pulsada la flecha azul del control p, se verá que la parábola va abriéndose hasta que alcanza el valor p=2 y, en ese momento, salta el valor de p a 0.1 

     

    (Puede descargar la escena anterior desde este enlace)

    En el siguiente ejemplo, si el lector pone los valores de los pulsadores en a=500, b=50 y c=15.8, se produce un evento que abre una escena Descartes, confirmando que esos son los valores que dan la solución. ¡Pruébelo! y luego, en el editor de configuraciones mire cómo se definió el evento. En particular verá que la ejecución está en modo alternar, por lo cual si se elije un valor erróneo y luego vuelve a elegirse el correcto, la escena de confirmación vuelve a aparecer.

     

    (Puede descargar la escena anterior desde este enlace)

    La siguiente escena ejemplifica cómo pueden aprovecharse los eventos en la enseñanza. 

      

    (Puede descargar la escena anterior desde este enlace)

  • CALCULOS

    CALCULOS  es un algoritmo incluido en todas las escenas a partir de la versión 5 de Descartes. Éste permite programar procesos de cálculo más o menos complejos que se ejecutarán cada vez que haya un cambio de un control en la escena, ya sea numérico o gráfico.

    En la siguiente figura se muestra el panel de configuración asociado a CALCULOS.

    calculos

    El panel tiene un campo de texto etiquetado como inicio, un área de texto etiquetada como hacer y otro campo de texto etiquetado como mientras.

    • inicio. En este campo se puede escribir asignaciones y llamadas a algoritmos separadas por ; Todo lo que haya en este campo se ejecuta al inicio del cálculo.
    • hacer. En este campo se pueden escribir  asignaciones y llamadas a algoritmos separadas por saltos de línea. Lo que hay en «hacer» se ejecuta repetidamente siempre que la condición «mientras» sea válida.
    • mientras. En el campo «mientras» se debe escribir una expresión booleana. Lo que hay en «hacer» se ejecuta repetidamente mientras la condición «mientras» sea válida.

    El ejecución del algoritmo se lleva a cabo de la siguiente manera:

    • Paso 1. Se realiza las asignaciones y llamadas a otros algoritmos que se indican en inicio;
    • Paso 2. Se realiza las asignaciones y llamadas a otros algoritmos indicadas en hacer
    • Paso 3. Se comprueba si se cumple la condición contenida en mientras.
      • Si la condición mientras se cumple entonces se vuelve al paso 2, esto es se volverá a ejecutar hacer y a verificar la condición mientras.
      • Este proceso continúa hasta que la condición mientras deja de cumplirse o se ha llegado a 10000 repeticiones (este límite es una válvula de seguridad para proteger al autor y al usuario de errores que pudiesen bloquear el navegador).
      • Si la condición mientras se deja en blanco el algoritmo realiza las asignaciones en hacer una sola vez.

    La estructura de los algoritmos de Descartes es en realidad un bucle de programación, que corresponde al do…while de los lenguajes C y Java y al repeat…while de Pascal .

    Para realizar una asignación condicional se puede utilizar la construcción:  A?a:b donde A es una expresión booleana y a y b son los dos valores que se asignarán según se cumpla o no la condición A. Por ejemplo

    y=(x>0)?sen(2*pi*x):0

    asigna a y el valor sen(2+pi*x) si x>0 y asigna 0 si x<=0. Esta construcción corresponde (parcialmente) al if…else...  de los lenguajes de programación.

    La combinación de bucles  iniciohacermientras , las asignaciones condicionales A?a:b y la posibilidad de llamar algoritmos desde CALCULOS ofrece muchas posibilidades para la programación de procesos de cálculo relativamente complejos.

    En la siguiente escena se ha programado en CALCULOS el algoritmo de Euclides para obtener el máximo común divisor y se representa gráficamente la justificación de este algoritmo.

    (Puede descargar esta escena desde este enlace)

  • Matriz

    Una matriz es un arreglo bidimensional de constantes. Si M es una matriz entonces M[i,j] es el elemento que está en la columna i+1 y en la fila j+1. Observe que la convención adoptada en Descartes no es la usual en la literatura matemática, es decir, el primer subíndice referencia al número de columna y el segundo al número de fila, lo que equivale a que Descartes trabaja internamente con la matriz traspuesta. También los subíndices se numeran desde 0, por tanto el número de fila y columna es uno más del que indica el subíndice respectivo.

    El panel de configuración de una matriz se muestra en la siguiente figura.

    Matriz con 2 filas y 3 columnas

    Matriz con 2 filas y 3 columnas

    El caso ahí reflejado se corresponde con una matriz de 3 columnas y 2 filas

    matriz con la que se desea trabajar

    matriz con la que se desea trabajar

    cuya identificación interna es mat. Y según el criterio indicado el elemento mat[1,0]=2 es el que está ubicado en columna 2 (1+1=2) y en la fila 1 (0+1=1) , es decir, internamente Descartes guarda la matriz traspuesta de la anterior:

    Matriz guardada por Descartes

    Matriz guardada por Descartes según la notación usual

    Los campos específicos para configurar una matriz son los siguientes:

    • Identificador de la matriz a través del cual se puede referenciar.
    • evaluar que puede tomar los valores «una-sola-vez» o «siempre» y hace que el vector tome los valores indicados en el campo de texto de inicialización sólo cuando se inicie la escena o cada vez que haya una interacción con la misma. Este parámetro ha quedado restringido a «una sola vez» en la versión 5, la actualización «una vez» cuando los valores se realizan mediante variables o cuando se desea «siempre» se realiza repectivamente usando los algoritmos Inicio y Cálculos.
    • columnas. Es el número de columnas de la matriz.
    • filas. Es el número de filas de la matriz
    • Área de texto. Es un campo de texto donde pueden escribirse asignaciones a los valores de la matriz, separadas por saltos de línea o por ;
      Por ejemplo, en la imagen anterior el identificador de la matriz es mat y tiene 3 columnas y 2 filas y sus elementos se definen como:
      mat[0,0]=1
      mat[1,0]=2
      mat[2,0]=3
      mat[0,1]=0
      mat[1,1]=-1
      mat[2,1]=1
    • archivo. Este parámetro no está operativo para matrices. Para una carga dinámica de una matriz a partir de un fichero es necesario utilizar funciones según se describe en el artículo ficheros y matrices.

    El área de texto que aparece en el panel de configuración de una matriz sirve para asignar valores a (o inicializar ) los elementos de la matriz.  El contenido del área de texto que se ofrece por defecto contempla una asignación a todos elementos del valor 0, no obstante los elementos no inicializados de un vector tienen por defecto ese valor.

    Para inicializar una matriz no es necesario utilizar el área de texto, también se puede utilizar un algoritmo descrito en una función algorítmica o bien mediante un fichero. Estas dos últimas formas son las más aconsejables cuando la matriz tiene muchos elementos. En la siguiente escena se muestra un ejemplo de estas posibilidades.

    Si se desea ver cómo está realizado el objeto anterior puede descargarse desde aquí .

    En la escena anterior la opción de menú etiquetada como “Generar” permite asignar a cada elemento de una matriz denominada matr1 un valor aleatorio mediante una función que está reflejada en la siguiente imagen. En ella un ciclo que se ejecuta desde 0 hasta el número de columnas de dicha matriz (3 en este caso) asigna a cada uno de los elementos de cada fila (matr1[term,0] y matr1[term,1]) un número aleatorio en el intervalo [0, 20)

    Código para inicializar una matriz con valores aleatorios

    Código para inicializar una matriz con valores aleatorios mediante una función algorítmica

    En el artículo ficheros y matrices puede aprenderse cómo asignar valores a una matriz mediante el uso de ficheros y en él se describe cómo en la escena anterior se realiza esa asignación.