• Operadores

    Los operadores y otros símbolos que el analizador de expresiones reconoce son:

    ( paréntesis izquierdo
    ) paréntesis derecho
    == igualdad, operador binario que da un resultado booleano.
    != desigualdad, operador binario que da un resultado booleano.
    # desigualdad, operador binario que da un resultado booleano.
    | operador binario de disyunción equivalente a OR ( O )
    & operador binario de conjunción equivalente a AND ( y )
    > mayor queoperador binario que da un resultado booleano
    < menor queoperador binario que da un resultado booleano
    >= mayor o igual queoperador binario que da un resultado booleano
    <= menor o igual queoperador binario que da un resultado booleano
    + signo mas, operador binario de suma
    signo menos: binario de resta o unario de cambio de signo 
    * por, operador binario de multiplicación
    /  entre, operador binario de división
    ^ operador binario de exponenciación (a^b=ab )
    % módulo, operador binaro, residuo de una división 
    operador unario booleano de negación, también puede usarse !
    ! operador unario booleano de negación, también puede usarse ~
    ? pregunta, sólo para asignaciones condicionales (P)?a:b
    : separador, sólo para asignaciones condicionales (P)?a:b
  • Palabras reservadas

    Hay varios identificadores reservados que tienen un significado especial para los espacios de una escena.

    Para espacios 2-D los identificadores reservados son: escalaO.x, O.y

    Para espacios 3-D los identificadores reservados son: escalaobservadorrot.y y rot.z. La tabla que sigue explica su significado y el de otras palabras reservadas.

    Cuando hay más de un espacio estas variables deben ir precedidas por el identificador del espacio y un punto, es decir sus nombres son: <id>.escala<id>.O.x,   <id>.O.y,   <id>.observador,   <id>.rot.y,   <id>.rot.z,  donde  <id> es el identificador del espacio.

    Palabras reservadas

    Para espacios en general

    escala

    Es el tamaño de la escala de la escena y se expresa en pixeles.
    Su valor por defecto en escenas 2-D es 48.

    O.x

    Es la distancia horizontal del centro de la escena al origen en pixels.
    Los valores positivos desplazan el origen hacia la derecha.
    El valor por defecto es 0.

    O.y

    Es la distancia vertical del centro de la escena al origen en pixels.
    Los valores positivos desplazan el origen hacia abajo.
    El valor por defecto es 0.
    _x
    La abcisa del vértice superior izquierdo del espacio (en pixeles)
    _y
    La ordenada del vértice superior izquierdo del espacio (en pixeles)
    _w
    El ancho del espacio (en pixeles)
    _h
    La altura del espacio (en pixeles)
    ratón_apretado (mouse_pressed)
    Vale 1 si el botón izquierdo del ratón está apretado y cero en cualquier otro caso.
    ratón_x (mouse_x)
    Abcisa del punto en donde está el cursor del ratón, en las coordenadas propias del espacio. Sólo se registra el valor cuando el ratón está apretado o si el espacio tiene activada la casilla de _sensible_a_los_movimientos_del_ratón.
    ratón_y (mouse_y)
    Ordenada al origen del punto en donde está el cursor del ratón, en las coordenadas propias del espacio. Sólo se registra el valor cuando el ratón está apretado o si el espacio tiene activada la casilla de _sensible_a_los_movimientos_del_ratón.
    clic_izquierdo (mouse_clicked)
    Vale 1 sólo cuando se ha hecho un clic izquierdo sobre el espacio. Vale cero en cualquier otro caso.
    _selected_control_()
    Da el número del control gráfico que está seleccionado. La numeración corresponde al orden en que los controles gráficos aparecen en la lista de controles.

    Para cadenas

     _AnchoDeCadena_(str, font, style, size)  Da el ancho en número de píxeles de la cadena str, font especifica el tipo de letra que se usa (‘Monospaced’, ‘Serif’ o ‘SansSerif’), style indica si la letra esta en negritas o italica (‘PLAIN’, ‘ITALIC’, ‘BOLD’, ‘ITALIC+BOLD’ y ‘BOLD+ITALIC’) y size es el tamaño de la letra en pixeles
     &sup2  Al incluirla en una cadena, devuelve la expresión adjunta como el cuadrado; por ejemplo, la cadena ‘x&sup2’, es mostrada en el navegador como x2.
     &sup3  Al incluirla en una cadena, devuelve la expresión adjunta como el cuadrado; por ejemplo, la cadena ‘x&sup3’, es mostrada en el navegador como x3.

    Para controles de audio y vídeo

    ID.play()

    Inicia el vídeo o el audio, donde ID es el identificador del control.

    ID.pause()

    Hace una pausa en el vídeo o el audio, donde ID es el identificador del control.

    ID.stop()

    Detiene el vídeo o el audio, donde ID es el identificador del control.

    Para espacios 3D

    observador

    Distancia (en pixeles) aparente del origen al observador.

    rot.y

    Ángulo de giro (en grados) del espacio respecto al eje y a partir de la posición por defecto en la que el eje x apunta hacia el observador (ligeramente hacia abajo), el eje y hacia la derecha y el eje z hacia arriba.

    rot.z

    Ángulo de giro (en grados) del espacio respecto al eje z a partir de la posición por defecto en la que el eje x apunta hacia el observador (ligeramente hacia abajo), el eje y hacia la derecha y el eje z hacia arriba

    Para espacios algebráicos

    _reiniciar_
    Es una variable para que el programador de la escena, cuando lo encuentre conveniente, ordene una reinicialización del espacio algebraico, eliminando todas las manipulaciones que hubiera hecho el usuario hasta entonces. Para ello basta asignar a esta variable el valor 1. Una vez hecha la reinicialización la variable recupera automáticamente el valor de 0 que tiene de inicio.
    _ecuación_
    Es una variable que contiene la cadena que define la ecuación que se propone para ser manipulada en la primera línea del espacio algebraico. Si se asiga una nueva cadena (entre comillas sencillas) con otra expresión o ecuación, el programa automáticamente reinicializa el espacio algebraico proponiendo la nueva ecuación.

    Para controles númericos

    _TexT_

    (En desuso) Si se asigna la cadena ‘_TexT_’ como valor inicial a un control de texto, éste interpreta todo lo que se escriba en él como texto y no como un número o una expresión a evaluar, que es el comportamiento por omisión. Ya no es necesario usar esto pues ahora hay un atributo de los campos de textos específico para tal propósito: solo texto.
    _._ o _nada_ o _void_
    Cualquiera de estas cadena, por ejemplo ‘_nada_’, asignada como nombre a un pulsador, hace que la etiqueta del pulsador desaparezca. Esto sólo es necesario es pulsadores, en los otros controles numéricos basta dejar el atributo del nombre vacío. Si se deja vacío el nombre en un pulsador, la etiqueta toma el nombre del id.
    _no_
    VACIO.GIF
    Si se da este nombre a una imagen de un botón, el botón se vuelve totalmente transparente, aunque no haya tal imagen.

    Para controles gráficos

    .activo (.active)
    Sufijo que agregado al nombre de un control gráfico produce una variable que vale 1 si el control gráfico en cuestión está seleccionado y cero si no está seleccionado.
    Para el Registro de Actividades de Descartes (RAD)
    _ACIERTOS_
    Es el número de aciertos en una actividad y es una variable que se registra en el RAD después de cada actividad. Si el creador de la escena no le asigna ningún valor, queda con valor 0.
    _ERRORES_
    Es el número de errores en una actividad y es una variable que se registra en el RAD después de cada actividad. Si el creador de la escena no le asigna ningún valor, queda con valor 0.
    _NOTA_
    Se registra en el RAD. Se calcula como

    100*_ACIERTOS_/_TOTAL_.

    Si el autor de la escena le asigna otro valor, en el RAD se registrará ése valor asignado por el autor.

    _TOTAL_
    es una variable a la que se le asigna la suma de _ACIERTOS_ y _ERRORES_
    Aunque _TOTAL_ está reservada, su valor no se registra en el RAD.
    _EQUIPO_
    Adquiere un valor de cadena con el nombre del ordenador que se está usando. A continuación se presentan algunos ejemplos de los valores que adquiere la variable _EQUIPO_ en diferentes circunstancias.
    _CONECTADO_AL_RAD_
    Adquiere el valor 1 cuando la escena está conectada al RAD y está registrando los detalles de la actividad.
    _ALUMNO1_
    _ALUMNO1_, _ALUMNO_2, etc… son los nombres de los alumnos registrados como equipo de trabajo que se supone están realizando la actividad. Son los alumnos a quienes se les va a registrar como protagonistas de la actividad.

    Otros

    e
    2.7182818284590452653602874…
    pi (o la letra griega Pi)
    3.14159…
    _Eval_( c )
    Si el argumento c es una constante cuyo valor es una cadena que representa una expresión matemática, esta función devuelve la evaluación de esa expresión. Por ejemplo, si c=’sen(pi/6)’ entonces _Eval_(c)=0,5 .

    En el argumento de esta función se contempla que puedan aparecer números bien con coma o bien con punto decimal.

    _Num_( var )
    Si el argumento c es una constante cuyo valor es una cadena que representa una expresión decimal, esta función devuelve el número correspondiente a dicha expresión decimal. En cualquier otro caso devuelve NaN (No es un número). Por ejemplo, si c=’3.14159′ entonces _Num_(c)=3,14159 . Sirve para saber si el usuario escribió un resultado numérico directamente sobre un campo de sólo texto, para evitar que use el campo de texto como calculadora.

    En el argumento de esta función se contempla que puedan aparecer números bien con coma o bien con punto decimal.

    .long
    Sufijo que agregado al nombre de un vector devuelve el número de elementos del vector.
    .filas
    Sufijo que agregado al nombre de una matriz, devuelve el número de filas de la matriz.
    .columnas
    Sufijo que agregado al nombre de una matriz, devuelve el número de columnas de la matriz.

    Las literales x,y,n,u y v tienen un significado especial dentro de las expresiones que definen algunos objetos gráficos.

    x e y juegan el papel de la abscisa y la ordenada de puntos en el plano en el objeto gráfico «ecuación»
    También estas mismas literales juegan el mismo papel en las expresiones que determinan las constricciones de los controles gráficos.

    n juega el papel de la variable de una sucesión en el objeto gráfico «sucesión» y toma sólo valores enteros.

    u y v juegan el papel de parámetros en la definición de las ecuaciones paramétricas de las superficies en 3D donde toman valores reales entre 0 y 1. Las literales x, y y z en este caso también tienen el significado especial de ser las coordenadas de los puntos de la superficie.
    x, y y z se expresan paramétricamente en términos de u y v para representar todos los puntos de una superficie.

    t y s no son literales reservados.

    El literal t suele usarse para definir las ecuaciones paramétricas de una curva en el plano o de una curva en el espacio. Sin embargo, a diferencia de u y v para las ecuaciones paramétricas de una superficie, este literal puede cambiarse por cualquier otra letra o palabra y su rango de definición puede ser cualquiera y no necesariamente el intervalo [0,1].

    Análogamente el literal s que se usa para definir las familias de gráficos en 2 D no es obligatorio, el autor de una escena puede cambiarla a su antojo y por tanto no es una variable reservada.

     

  • Ficheros y vectores

    En el apartado de definiciones, se documenta el tema de vectores, cuyos elementos tienen unos valores que se pueden asignar de varias maneras. Una primera es asignando los valores en la misma definición del vector; otra es asignando los valores a través de un algoritmo, especialmente en el caso de vectores de gran tamaño, mediante el que se pueden generar matemáticamente y una última opción es a través de un fichero o archivo de texto.

    Carga estática con el parámetro archivo en la definición de un vector

    En la siguiente escena interactiva hemos usado tres ficheros: el fichero paises.txt, que almacena los nombres de los países; el fichero abscisas.txt que almacena las abscisas, en la escena, de las ciudades capital; y el fichero ordenadas.txt que almacena las ordenadas donde se encuentran las ciudades capital. Cada uno de estos ficheros asignan los valores a los vectors P, X y Y. En la siguiente imagen se puede observar que en la definición del vector P se indica, en el parámetro archivo, que se usará el fichero Ficheros/paises.txt . La carga de cada vector se efectúa una única vez y no varían los valores de sus elementos de ahí que remarquemos que es una carga estática.

    Parámetro archivo en la definición de un vector

    Parámetro archivo en la definición de un vector

    El contenido de ese archivo paises.txt es éste:

    Contenido del fichero paises.txt

    Contenido del fichero paises.txt

    Para un mayor detalle, observa y escucha la presentación que hay a continuación de la escena.

    En la siguiente presentación, activa tus parlantes o altavoces. Luego, haz clic sobre la primera diapositiva y usa las flechas de dirección para observar y escuchar el resto de diapositivas. Puedes descargar la escena y la presentación desde este enlace.

    Como se indica en la presentación, para que los ficheros puedan ser leídos en la definición por el intérprete DescartesJS, cuando la escena se ejecuta en local, es necesario incorporarlos con un script en la página donde está embebida la escena. Por cada fichero se incluirá un script de tipo «descartes/vectorFile«. En la imagen siguiente puede verse cómo se incorporan en el código dos ficheros de nombres paises.txt y abscisas.txt. En este caso en el nombre se especifica como prefijo la carpeta Ficheros ya que en la escena ése es el direccionamiento que tienen dichos ficheros. Esta situación es análoga a la ejecución en local de macros.

    script para ficheros en ejecución local type descartes/vectorFile

    Scripts a embeber para que el intérprete lea los ficheros en la definición cuando se efectúa la ejecución en local type descartes/vectorFile

     Nota: La limitación de lectura de ficheros en local es consecuencia de la forma en la que se lee el contenido de ficheros externos en DescartesJS, ésta es mediante XMLHttpRequest y este método no garantiza la carga de archivos de forma local. Si se desea hacerlo funcionar en casos particulares es posible el uso de banderas en los navegadores (por ejemplo, en chrome activando allow-file-access-from-files o análogo en firefox), pero ha de ser consciente que lleva asociado una relajación en la seguridad de su sistema informático personal.

    Carga dinámica de un vector con la función _GetValues_

    Una posibilidad para efectuar la carga de un vector de manera dinámica, es decir, accediendo a diferentes ficheros según se desee es utilizando la función _GetValues_ cuya sintaxis es

    _GetValues_(fichero,vector)

    fichero será una cadena de caracteres entre comillas simples, por ejemplo ‘datos/datos1.txt’, o una variable que contenga una cadena y que referencie el path localizador del archivo.

    vector será una cadena de caracteres entre comillas simples, por ejemplo ‘V’, o una variable que contenga una cadena. Esa cadena es la etiqueta que aparece en el fichero de datos a cargar y ha de coincidir con ella o bien, si se especifica la cadena nula o una variable con ese valor ignorará dicha etiqueta.

    En la escena siguiente (puede descargarla desde aquí) se cargan los datos de un vector denominado vect1 a partir de los datos almacenados en tres ficheros ‘datos1a.txt’, ‘datos2a.txt’ y ‘datos3a.txt’.

    En la opción «Leer vector variables 1» el archivo usado es filename1=’datos1a.txt’ cuyo contenido es

    datos1a.txt

    datos1a.txt

    y donde podemos observar la etiqueta <r2>

    Análogamente tenemos los archivos filename2=’datos2a.txt’ y filename3=’datos3a.txt’

    datos2a.txt y datos3a.txt

    datos2a.txt y datos3a.txt

     El código que permite la lectura de esos archivos es el siguiente

    Código para la lectura de ficheros

    Código para la lectura de ficheros

    En él podemos observar como al seleccionar la primera opción del menú (menu=1) se accede a _GetValues_(filename1,’r2′) donde filename1=’datos1a.txt’ y en el contenido de ese archivo se usa la etiqueta <r2>.

    Para la siguiente opción la llamada es _GetValues_(filename2, vectorv) donde filename2=’datos2a.txt’ y vectorv=’DATOSVECT’ que es la etiqueta usada en dicho fichero.

    Y en la tercera opción se usa _GetValues_(filename3, ») donde filename3=’datos3a.txt’ y en vector se indica la cadena nula, es decir, que se ignore la etiqueta <NoUsado> especificada en datos3a.txt.

    En cada uno de esos archivos se efectúa una asignación a las variables que se han denominado aux1, aux2, aux3 y aux4 que son las que en el código de la escena se asignan a los elementos del vector vect1, es decir, que se usan como variables de paso.

    Para el funcionamiento en local es necesario incorporarlos con un script en la página donde está embebida la escena. Por cada fichero se incluirá un script de tipo «descartes/archivo«. En la imagen siguiente puede verse cómo se han incorporado en el código los tres ficheros anteriores:

    type descartes/archivo

    type descartes/archivo

    Carga dinámica de un vector con la función _Load_ y _StrToVector_

    La sintaxis de la función _Load_ es

    variable=_Load_(fichero)

    donde fichero es una cadena de caracteres que proporciona la dirección donde se ubica el fichero a cargar y variable es la que variable a la que se asigna el contenido de ese fichero como una cadena de caracteres.

    Una vez asignado el contenido a dicha variable, la función _StrToVector_ (variable,vector‘) asigna los valores a cada elemento del vector etiquetado como vector.

    Hay que señalar que el contenido del fichero ha de contener una primera línea con la etiqueta <vector> y finalizar con la etiqueta </vector>.

    En la siguiente escena puede comprobar el funcionamiento de estas funciones (puede descargarse aquí).

    El archivo usado en la escena anterior es el siguiente:

    Fichero que contiene los elementos de un vector

    Fichero que contiene los elementos de un vector

    en él podemos observar las etiquetas y el script para inscrustarlo en el código html para que sea accesible en local.

    Carga dinámica de un vector con la función _GetVector_

    La sintaxis de esta función es _GetVector_(fichero,’vector‘) donde fichero es una cadena de caracteres que proporciona la dirección donde se ubica el fichero a cargar y vector es la etiqueta del vector en el que se desean cargar sus elementos. Esa etiqueta ha de ir entre comillas simples y ha de coincidir con la etiqueta que aparece en el contenido del fichero que se está leyendo. Su efecto es equivalente a _Load_ y _StrToVector_ de la sección anterior. También en la escena de esa sección puede observar el funcionamiento de esta función.

    Guardar vectores en un fichero

    Para esta funcionalidad consulte el artículo Guardar ficheros.

  • Imágenes en controles numéricos tipo botón

    Descartes ofrece las opciones color para decorar los botones que vamos a utilizar en una escena; sin embargo, también tenemos la posibilidad de asociar una imagen a este tipo de control. En la siguiente imagen se observa como se puede asociar una imagen a un botón (en la ruta imagenes/btn1.png). Es importante definir el tamaño del botón en la casilla pos que, para el ejemplo, es 129×30.

    boton1
    boton2
    En la siguiente escena, se emplean varias imágenes para un botón como las que se muestran en la imagen de la derecha. Descartes, también, reconoce la imagen asociada al botón con el sufijo _over; es decir, si el tenemos el botón con nombre btn1.png y su asociado btn1_over.png, esta última se visiona cuando pasamos el puntero del ratón sobre el botón. Y análogamente con el sufijo _down al pulsar dicho botón.
    En la escena, haz clic varias veces sobre el botón para que observes algunos de los diseños utilizados que son imágenes de dominio público. Por otra parte, hemos incluido unos marcos adicionales en la opción gráficos del editor, como una muestra más de lo que podemos hacer con las imágenes.
    Practica, entonces, con la siguiente escena, para que observes las diferentes opciones que permiten incorporar imágenes en un espacio: fondo, botones y gráficos 2D
    Escena interactiva

    (Puede descargar la escena anterior desde este enlace)

  • Macros

    Las macros  (de macroinstrucción) son objetos gráficos compuestos y pueden ser de dos o tres dimensiones. Muchas escenas que tienen un solo espacio pueden generar un macro y convertirse así en un objeto gráfico compuesto con posibilidad de usarse en otras escenas. Por ejemplo, los ejes coordenados que aparecen en la escena izquierda, están definidos a partir de objetos gráficos básicos, mientras que los de la escena de la derecha, son un solo objeto gráfico, es decir, una macro.

     escena1.html escena2.html

    Las escenas anteriores y todas las de este artículo puede descargarlas desde este enlace e identificar el archivo correspondiente con el nombre indicado

    Las macros pueden tener parámetros que sirven para modificar su aspecto y su comportamiento. Por ejemplo, los controles numéricos que hay en la escena derecha actúan sobre los parámetros del macro, que, en este caso, son longitud y punta, y representan la longitud de cada eje y el tamaño de la punta de flecha que hay en cada uno.

    Pero las macros además pueden tener un conjunto de funciones y algoritmos propios que les otorgan una funcionalidad predefinida y/o modificable. Por ejemplo la siguiente escena utiliza dos macros (dinamica/resorte y dinamica/masa) para crear de una manera muy sencilla una escena con mucha funcionalidad.

    escena3.html

    El propósito de este artículo es describir qué soncómo se crean y cómo se usan las macros. Y distinguiremos dos entornos:

    1. Editor de configuración e intérprete en Java
    2. Intérprete DescartesJS