Para información general, y referencia del lenguaje de programación GeoScript, vea el Manual de GeoScript. Contenido: Capítulo 1: Un triángulo
sencillo Comencemos con una construcción muy fundamental: un triángulo. Este es el programa que hace esto:
Las partes después de una comilla ' son comentarios. La ' indica que lo que sigue no debe interpretarse como una instrucción del programa. El intérprete de GeoScript trata tales comentarios como si simplemente no estuvieran aquí. Primero inicializamos tres puntos en la pantalla. Esto se hace con la instrucción POINT, que tiene la síntaxis siguiente:
nombre puede ser cualquier nombre que eliges, excepto
una palabra clave de GeoScript. O sea, no puedes llamar
"point" a tu punto, por ejemplo. (Tampoco puedes
llamarlo "line"; pero supongo que de toda manera no
harías eso.) x y y son las coordenadas del
punto en la pantalla. Un nombre y un par de coordenadas es todo lo que necesitamos para inicializar un punto. Nota que las coordenadas de la pantalla están "de cabeza": el valor de y aumenta desde arriba hacia abajo. - Sin embargo, hay tres valores adicionales que son opcionales: - estylo define la forma como un punto se muestra en
la pantalla. Si no especificas estilo, el punto se
mostrará como una cruz delgada. El punto B en nuestro ejemplo se
mostrará como un círculo relleno (estilo 2). Si deseas especificar solamente el grosor, pero dejar el estilo y el color en su estado predefinido, puedes escribir DEFAULT en lugar de estos parámetros, como en la tercera línea del ejemplo arriba: POINT C, 300,85, DEFAULT, DEFAULT, 40 Poner un valor de -1 tiene el mismo significado como DEFAULT. Cuando ejecutas este programa, notarás que los puntos
aparecen en la pantalla uno por uno, con un tiempo de espera de
dos segundos entre punto y punto. Puedes saltar estos tiempos de
espera, presionando cualquier tecla. (Más tarde veremos maneras
de poner construcciones en la pantalla inmediatamente, cuando
hablaremos sobre los procedimientos CONSTRUCTION.) - Ahora unimos los puntos con rectas. Esto lo logramos con la instrucción LINE. Su síntaxis es:
Notarás una diferencia entre la forma de esta
instrucción, y la anterior. En "PUNTO nombre ... "
tenemos primero la palabra clave y después el nombre de la
variable. Aquí tenemos primero el nombre de la variable y
después la palabra clave. (El signo "=" es opcional.)
La primera forma es la forma de una instrucción de
inicialización, donde definimos el tipo de una variable y le
asignamos valores numéricos (como p.ej. coordenadas). La forma
que tenemos aquí, es una operación (o construcción)
geométrica, donde usamos uno o más elementos ya existentes (dos
puntos, en este caso), para crear uno o más elementos nuevos
(una recta, en este caso).
Aquí, x1,y1 y x2,y2 son las coordenadas de
dos puntos que definen la línea. Notarás también que tenemos puntos con los nombres A,B,C y
rectas con los nombres a,b,c. Esto no es ningún problema, porque
GeoScript distingue entre mayúsculas y minúsculas; entonces A
no es lo mismo como a. Pero esto
significa que tienes que tipear con cuidado: si por ejemplo
llamas un punto Arriba y más tarde te
refieres a él con arriba, sucederá un
error. Como con POINT, la instrucción LINE tiene también sus parámetros opcionales, que se explican en esta sección del Manual de GeoScript. Para ejecutar el programa (bajo Windows), abre "GeoScript.exe", y en el cuadro de diálogo que aparece, selecciona el archivo del programa que quieres ejecutar ("tutorial1.geo" en este caso). Puedes también abrir el Explorador de Windows en la carpeta donde se encuentra tu archivo de programa, y arrastrarlo sobre el icono de GeoScript. Este es el resultado del programa: - Hay dos últimas instrucciones a explicar: WAIT detiene la ejecución del programa hasta que el usuario haga clic en un botón, o presione una de las teclas predefinidas. Sin esta instrucción, la ventana del programa se cerraría inmediatamente después de que el triángulo esté terminado, y ni siquiera tendríamos tiempo para admirar el resultado de nuestro primer programa. END termina el programa - no hay nada más que decir acerca de ello. End. Ejercicios sugeridos:
Capítulo 2: Dibujos
básicos con rectas En el capítulo 1 conocimos la construcción geométrica LINE. Ahora añadiremos algunas construcciones más a nuestro primer programa: hc = LINEPOLAR C, c, 90º, &HF0F La instrucción LINEPOLAR dibuja una recta que pasa por un punto dado, y forma un ángulo especificado con una recta dada. Los ángulos se especifican en grados e incrementan en sentido contrario al reloj. (El signo de grados º después del número es opcional; pero hace que se entienda mejor tu programa. Para el caso que lo revises cincuenta años más tarde, cuando hayas olvidado lo que significa cada cosa.) Aquí usamos LINEPOLAR para dibujar un ángulo recto con la base c, pasando por el punto C; o sea, la altura del triángulo. El valor &HF0F para el patrón produce una línea rayada. Existe también una instrucción de inicialización LINEPOLAR, de la forma siguiente:
Aquí x1,y1 son las coordenadas del origen de la recta, y ángulo es un ángulo absoluto: 0º significa una recta hacia la derecha, 90º hacia arriba, 180º hacia la izquierda, etc. Lo recordarás fácilmente si recuerdas que GeoScript sigue principios cristianos: Primero decides caminar por el camino derecho; después levantas tus ojos hacia arriba para obtener ayuda del Altísimo. - Después dibujamos la altura a través del punto B de la misma manera: hb = LINEPOLAR B, b, 90º, &HF0F Después guardamos el punto de intersección de las dos alturas en una variable H: H = CROSS hc, hb, 4, &HFF0000 El número 4 es un estilo de punto, que hace que el punto sea
dibujado como un cuadrado relleno. &HFF0000 es un valor de
color y significa un rojo intenso. - En el capítulo 1 hemos
visto otra forma de especificar colores; en aquella forma
escribirías (255,0,0). En lugar de aquella forma, puedes usar la
forma hexadecimal &HRRGGBB (dos dígitos para Rojo, dos para
Verde y dos para Azul.) Pero si los números hexadecimales te
causan dolor de barriga, preferirás la forma con paréntesis
(rojo, verde, azul). Cosa siguiente, solo para dar un ejemplo, inicializamos otro punto y otra recta con las instrucciones siguientes: POINT X, 400, 280, -1, (0,128,0) x, Y = STARTLINE X, 0º, 180, -1, (0,128,0), 3 La instrucción STARTLINE sirve mayormente para propósitos
educativos: Inicializa una recta exactamente de la manera como
dibujarías una nueva recta de una longitud dada sobre papel.
Esta instrucción toma un punto que ya dibujaste, dibuja una
recta desde allí en una dirección dada (0º = hacia la derecha
en este ejemplo), y mide el largo deseado (180 píxeles en el
ejemplo) desde el punto inicial. Los tres últimos parámetros
son las propiedades gráficas de la recta: patrón predefinido,
color verde y grosor 3.
Como ves, esta instrucción tiene dos resultados: una recta y un punto (el punto final). El punto final tendrá las mismas propiedades gráficas como el punto inicial. Ahora queremos definir un tercer punto en esta recta x, a una distancia de 50 píxeles desde X hacia Y. Esto lo logramos con la siguiente instrucción: Z = ADVANCETO X, Y, 50, 2 (El último parámetro, 2, es el estilo del
nuevo punto Z.) Z = ADVANCEON X, x, 50, 2 La única diferencia entre ADVANCETO y ADVANCEON es que ADVANCETO usa como parámetros dos puntos, mientras ADVANCEON usa un punto y una recta. Ahora, si usamos ADVANCEON, la pregunta es: ¿en cuál dirección avanzamos? Puesto que en una recta se puede ir en dos direcciones, ¿qué si GeoScript se equivoca y avanza hacia la izquierda, cuando queremos avanzar hacia la derecha? - La respuesta está en el formato vectorial que GeoScript usa internamente. Para una recta, guarda no solamente su ubicación, sino también su dirección. Esta dirección depende de la manera como la recta fue construida inicialmente. En nuestro caso la hemos construido utilizando un ángulo absoluto; por tanto podemos estar seguros de que la recta apunta hacia la derecha, no hacia la izquierda. Para una recta que fue construida uniendo dos puntos, su vector apunta desde el primer punto hacia el segundo, y no al revés. Como último ejemplo, construiremos una recta que empieza en Z, en un ángulo de 30 grados con x: z = LINEPOLAR Z, x, 30º, -1, (0,128,0), 3 Aquí podríamos preguntar nuevamente: ¿en qué dirección apuntará el ángulo? ¿Hacia la derecha o hacia la izquierda? - Nuevamente tenemos que mirar el vector de la recta, y recordar que los ángulos aumentan en sentido contrario al reloj. Así que hay una sola respuesta: esta recta señalará hacia arriba a la derecha. Este es el programa entero:
Y este es el resultado: Ejercicios sugeridos:
Capítulo 3: Marcar objetos Seguiremos usando el programa del capítulo anterior, y
añadiremos algunas cosas más a él. Puesto que nuestros puntos
y nuestras rectas tienen nombres, sería lindo ver estos nombres
también en la pantalla. Esto se hace con la familia de
instrucciones MARK...
tamaño es un parámetro opcional que
indica el tamaño (altura) de la letra en píxeles. Si lo omites,
se aplica el tamaño predefinido de 16 píxeles.Ç MARKPOINT A, -1, 2 MARKPOINT B, -1, 2 (Para más valores de posición, y otros detalles acerca de las instrucciones de marcado, vea el Manual de GeoScript.) Para el punto C, la posición predefinida está bien. Pero como ejemplo, usaremos un tamaño de letra más grande para este punto: MARKPOINT C, 24 Para marcar una recta, hay dos formas alternativas:
De alguna manera hay que indicar donde a lo
largo de la recta se debe colocar la etiqueta. Puedes especificar
dos puntos sobre la recta, y la etiqueta se colocará en el medio
entre los dos puntos. Ten cuidado, GeoScript no comprueba si
estos puntos están realmente en la recta. Si no lo son, tendrás
unos resultados extraños. MARKLINE a, -1, 1 MARKLINE b MARKLINE c, -1, 1 Habrás vista que cambiamos el valor de posición para las rectas a y c, porque preferimos tener todas las etiquetas afuera del triángulo. Para rectas hay solamente dos valores de posición: El valor predefinido (0) es a la izquierda de la recta, si es una recta muy inclinada (más de 45º), y encima de la recta, si es menos inclinada. Un valor de 1 cambia esta posición a la derecha, resp. debajo de la recta. Ahora para los ángulos. Las dos formas de la instrucción de marcado son:
Puesto que los ángulos no se guardan en
variables, no tienen nombres, y tenemos que darles uno ahora.
Para esto sirve el parámetro "texto". Tienes
que encerrar este texto entre comillas dobles "". -
Además de la etiqueta, los ángulos se marcarán también con un
arco. Puedes especificar el tamaño de este arco con el
parámetro opcional radio. Empecé a enumerar estas posibilidades con 0,
porque así es la costumbre de los programadores (muy útil para
tratar con computadoras, pero no para la vida diaria). Y también
porque estos números rojos corresponden al parámetro opcional posición.
La posición 0 (valor predefinido) marca el ángulo en sentido
contrario al reloj desde la recta1 hacia la recta2.
Posición 1 es el siguiente ángulo en sentido contrario al
reloj, etc.
Esto es lo que hacemos en nuestro programa ejemplo: MARKANGLE B,A,C, "a" MARKANGLE C,B,A, "b" MARKANGLE A,C,B, "g", 24, 150 Verás que como resultado, se colocan letras griegas en los ángulos: en vez de una "a" latina, aparecerá una alfa griega. Gamma se representa con "g", no "c". - Con este tercer ángulo, usamos un tamaño de letra más grande (24) y un radio de arco más grande (150 píxeles). Marcar tamaños de ángulos y rectas A veces es desable no solamente indicar el nombre de un ángulo, sino también su tamaño. Esto se hace con la instrucción MARKNUMBERANGLE, que tiene exactamente la misma síntaxis como MARKANGLE (ambas formas), pero adicionalmente calculará y mostrará el tamaño del ángulo en grados. En nuestro programa ejemplo, indicaremos el tamaño del ángulo entre la altura hc y la base c, que debe ser 90º: MARKNUMBERANGLE c, hc, "f" Para rectas usamos MARKNUMBERLINE, que tiene la siguiente síntaxis:
Esta instrucción indicará la distancia entre punto1
y punto2 en píxeles; o si no indicas puntos, el largo
del vector de la recta. Este es el programa completo:
Y así se ve en la pantalla: Ejercicios sugeridos:
Capítulo 4: Círculos Como POINT, LINE y LINEPOLAR, la instrucción CIRCLE tiene también dos usos. Para inicializar un círculo con valores numéricos, su síntaxis es:
x,y son las coordenadas del centro del círculo. Los parámetros opcionales inicio y fin indican el ángulo inicial y final del arco, en grados; o sea, permiten dibujar solamente un arco en vez de un círculo completo. - Estas propiedades se aplican solamente a la manera como el círculo se dibuja en la pantalla, pero no a las construcciones: Si construyes, por ejemplo, las intersecciones de un círculo con una recta, estos puntos se crearán aun cuando se encuentran en la parte invisible del arco. Como construcción, CIRCLE tiene las siguientes dos formas:
En la primera forma, la circunferencia del
círculo pasará por punto. En la segunda forma, el
círculo será tangencial a recta.
Aquí vemos también dos nuevas variaciones de la instrucción CROSS: P,Q = CROSS t, c2 R,S = CROSS c1, c2 En el primer caso, se construyen las intersecciones de una
recta con un círculo; en el segundo caso, las intersecciones de
dos círculos. Puesto que puede haber dos intersecciones, tenemos
que poner los resultados en dos variables diferentes. La última instrucción a explicar es: a,b = TANGENT P, c1, &HF01, (0,160,0) Esto dibuja las tangentes (nuevamente dos variables para los resultados posibles) desde el punto P al círculo c1. De los parámetros opcionales usuales (patrón, color, grosor), dos son dados: &HF01 dibuja una recta en raya-punto-raya, y su color es verde. Este es el resultado del programa: Hay dos elementos grises en la pantalla que posiblemente no
esperaste: una recta en ángulo recto desde A hacia la recta PQ,
y un círculo que pasa por P y por el centro del círculo c1.
Estas son líneas auxiliares que dibujarías también en el
papel, si hicieras estas construcciones con exactitud: ayudan a
encontrar los puntos exactos donde el círculo toca su tangente. Ejercicios sugeridos: (Si no estás seguro acerca de las construcciones, inténtalas primero sobre papel.)
Capítulo 5: Líneas
notables en un triángulo; Mostrar texto Cuando mostramos unas construcciones geométricas con GeoScript, será bueno poner algún texto en la pantalla que explique al usuario qué estamos haciendo. Hay una serie de instrucciones de pantalla que hacen esto. Para mostrar un texto, necesitamos las siguientes instrucciones:
En vez de TEXTWINDOW, puedes también escribir TWINDOW. Esta
instrucción define un rectángulo dentro del cual aparecerá el
texto. No puedes usar la instrucción TEXT sin especificar
TEXTWINDOW en alguna parte anterior del programa. Así que ponemos una instrucción TEXTWINDOW y una
instrucción TEXT en alguna parte entre las instrucciones de
construcción del ejemplo anterior. ¿Qué sucede? El texto
aparecerá solamente por un breve momento. Quizás ni siquiera lo
puedes ver. Tan pronto como el siguiente elemento se dibuja, el
texto desaparece. Esto es porque el marco de TEXTWINDOW se
encuentra dentro del área donde se dibujan los gráficos.
Entonces será cubierto tan pronto como se actualizan los
gráficos. En nuestro programa ejemplo usaremos el segundo método. Fíjate en estas líneas: SCREEN 600,460 WINDOW 600, 380 TWINDOW 2,380, 596,60 La instrucción SCREEN define el tamaño de la ventana de la
aplicación (aquí 600x460 píxeles). Si omites esta instrucción
(como en los ejemplos anteriores), la ventana se inicializará
con el tamaño predefinido de 640x480. Después de esta inicialización, construimos un triángulo y marcamos sus elementos como el el capítulo 3. No hay necesidad de repetir esta parte aquí. Después de esto, ponemos un texto para explicar lo que hacemos: TEXT "Uniremos cada punta del triángulo con el medio del lado opuesto. Las rectas resultantes se intersectan en el centro de gravedad.", (0,0,255) (Nota que este texto entero debe escribirse en una sola línea. Lo estoy partiendo en dos aquí solamente para que no necesites desplazar la ventana entera para leerlo.) Después construimos y marcamos el centro de gravedad con estas líneas: D = MIDDLE B,C E = MIDDLE A,C F = MIDDLE A,B d = LINE A,D, -1, (0,0,255) e = LINE B,E, -1, (0,0,255) f = LINE C,F, -1, (0,0,255) G = CROSS d, e, -1, (0,0,255) MARKPOINT G La instrucción MIDDLE coloca simplemente un punto exactamente
en el medio entre dos otros puntos. Opcionalmente puedes
especificar el estilo, el color y el grosor del punto resultante. TEXT "Presiona 'Continuar' para continuar.", (255,255,0), (160,0,0) WAIT Después construimos la circunferencia circunscrita del triángulo. Escribimos nuevamente un texto explicativo, y entonces realizamos la construcción siguiente: h = MIDLINE B,C, -1, (255,0,0) i = MIDLINE A,C, -1, (255,0,0) j = MIDLINE A,B, -1, (255,0,0) M = CROSS h,i, -1, (255,0,0) MARKPOINT M c1 = CIRCLE M,A, (255,0,0) La instrucción MIDLINE dibuja la mediatriz entre dos puntos,
y tiene los mismos parámetros opcionales como todas las
instrucciones de construcción (patrón, color y grosor, en el
caso de una recta.) Verás nuevamente aparecer algunas líneas
auxiliares que simulan la construcción verdadera en papel. Ahora ya tenemos bastantes líneas en la pantalla, y dibujar
más sobre esto se vería bastante desordenado. Por tanto,
después de un WAIT, limpiamos la pantalla con la instrucción
CLS. Opcionalmente puedes especificar un color de fondo; por
ejemplo CLS (0,0,100) llenará la pantalla con un azul oscuro. d = BISECTOR c,b, -1, (0,190,0) REVERT c e = BISECTOR a,c, -1, (0,190,0) REVERT a REVERT b f = BISECTOR b,a, -1, (0,190,0) M = CROSS d,e, -1, (0,190,0) c2 = CIRCLE M, a, (0,190,0) La instrucción BISECTOR dibuja la bisectriz del ángulo entre
dos rectas. ¿Y para qué sirve el REVERT? - Esto tiene que ver
nuevamente con la dirección de los vectores de las rectas. En un
capítulo anterior hablamos de que hay varias maneras de
interpretar cuál es el ángulo entre dos rectas; y por tanto hay
varias maneras de construir una bisectriz entre dos rectas.
BISECTOR usará siempre el ángulo en sentido contrario al reloj,
desde la recta1 hacia la recta2. Si los vectores de estas rectas
no señalan en la dirección deseada, tenemos que invertirlos con
REVERT. Esta instrucción no cambia nada en la ubicación y
apariencia de una recta; simplemente voltea su vector en la
dirección opuesta. Hay una última parte en este programa que construye las alturas. No hay nada nuevo en esa parte. Aquí está el programa completo:
Y aquí está el resultado de la segunda mitad del programa: Ejercicios sugeridos:
Capítulo 6: El
procedimiento "CONSTRUCTION" En el último ejemplo tuvimos que dibujar dos veces el mismo triángulo. En vez de copiar las mismas instrucciones otra vez, hay una manera más conveniente de hacerlo. Podemos poner estas instrucciones en un procedimiento (a veces también llamado "subrutina") del tipo CONSTRUCTION. Entonces necesitamos una sola línea, la instrucción CALL, para llamar a este procedimiento. Todas las instrucciones en el procedimiento se ejecutarán, y después el programa continuará normalmente con la línea que sigue la instrucción CALL. Los procedimientos tienen que colocarse después de todas las otras instrucciones (que se llaman también el "módulo principal"). Entonces ponemos el siguiente bloque de instrucciones al final de nuestro programa: CONSTRUCTION Triangulo A,B,C c = LINE A,B b = LINE A,C a = LINE B,C MARKPOINT A, -1, 2 MARKPOINT B, -1, 2 MARKPOINT C MARKLINE a MARKLINE b MARKLINE c, -1, 1 REPEAT La palabra CONSTRUCTION le dice al intérprete de GeoScript que un procedimiento del tipo "CONSTRUCTION" empieza aquí. "Triangulo" es el nombre del procedimiento. (Cada procedimiento debe tener un nombre, porque tenemos que llamarlo (CALL) por su nombre desde otras partes del programa.) A,B y C son los parámetros del procedimiento. Pasar parámetros es un concepto importante de la
programación. Cuando llamas el procedimiento
"Triangulo" (con CALL), el procedimiento espera que le
des tres puntos para que trabaje con ellos. No es necesario que
sean los puntos A,B,C del módulo principal; pueden ser puntos
cualesquieras. Por ejemplo, puedes escribir "CALL Triangulo
D,E,F"; entonces el procedimiento construirá un triángulo
de los puntos D, E y F. En cualquier parte del procedimiento
donde aparece la variable A, usará D en vez de A, y de la misma
manera E en vez de B, y F en vez de C. Cada procedimiento termina con la instrucción REPEAT. Después de REPEAT puedes opcionalmente poner un número que indica cuántas veces se repetirá el procedimiento. Por ejemplo, si escribes "REPEAT 5", el procedimiento se repetirá cinco veces antes de volver a la línea después de CALL. Si omites el número, el procedimiento se ejecutará una sola vez y después regresará. (No hay ejemplos para CONSTRUCTIONes repetidas en este tutorial. Pero puedes encontrar algunos en los otros programas ejemplo, como en "Espiral.geo" y en "Conicas.geo"). En vez de CALL, cuando llamas una CONSTRUCTION, puedes también escribir CONSTRUCT. Modos de ejecución Hay tres diferentes modos con los que puedes llamar un procedimiento: SLOW, PACE y FAST. PACE (por pasos) es el modo que has visto hasta ahora. Los elementos se dibujan en la pantalla uno por uno, con un tiempo de espera de dos segundos entre elemento y elemento. (Aunque el usuario puede saltar estos tiempos de espera, presionando cualquier tecla excepto "R", [Esc] y [RePág].) Si no especificas ningún modo, una CONSTRUCTION se ejecutará en este modo. El módulo principal se ejecuta siempre en modo PACE. El modo FAST (rápido) dibuja la CONSTRUCTION entera de una vez, tan rápido como lo permite el rendimiento de tu computadora. El modo SLOW (lento) es para animaciones educativas. No solo
muestra los elementos geométricos, sino también una animación
sencilla de las herramientas que usarías para dibujar estos
elementos en papel (regla, compás, etc.) Esto demora, por
supuesto, pero es interesante mirarlo, especialmente para
principiantes. - En vez de SLOW puedes también escribir TOOLS. En una instrucción CALL, la palabra clave que indica el modo debe colocarse después del nombre del procedimiento, pero antes de los parámetros. Por ejemplo: CALL Triangulo FAST, X, Y, Z El siguiente programa muestra ejemplos para todos los tres modos. Es esencialmente el mismo como en el capítulo anterior. Pero puesto que estamos practicando procedimientos, las otras construcciones (centro de gravedad, circunferencia circunscrita, etc.) fueron también puestas en procedimientos, y llamadas con CALL desde el módulo principal. Y verás que el triángulo se inicializa con puntos diferentes en medio del programa. - Hay un cambio más en este programa: Al inicializar los puntos A,B,C, verás que en vez de POINT usamos la instrucción IPOINT. La "I" significa "Invisible". Puntos inicializados con IPOINT no aparecerán en la pantalla, y por tanto tampoco consumirán tiempo de espera. (Probablemente ya te habrás aburrido con ver los tres puntos aparecer lentamente en los ejemplos previos.) - Aun los puntos inicializados con IPOINT, podrás marcarlos más adelante en el programa si deseas. De manera similar puedes poner una "I" delante de casi todas las instrucciones de inicialización y construcción: ILINE, ICIRCLE, ICROSS, IMIDLINE, etc.
Ejercicios sugeridos:
Capítulo 7: Animaciones En el capítulo anterior vimos procedimientos del tipo CONSTRUCTION. Hay dos otros tipos de procedimientos. Uno de ellos es ANIMATION. Permite repetir la misma construcción muchas veces, mientras sus puntos iniciales se están moviendo. En el modo FAST, esto da la impresión de una figura geométrica que cambia su forma constantemente. El siguiente ejemplo usa las CONSTRUCTIONes "Triangulo" y "Circumcirculo", que ya conocemos del capítulo anterior. Pero ahora llamamos estos dos procedimientos desde adentro de otro procedimiento del tipo ANIMATION, que se ve así: ANIMATION Circum STEP A, 4,-1 TRACE M CALL Triangulo FAST A,B,C CALL Circumcirculo FAST A,B,C REPEAT 150 Primero tenemos la palabra clave ANIMATION y el nombre del procedimiento. Las animaciones no pueden recibir parámetros. - Después encontramos dos instrucciones nuevas: STEP A, 4,-1 La instrucción STEP indica que el punto A se moverá durante
la animación. Los números son la distancia, en píxeles, que el
punto se moverá después de cada repetición: 4 píxeles hacia
la derecha y 1 píxel hacia arriba. TRACE M La instrucción TRACE indica que el punto M será "trazado" durante la animación. Esto significa que mientras los otros elementos se borran y se crean de nuevo con cada repetición, el punto M dejará detrás de sí una "huella" de todas sus posiciones desde el inicio de la animación. - Después de TRACE, puedes especificar varios puntos en la misma línea (hasta 14). Las instrucciones STEP y TRACE se aplican al procedimiento entero de manera general, sin importar donde en el procedimiento se encuentran. - Después de estas, llamamos nuestras construcciones
"Triangulo" y "Circumcirculo" con CALL. Nota
que una ANIMATION puede llamar otros procedimientos, pero una
CONSTRUCTION no puede llamar a ningún otro procedimiento. Desde el módulo principal llamamos nuestra animación "Circum" en modo FAST. (Este es el modo predefinido para una ANIMATION.) ¡Ejecuta el programa y mira como se mueven!
Este es el resultado después de algunas repeticiones: Ejercicios sugeridos:
Capítulo 8: El
procedimiento "INTERACTION" El tercer tipo de procedimientos en GeoScript es INTERACTION.
Es similar a ANIMATION en que vuelve a dibujar la misma
construcción desde diferentes puntos de partida. Pero mientras
ANIMATION mueve los puntos automáticamente, INTERACTION permite
que el usuario arrastre los puntos, usando el ratón. INTERACTION Circum CLICKABLE A, B CALL Triangulo FAST A,B,C CALL Circumcirculo FAST A,B,C REPEAT No tenemos las instrucciones STEP y TRACE aquí. En lugar de
ellas, tenemos la instrucción CLICKABLE. Ella especifica cuáles
puntos pueden ser arrastrados con el ratón (en nuestro ejemplo
son A y B). Como con TRACE, después de CLICKABLE puedes escribir
varios puntos en la misma línea (hasta 14). Solo puntos pueden
ser CLICKABLEs, pero rectas y círculos no. Una INTERACTION se repite infinitamente, hasta que el usuario haga clic en "Salir" o presione la tecla [Esc]. Por tanto, es inútil especificar un número de REPEAT para una INTERACTION. En modo FAST, una INTERACTION actúa diferente de los otros
modos: En modo FAST, mientras el usuario está todavía
arrastrando un punto, la construcción se actualiza
constantemente. Esto se ve como si estuvieras arrastrando la
figura entera, cambiando su forma dinámicamente. Así lo verás
al ejecutar el ejemplo abajo. Ahora inténtalo y ejecuta este programa de ejemplo:
Ejercicios sugeridos:
Capítulo 9: Limitar
movimientos en animaciones e interacciones A veces es útil mover un punto (o dejar que el usuario lo arrastre), pero no a cualquier parte de la pantalla, sino solamente a lo largo de una línea predefinida. Por ejemplo, en este capítulo queremos ilustrar visualmente la ley de que todos los ángulos dibujados sobre la misma cuerda en un círculo son iguales. Para este propósito necesitamos un círculo, una cuerda, y un punto que se mueve - pero solamente a lo largo de la circunferencia del círculo. La palabra clave ALONG nos permite domesticar un punto movible de tal manera que obedecerá a esta orden. El ejemplo siguiente muestra el uso de ALONG tanto en una ANIMATION como en una INTERACTION. En la ANIMATION tenemos la línea siguiente: STEP P ALONG c1, 3 Esto le dice al punto P que tiene que moverse a lo largo de la
circunferencia del círculo c1. (En vez de un círculo, se puede
también especificar una recta después de ALONG.) - Ahora,
puesto que el movimiento del punto está confinado a una
circunferencia, ya no podemos darle un par de coordenadas x y y
para su movimiento. Podemos darle un solo parámetro: la
distancia que se moverá (3 píxeles en nuestro ejemplo); y la
dirección es dada por el círculo resp. por la recta en la cual
se mueve. Ahora mira el procedimiento INTERACTION. Aquí tenemos una línea similar: CLICKABLE P ALONG c1 Con esta instrucción, el usuario puede arrastrar el punto P, pero no podrá alejarlo de la circunferencia del círculo. Si ejecutas el programa y lo pruebas, verás el efecto. Aquí está el programa entero:
Dos otras instrucciones en este programa necesitan una explicación, ambas en la CONSTRUCTION Init: FILL c1, (0,0,255), 20 Esta instrucción no realiza ninguna construcción.
Simplemente llena el círculo c1, que
ya existe, con un color. El número 20 indica la opacidad del
relleno en una escala de 0 a 255. 0 is completamente transparente
(no verás nada del relleno); 255 es intensidad completa. Si el
círculo es un círculo parcial (o sea un arco), solamente el
sector que corresponde al arco será rellenado. La otra instrucción nueva en este programa es: P = COPY B Queremos que el punto movible P comienze en el mismo lugar
como el punto B en el círculo. Por esto hacemos una
"copia" de B y la ponemos en la variable P. Entonces P
tendrá exactamente las mismas coordenadas y la misma apariencia
como B. Este es el resultado del programa en dos momentos diferentes: Ejercicios sugeridos:
Capítulo 10: un menú Es práctico tener un menú en un programa. (Excepto de que te
hace pensar en comida cuando deberías estar pensando en
programar.) El usuario puede ver a primera vista lo que el
programa ofrece, y puede escoger las opciones que desea. MENU MENUITEM "Opción 1" TEXT "Seleccionaste la opción 1." MENUITEM "Opción 2" TEXT "Seleccionaste la opción 2." MENUITEM "Opción 3" TEXT "Seleccionaste la opción 3." ENDMENU WAIT END Claro que este menú no hace nada interesante. Pero te
demuestra como funciona. Ves que comienza con MENU (sin
parámetros), seguido por una lista de MENUITEMs. Después de
MENUITEM tienes un texto. Este es el texto que aparecerá en la
lista del menú. Pero la instrucción MENU tiene más capacidades que esta. Por ejemplo, supongamos que nuestro usuario ha seleccionado una opción del menu, ésta se ha ejecutado, y entonces el usuario desea seleccionar otra opción del mismo menú. Pero la lista del menú ya desapareció. ¿Cómo volvemos a ella? - Puedes hacerlo con terminar la lista con REPEATMENU en vez de ENDMENU. Esto hace que el menú aparecerá repetidamente, cada vez que la ejecución de una opción termina. Pero entonces tenemos otro problema: ¿cómo puede el usuario salir de este menú? Se repetirá infinitamente. O sea, lo haría - si no existiera la instrucción EXITMENU. Pon EXITMENU al fin de las instrucciones de una opción, y el programa saltará a la línea después de REPEATMENU. Entonces cambiamos ligeramente nuestra primera lista de menú: MENU MENUITEM "Opción 1" TEXT "Seleccionaste la opción 1." MENUITEM "Opción 2" TEXT "Seleccionaste la opción 2." MENUITEM "Opción 3" TEXT "Seleccionaste la opción 3." MENUITEM "¡Quiero salir de este menú aburrido!" TEXT "Decidiste salir del menú." EXITMENU REPEATMENU WAIT END Este menú se repetirá hasta que el usuario seleccione la cuarta opción (o hasta que presione [Esc] o haga clic fuera de la lista del menú). Pero hay aun más. Puedes también anidar menús: un MENUITEM puede a su vez contener una nueva lista MENU. Verás esto en el ejemplo siguiente. Contiene la misma animación e interacción como el programa del capítulo 9, pero ahora el usuario puede escoger entre animación e interacción, y puede seleccionar el modo de ejecución.
Ejercicios sugeridos:
Capítulo 11: Cambiar los
estilos y colores predefinidos GeoScript tiene ciertos valores predefinidos para colores,
propiedades de puntos y rectas, etc, que aplica a cada elemento
cuyas propiedades no se indican explícitamente en el programa.
Si deseas que un elemento aparezca de manera diferente, tienes
que indicar explícitamente su color, estilo y grosor.
Los parámetros significan lo siguiente: La instrucción DEFAULTS cambia estos valores como los indicas, para todas las instrucciones de dibujo siguientes. Recuerda que NO cambia la apariencia de la ventana y de los objectos ya dibujados. Por tanto, usar DEFAULTS tiene sentido solamente cuando estás inicializando una construcción nueva. Existe también una instrucción TOOLDEFAULTS que cambia la apariencia de las herramientas que se dibujan en modo SLOW / TOOLS. Su síntaxis es:
Los parámetros se explican por sí mismos. tamañoLápiz
se aplica no solamente al lápiz, sino también al compás. tamañoEscuadra
se aplica no solamente a la escuadra, sino también al
transportador. (Escuadra y transportador aparecen solamente con
la instrucción LINEPOLAR.) El siguiente ejemplo demuestra el efecto de los cambios aplicados con DEFAULTS y TOOLDEFAULTS. Adicionalmente cambiamos el color de las opciones resaltadas en el menú.
Este es un ejemplo del resultado:
Ahora que dominas los fundamentos de GeoScript, ¡nada te detendrá de escribir los programas más fabulosos! Si escribes un programa GeoScript interesante y deseas compartirlo con otros usuarios, envíalo a: |