% This is the documentation of DrGeo
% El manual de  Dr. Geo
% Copyright 2002-2004 Hilaire Fernandes
% Licensed under the terms of the FDL
% Traducción al español por Adrián Soto <adrianmatematico@yahoo.com.mx>
% REMARK: IN ORDER TO MAKE SURE THAT THE PDF
% FILE WORKS WELL, MAKE SURE THAT YOU
% WRITE "{} INSTEAD OF JUST "
% FIXME:  For some reason, in the html file (only) in verbatim enviroments
%        instead of the simbol ``¿'' the symbol ``>'' appears.

\documentclass[a4paper]{book} 
\usepackage{hyperlatex} 
\T \usepackage[pdftex]{color,graphicx} 
\usepackage{makeidx}

\usepackage[latin1]{inputenc}
\usepackage[spanish]{babel}
\T \usepackage{multicol}
% \W\usepackage{frames}

\usepackage{hyperref}


\captionsspanish 
\datespanish 
\extrasspanish 
\W \htmlpanelspanish

% Prepare macro
\newcommand{\drgeoImagePath}{../es/figures}
\newcommand{\drgeoApiOutLocale}{Devuelve}
\newcommand{\drgeoApiExampleLocale}{Ejemplo}
% Include common definitions
\input{../drgeniusCommon.tex}

% FIXME experimental, to get nicer book
\W\begin{iftex}
  \usepackage{fancybox}
  \usepackage{fancyhdr}
  \fancyhead{}

  \renewcommand{\headrulewidth}{0.4pt}
  \fancyhead[RO]{\slshape \rightmark}
  \fancyhead[LE]{\slshape \leftmark}
  \fancyfoot[RO]{\colorbox{white}{\ovalbox{\drgeniusIcon{fig0}}}}
  \fancyfoot[LE]{\colorbox{white}{\ovalbox{\drgeniusIcon{fig0-bis}}}}
  \pagestyle{fancy}
\W\end{iftex}



\makeindex

\htmltitle{Manual de Usuario de Dr. Geo}


\htmladdress{\small ¿Comentarios?/¿Sugerencias? \\
  O si usted es voluntario para escribir parte del manual.\\
  -> Contacte a Hilaire Fernandes 
  en OFSET \drgeniusImage{hilaire-email} o únase
  a la lista de correo de \drgeo.}




\title{Manual de Usuario de \drgeo\\
  \drgeniusImage{fig0}}
\author{Hilaire Fernandes, Andrea Centomo \\ Adrian Soto \\
  \textit{OFSET}\\
  \texttt{http://www.ofset.org}}




\begin{document}

\W \begin{center}
  
\maketitle
  
\W \end{center}

\xname{contents}
\tableofcontents

\chapter*{Copyright}
Copyright (c) 2000-2004 OFSET.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.  A
copy of the license is included in the section entitled "GNU Free
Documentation License".
      

Other copyright apply to the respective owners of the modified
documentations. See the section history for the complet list.


\xname{introduction}
\chapter{Introducción}

\T \fancyput(3.25in,-5in){\setlength{\unitlength}{1in}\fancyoval(7,10.5)}



\section{Preliminares}


\drgeo\ es un programa tanto de geometría interactiva como de
programación en el lenguaje Scheme.  Permite crear figuras
geométricas, así como manipularlas interactivamente respetando sus
restricciones geométricas.  Ofrece igualmente la posibilidad de
introducirse gradualmente en la programación.  Es útil para la
enseñanza a estudiantes de nivel básico o superior.

La interfaz de usuario de \drgeo\ ha sido concebida para dar, dentro
de un conjunto armónico, a la vez sencillez en su operación, ergonomía
y funcionalidades avanzadas.

Así, la interfaz de \drgeo\ , con una gran sencillez, permite al
neófito la familiarización con las funciones básicas del programa.
Posteriormente, a medida que las conozca más, el usuario conocerá los
aspectos más avanzados de la interfaz y del funcionamiento de \drgeo\ 
: múltiples modos para la construcción de objetos \footnote{ Se trata
  de poder, a partir de un mismo comando, crear un tipo de objeto
  según se requiera.  Por ejemplo, a partir del comando para la
  construcción de un círculo, el usuario puede crear un círculo a
  partir de su centro y de ya sea un punto, una longitud, un segmento,
  etc. Con todo, este comando es representado por un solo ícono, y
  \drgeo\ se anticipa para ofrecer al usuario la construcción deseada.
  El efecto inmediato es que existe una disminución en el tiempo de
  aprendizaje de la interfaz, al proponer un número importante de
  modos de construcción}, macros de construcciones, sesiones,
adaptabilidad de la interfaz, uso de scripts y de Figuras Scheme de
\drgeo\, (i.e. \drgeo\ es programable en dos modos distintos).  Estas
funciones avanzadas generan muy poca sobrecarga a la interfaz, por lo
que \drgeo\ es utilizado con entusiasmo en la enseñanza primaria, lo
que no resta su uso en el nivel medio.

En las secciones siguientes, expondremos las herramientas básicas.
Posteriormente las funciones avanzadas serán presentadas en detalle.


\drgeniusFigureSize{Pantalla de Bienvenida de \drgeo\ }{fig1}{8}

La estructura de la interfaz es la siguiente~:

\begin{enumerate}
\item la \textit{barra de menú} característica con
  \drgeoMenu{Archivo}, \drgeoMenu{Editar},
\drgeoMenu{Macros}, \drgeoMenu{Ventanas},
\drgeoMenu{Ayuda}
  ;
\item la \textit{barra de acciones} para crear una nueva figura o un
  texto explicativo; contiene también las herramientas de
  hacer/deshacer y la rejilla .
\end{enumerate}


Para crear una figura geométrica nueva, el usuario debe hacer click en
el primer botón de la barra de herramientas.  De manera alternativa,
una nueva figura puede ser creada usando el elemento de la barra del
menú \drgeniusMenu{Archivo->Nuevo->Figura}.  Cuando una nueva figura
es creada, una nueva \textit{barra de íconos} formada por seis íconos
aparece.  Esta barra de íconos termina con un menú que permite ajustar
la escala de la figura geométrica actual.

Además, una barra de íconos vertical, a la izquierda de la figura,
ofrece un rápido acceso a las herramientas más utilizadas.


\drgeniusFigureSize{Una figura geométrica vacía}{fig2}{8}



Los seis íconos de la barra de íconos son entradas de menú generales
desde donde se llaman a funciones específicas.  Estas funciones son
descritas en el siguiente capítulo.



\drgeniusFigureSize{Una figura de \drgeo\ y su descripción}{fig50}{8}


Para cada figura, un \textit{árbol sinóptico(o árbol de construcción)}
 está disponible.
Inicialmente este panel está oculto en el extremo izquierdo de modo
que sólo la representación de la figura es visible.  En cualquier
momento, el usuario puede empujar el panel hacia la derecha como
sigue: Lleve el ratón a la parte izquierda de la figura, justo a la
izquierda de donde está la regla; cuando el puntero del ratón cambie
de forma, presione el botón y continúe presionando mientras mueve el
ratón a la derecha.  Con ello, será visible la descripción de la
figura.  La descripción de una figura es un árbol formado con todos
los elementos de la figura.  Los elementos que dependen de otros
elementos pueden ser revelados al hacer click sobre el símbolo `+'.
Con ello, se mostrarán los elementos que dieron origen (v.g. los que
dieron origen a una línea pueden ser dos puntos; aunque pueden ser
otros originadores.  También se les llama elementos antecedentes o
elementos padre).

\section{\drgeo\ en la Red}

\drgeo\ dispone de su propio espacio en la red en el sitio
\textsc{ofset} en la dirección~: \xlink{http://www.ofset.org/drgeo}.

En este espacio, el usuario encontrará la siguiente información~:

\begin{itemize}
\item la información para obtener \drgeo{}~;
\item la documentación del programa;
\item algunas indicaciones para involucrarse en el proyecto \drgeo{}~;
\item algunas referencias para el uso pedagógico del programa.
\end{itemize}



\chapter{Funciones Básicas}

Este capítulo describe las herramientas usadas para construir figuras
geométricas.  Al final del capítulo, la configuración de las
preferencias del usuario es también presentada.


\section{Herramientas de Construcción}

Estas herramientas están separadas en seis grupos disponibles desde la
segunda barra de herramientas de \drgeo\ .

\drgeniusFigureSize{Categorías de herramientas de \drgeo\ y sus
  descripciones}{fig3}{12}

Cuando el usuario hace click sobre uno de los íconos decorados con un
triangulito verde, una nueva barra vertical de íconos aparece
inmediatamente.  En ella se agrupan funciones de una misma familia.


De izquierda a derecha, tenemos acceso a las barras de herramientas
verticales para: construir puntos, construir líneas, realizar
transformaciones geométricas, calcular valores numéricos, generar
macros de construcciones, y utilizar las herramientas de edición --

\emph{Otras herramientas}

Estas funciones también aparecen dentro del menú contextual de una
figura, que es llamado haciendo click con el botón derecho en el fondo
de la figura.

\xname{point_tools}
\subsection{Herramientas de Puntos}
\subsubsection{Punto Libre}
\drgeniusIcon{fig4}
\label{free_point}
\drgeniusIndex{Punto}{Libre}{}{}

Crear un punto libre en el área o un punto libre en un objeto
unidimensional(segmento, semirrecta,recta, arco de círculo, círculo,
lugar geométrico).
\begin{enumerate}
\item En el primer caso, el punto creado puede moverse a cualquier
  lugar del fondo de la figura. Para construirlo, el usuario
  simplemente hace click en cualquier parte del fondo.
\item En el segundo caso, el punto está limitado a moverse en el
  objeto unidimensional (línea o círculo); está pegado al objeto.
  Para construir este tipo de punto el usuario hace click sobre una
  línea (i.e. una línea recta, una semirrecta, un segmento, un
  círculo, un arco de círculo, etc.).
\end{enumerate}

\paragraph{¿Cómo ubicar un punto dadas sus coordenadas~?}

La solución más simple consiste en colocar un punto libre y luego
editar sus propiedades --~herramienta \link{Propiedades}[ Sección
\Ref, página \Pageref]{property-item}~-- ajustando sus coordenadas a
voluntad..

Otra posibilidad --~menos flexible para este tipo de figura~--
consiste en colocar dos valores libres en la figura --~herramienta
\link{Valor Numérico}[Sección \Ref, página \Pageref]{numeric_tool}~--
y luego construir el punto con coordenadas dadas por esos dos valores
--~herramienta \link{Punto definido por sus coordenadas}[ Sección
\Ref, página \Pageref]{coordinate_point}.   Este procedimiento tiene 
una ventaja sobre el
precedente: el punto construido no puede ser ya movido con el ratón;
el punto está inexorablemente atado a su posición.


\subsubsection{Punto Medio}
\drgeniusIcon{fig5}

\drgeniusIndex{Punto}{Medio}{}{}

Crear el punto medio de un par de puntos o la mitad de un segmento.
\begin{enumerate}
  
\item En el primer caso, el usuario selecciona dos puntos.
\item En el segundo caso, el usuario simplemente selecciona un
  segmento
\end{enumerate}.


\subsubsection{Intersección}
\drgeniusIcon{fig6}

\drgeniusIndex{Punto}{Intersección}{}{}

Crear el(los) punto(s) de intersección de dos líneas (objetos
unidimensionales, i.e. recta, semirrecta, segmento, arco de círculo,
círculo o lugar geométrico).  El usuario necesita seleccionar dos
líneas (v.g. arco de círculo y semirrecta).

\subsubsection{Punto Definido por sus Coordenadas}
\drgeniusIcon{fig7}
\label{coordinate_point}

\drgeniusIndex{Punto}{Definido por sus coordenadas}{}{}

Crear un punto definido por sus coordenadas.  El usuario necesita
seleccionar dos números, el primer número seleccionado es la abscisa,
el segundo la ordenada.

\paragraph{¿Cómo colocar un punto con restricciones a sus coordenadas?}

Esta función es muy utilizada cuando deseamos, por ejemplo, construir
el lugar geométrico de un punto.  Esta construcción supone la
existencia de dos valores --~ver \link{Sección Valores Numéricos}[
Sección \Ref, página \Pageref]{numeric_tool} -- el punto es
construido luego de seleccionar esos dos valores.  Los valores pueden
ser independientes o uno depender del otro.

\xname{line_tools}
\subsection{Herramientas de Líneas}


\subsubsection{Recta}
\drgeniusIcon{fig8}

\drgeniusIndex{Recta}{}{}{} \drgeniusIndex{Línea}{}{}{}


Crear una línea recta definida por sus dos puntos.  El usuario
selecciona dos puntos.


\subsubsection{Semirrecta}
\drgeniusIcon{fig9}

\drgeniusIndex{Semirrecta}{}{}{} \drgeniusIndex{Rayo}{}{}{}
% FIXME: NO ESTOY SEGURO  SI PONER RAYO ES BUENO.  HAY QUE CAMBIAR 

Crea una semirrecta (también llamada rayo) definida por dos puntos.
El usuario selecciona dos puntos, el primero es el origen, el segundo
pertenece a la semirrecta.




\subsubsection{Segmento}
\drgeniusIcon{fig10}

\drgeniusIndex{Segmento}{}{}{}


Crea un segmento definido por dos puntos.



\subsubsection{Vector}
\drgeniusIcon{fig11}

\drgeniusIndex{Vector}{}{}{}


Crea un vector definido por dos puntos.  El usuario selecciona dos
puntos, el primer punto es el origen, el segundo es el extremo.

Una vez que el vector es creado, éste puede ser desplazado
independientemente de los dos puntos que le dieron origen.  Esto sigue
siendo cierto para vectores construidos a través de una
transformación. (Ver la sección de Transformaciones en este manual).


\subsubsection{Círculo}
\drgeniusIcon{fig12}

\drgeniusIndex{Círculo}{}{}{}


Crea un círculo.  El usuario puede crear un círculo a partir de varias
opciones:
\begin{enumerate}
\item el centro y un punto del círculo;
\item el centro y un número (el radio del círculo);
\item el centro y un segmento cuya longitud es el radio del círculo.
\end{enumerate}


\subsubsection{Arco de Círculo}
\drgeniusIcon{fig13}

\drgeniusIndex{Arco de círculo}{}{}{}


Crea un arco de círculo definido por tres puntos.  El primer punto
seleccionado es el origen del arco, el tercero es su extremo, el
segundo es un punto sobre el arco.  Los tres puntos seleccionados
formarán parte del arco.



\subsubsection{Lugar Geométrico}
\drgeniusIcon{fig14}

\drgeniusIndex{Lugar Geométrico}{}{}{} \drgeniusIndex{Locus}{}{}{}

Crea un lugar geométrico (locus en latín) dados dos puntos.  El
usuario selecciona dos puntos; uno es un punto libre sobre una línea
(linea o círculo); el otro es un punto que depende del primero (i.e.
cuando uno mueve el primero, el segundo también tiene que moverse).



\subsubsection{Polígono}
\drgeniusIcon{fig15}

\drgeniusIndex{Polígono}{}{}{}


Crea un polígono definido por n puntos.  El usuario selecciona n+1
puntos delimitando el polígono.  El primero y el último seleccionado
deben ser los mismos, esto indica a \drgeo\ que la selección está
terminada.  El objeto polígono no es un objeto como los objetos
unidimensionales: no es posible colocar un punto sobre él o calcular
la intersección entre un polígono y otro objeto unidimensional.  Por
otro lado, es posible aplicar a un polígono una transformación
geométrica (rotación, reflexión, homotecia, etc.)


\xname{transformation_tools}
\subsection{Herramientas de Transformación}

\subsubsection{Línea Paralela}
\drgeniusIcon{fig16}

\drgeniusIndex{Recta}{Paralela}{}{}
\drgeniusIndex{Línea}{Paralela}{}{}


Crea una línea paralela a una dirección y que pase a través de un
punto.  El usuario selecciona un punto y una dirección (i.e. una línea
recta, una semirrecta, un segmento o un vector).


\subsubsection{Línea Perpendicular}
\drgeniusIcon{fig17}

\drgeniusIndex{Recta}{Perpendicular}{}{}
\drgeniusIndex{Línea}{Perpendicular}{}{}
\drgeniusIndex{Recta}{Ortogonal}{}{}

Crea una línea perpendicular a una dirección y que pasa a través de un
punto.  El usuario selecciona un punto y una dirección (i.e.  una
línea recta, una semirrecta, un segmento o un vector).  (Ortogonal es
un sinónimo de Perpendicular)


\subsubsection{Simetría Axial (Reflexión)}
\drgeniusIcon{fig18}

\drgeniusIndex{Transformación del plano}{Simetría}{Axial}{}
\drgeniusIndex{Transformación del plano}{Reflexión}{}{}


Crea la imagen de un objeto a través de una simetría axial (reflexión
en una recta).  El usuario selecciona el objeto a transformar y el eje
de simetría (que debe ser una recta).  Cuando el usuario quiere
construir la imagen de una línea recta, la primera línea recta
seleccionada por el usuario será la recta a reflejar.


\subsubsection{Simetría Central }
\drgeniusIcon{fig19}

\drgeniusIndex{Transformación del plano}{Simetría}{Central}{}
\drgeniusIndex{Rotación}{De 180 grados}{}{}


Crea la imagen de un objeto a través de una simetría central.  El
usuario selecciona los objetos que serán transformados y el centro de
simetría (un punto).  Cuando el usuario quiere construir la imagen de
un punto, el primer punto seleccionado es el punto a transformar.(La
simetría central es equivalente a una rotación de 180 grados).


\subsubsection{Traslación}
\drgeniusIcon{fig20}

\drgeniusIndex{Transformación del plano}{Traslación}{}{}


Crear la imagen de un objeto a través de una traslación.  El usuario
selecciona el objeto que será transformado y el vector de traslación.
Cuando el usuario quiere construir la imagen de un vector, el primer
vector seleccionado es el vector que será trasladado.



\subsubsection{Rotación}
\drgeniusIcon{fig21}

\drgeniusIndex{Transformación del plano}{Rotación}{General}{}

Crea la imagen de un objeto a través de una rotación.  El usuario
selecciona el punto que será rotado, el centro y el ángulo de la
rotación.  Cuando el usuario quiere crear la imagen de un punto, el
primer punto seleccionado es el punto a transformar.

El ángulo puede ser seleccionado a partir de varios tipos de valores~:

\begin{itemize}
\item \textbf{valor numérico}~: el ángulo es expresado en radianes.
  Ejemplos de valores numéricos~: valor libre, un valor devuelto por
  un script Guile de \drgenius, etc.~;
\item \textbf{la medida de un ángulo geométrico formado por tres
    puntos}~: su medida es entonces expresada en grados.  Atención,
  pues en este caso la medida estará en el intervalo [0~;~180]~;
\item \textbf{la medida de un ángulo orientado entre dos vectores}~:
  esta medida es expresada en grados y cubre el intervalo
  ]-180~;~180].
\end{itemize}


\subsubsection{Escala (Homotecia)}
\drgeniusIcon{fig22}

\drgeniusIndex{Transformación del plano}{Homotecia}{}{}
\drgeniusIndex{Transformación del plano}{Escala}{}{}


Crea la imagen de un objeto a través de una transformación de escala
(es decir, homotecia).  El usuario selecciona el objeto a transformar,
el centro de homotecia, y el factor (i.e. un número).  Cuando el
usuario quiera crear la imagen de un punto, el primer punto
seleccionado es el punto a transformar.  (Por ejemplo, si se desea
hacer un polígono un tercio de grande, se selecciona un punto --centro
de homotecia--, el polígono, y el valor 0.33333 )



\xname{numeric_tools}
\subsection{Herramientas Numéricas}


\subsubsection{Distancias, Longitudes \& Números}
\drgeniusIcon{fig23}
\label{numeric_tool}

\drgeniusIndex{Número}{}{}{} \drgeniusIndex{Recta}{Pendiente}{}{}
\drgeniusIndex{Línea}{Pendiente}{}{}
\drgeniusIndex{Recta}{Distancia}{}{}
\drgeniusIndex{Línea}{Distancia}{}{}
\drgeniusIndex{Círculo}{Perímetro}{}{}
\drgeniusIndex{Segmento}{Longitud}{}{}
\drgeniusIndex{Vector}{Norma}{}{} \drgeniusIndex{Vector}{Longitud}{}{}
\drgeniusIndex{Arco de círculo}{Longitud}{}{}
\drgeniusIndex{Número}{Valor libre}{}{}


Crea un valor numérico.  El valor numérico puede ser computado o
editado por el usuario dependiendo de lo que  seleccione:
\begin{enumerate}
\item dos puntos: la distancia entre dos puntos;
\item un segmento: la longitud de este segmento;
\item un vector; la magnitud de ese vector (también llamada norma del
  vector);
\item un círculo: el perímetro del círculo;
\item un arco de círculo; la longitud del arco;
\item una línea recta: la pendiente de la recta;
\item una línea recta y un punto: la distancia entre la línea y el
  punto
\item un \textbf{click directamente sobre el fondo de la figura} 
  permite al usuario entrar un valor nuevo
  (i.e. un valor numérico libre)
\end{enumerate}

Esta última posibilidad es muy interesante en ciertas situaciones.
Por ejemplo, ella permite fijar una longitud, el radio de un círculo,
la medida de un ángulo (en radianes) o las coordenadas de un punto.
Estos valores numéricos pueden ser enseguida utilizados por las
herramientas de construcción de círculos, de rotación de objetos o
para la creación de puntos dadas sus coordenadas.



\subsubsection{Ángulo}
\drgeniusIcon{fig24}

\drgeniusIndex{Ángulo}{Geométrico}{}{}{}
\drgeniusIndex{Ángulo}{Orientado}{}{}{}


Calcula la magnitud de un ángulo definido por tres puntos o dos
vectores.  En el primer caso, el ángulo se considera no orientado
(i.e. un ángulo geométrico con valores en el intervalo [0~;~180°].  En
el segundo caso, el ángulo se considera orientado y toma valores en el
rango ]-180~;~180].



\subsubsection{Coordenadas}
\drgeniusIcon{fig25}

\drgeniusIndex{Punto}{Coordenadas}{}{}
\drgeniusIndex{Vector}{Coordenadas}{}{}


Al selecciona un punto o un vector, nos da como resultado las
coordenadas del punto o nos da las coordenadas del vector (coordenadas
del punto final menos coordenadas del punto inicial).  Esta
herramienta crea tanto a la abscisa como a la ordenada.


\subsubsection{Script Guile de \drgenius}

\label{script-tool}
\drgeniusIcon{fig49}

\drgeniusIndex{Script}{}{}{}

Crea un script Scheme de \drgeo (i.e. un script en el lenguaje
Scheme).  El script recibe una entrada de \emph{n} objetos.  Siempre
dará como resultado un número, que será presentado en la figura.  Un
script puede ser usado para obtener efectos colaterales o por el valor
que da como resultado. Los Scripts Scheme de \drgeo\ están cubiertos
en detalle en el \link{Capítulo Construcciones Avanzadas }[Capítulo
\Ref]{advancedFeatures} y exactamente en la \link{Sección
  Script}[Sección \Ref, página \Pageref]{script}.





\xname{macroconstruction_tools}
\subsection{Herramientas para Macros de Construcciones}

\drgeniusIndex{Macro}{}{}{}


\subsubsection{Crear una Macro}
\drgeniusIcon{fig26}

Extrae una secuencia de construcción dada en una figura y la convierte
en la macro de una construcción.



\subsubsection{Ejecutar una Macro}
\drgeniusIcon{fig27}

Ejecuta (i.e. ``lanza'' o ``corre'') una macro previamente construida.
La macro puede haber sido recién creada o puede ser cargada desde un
archivo.



\drgeniusNote{Las construcciones de Macro están expuestas en
  la\link{Sección Construcción de Macros }[\Ref, página
  \Pageref]{macroConstruction}.}


\xname{other_tools}
\section{Otras Herramientas}


\subsection{Árbol Lógico de Construcción}

\drgeniusIndex{Histórico}{Árbol lógico}{}{}

Cada figura está asociada a un árbol lógico de construcción.  Este
árbol es cronológico; es decir que recuerda, desde la parte alta hasta
la parte baja, el orden de construcción de la figura.  Ciertas
entradas del árbol pueden ser desplegadas para que aparezcan los
antecedentes --es decir, los objetos originadores (objetos padres)--
utilizados en la definición del objeto.

Inicialmente el árbol está oculto (enmascarado); de hecho está
replegado en el borde izquierdo de la ventana.  Para hacerlo aparecer
hace falta desplegarlo con la ayuda del ratón.  Mover el puntero del
ratón hacia el borde izquierdo de la ventana de \drgeo\,. Cuando éste
se transforme en ``$<->$'', presionar el botón del ratón y manteniéndolo
presionado mueva el ratón a la derecha.



\subsection{Mover la Figura}

\drgeniusIndex{Figura}{Mover}{}{}

La figura puede ser movida presionando al mismo tiempo la tecla
``Ctrl'' y el botón izquierdo del ratón al moverlo hacia donde se desea
mover la figura.



\subsection{Mover un Objeto}
\drgeniusIcon{fig28}

\drgeniusIndex{Objeto}{Mover}{}{}


Un objeto puede ser movido al jalarlo con el ratón.  La figura es
redibujada con respecto a las nuevas posiciones.  Casi cualquier tipo
de objeto geométrico puede ser movido.  Cuando es necesario,
\drgeo\ mueve los puntos libres asociados con la figura.  Por
ejemplo, cuando el usuario mueve una línea definida por dos puntos
libres, \drgeo\  moverá los dos puntos simultáneamente..



\subsection{Borrar un Objeto}
\drgeniusIcon{fig30}

\drgeniusIndex{Objeto}{Borrar}{}{}


Los objetos en la figura pueden ser borrados cuando se activa este
menú.  En cualquier momento posterior, el usuario puede anular el
borrado usando la función ``deshacer'' de la barra de íconos o del menú
\drgeniusMenu{Editar->Deshacer}.  Inicialmente el número de 
anulaciones posibles es
de 10, pero el usuario puede ajustar este valor a través del diálogo
de preferencias (menú\drgeniusMenu{Editar->Preferencias}).




\xname{editing_object_styles}
\subsection{Editar la Apariencia  de un Objeto}
\drgeniusIcon{fig29}

\drgeniusIndex{Editar}{Apariencia}{}{}

\drgeniusIndex{Objeto}{Renombrar}{}{}

\drgeniusIndex{Objeto}{Ocultar}{}{}
\drgeniusIndex{Objeto}{Enmascarar}{}{}


Cada objeto geométrico posee atributos de apariencia como son el
color, el grosor, el nombre, el tamaño o la forma.  Además, es posible
ocultar temporalmente un objeto sin borrarlo.  Por ejemplo, puede ser
útil ocultar construcciones intermedias sin borrarlas.  Todos estos
atributos puedes ser ajustados desde un diálogo activado cuando el
usuario selecciona un objeto en la figura.

\drgeniusIndex{Punto}{Renombrar}{}{}

El diálogo de apariencia para puntos se relaciona con cualquier tipo
de objeto de punto.  Desde él es posible ajustar el color, la forma,
el tamaño, nombre y visibilidad.  \drgeniusFigure{El diálogo de estilo
  para un objeto tipo punto}{fig31}

El diálogo de apariencia para líneas se refiere a líneas rectas,
semirrectas (rayos), segmentos, vectores, círculos, arcos de círculos,
lugares geométricos.  Desde él, es posible ajustar el color, el
grosor, el nombre y su visibilidad.  Cuando una recta, una semirrecta,
un vector o un segmento son definidos por dos puntos que tienen
nombres no vacíos, entonces el nombre de la recta es automáticamente
deducido a partir de los nombres de los puntos que la originan.  En
este caso el usuario no puede renombrar a la recta.


\drgeniusFigure{El diálogo de apariencia para objetos tipo
  línea}{fig32}

El diálogo de estilo para los objetos tipo numérico y tipo polígono se
refiere a todo tipo de valores (editados por el usuario, calculados
por un Script Scheme de \drgeo\ o valores que representan una medida
de un objeto geométrico) y de formas de polígono. (Notar que dos
polígonos pueden tener colores distintos; podemos cambiarles el color)

\drgeniusFigure{El diálogo de estilo para objetos numéricos y tipo
  polígono.}{fig33}




\T \clearpage


\subsection{Editando Propiedades de Objetos}
\label{property-item}
\drgeniusIcon{fig52}


\drgeniusIndex{Editar}{Propiedades}{}{}
\drgeniusIndex{Editar}{Punto}{}{} \drgeniusIndex{Editar}{Script}{}{}
\drgeniusIndex{Editar}{Valor}{}{}



Ciertas propiedades de los objetos son ajustables por el usuario.
Cuando el usuario hace click en tales objetos, un diálogo apropiado
aparece.  De hecho, los siguientes objetos poseen propiedades
ajustables por el usuario:

\begin{enumerate}
\item punto libre~: la abscisa y la ordenada pueden ser editadas;\\
  \drgeniusFigure{Editar las coordenadas de un punto libre}{fig34}
  
  

\item valor libre~: su valor puede ser editado\\
  \drgeniusFigure{Editar valor libre}{fig36}
  
  

\item script~: su código puede ser editado (El código está escrito
 en el lenguaje Scheme, que es un dialecto del lenguaje Lisp)\\
  \drgeniusFigure{Editando un script}{fig35}

\end{enumerate}

\T \clearpage



\subsection{Activar un Enrejado(Rejilla)}

\drgeniusIndex{Figura}{Activar}{Enrejado(rejilla)}{}
\drgeniusIndex{Enrejado}{Activar}{}{}
\drgeniusIndex{Rejilla}{Activar}{}{}


Es posible mostrar un enrejado unitario dentro de cualquier figura de
\drgeo.  El comando es accesible desde el menú
\drgeniusMenu{Editar->Mostrar u ocultar rejilla}.  Puede ser también
activado con la tecla \drgeniusMenu{Ctrl-G}.  Si el comando es
reactivado, el enrejado es ocultado.  El enrejado es unitario: cada
subdivisión representa una unidad.  Por último, si el enrejado está
activado al momento de guardar la figura; éste también será guardado
junto con ella.



\section{Preferencias de Usuario}

\xname{default_behaviour}
\subsection{Comportamiento Predeterminado}
\label{default_behaviour}

\drgeniusIndex{Editar}{Preferencias predeterminadas(default)}{}{}

El comportamiento predeterminado de \drgenius\ puede ser modificado de
varias maneras. Para ajustar las preferencias, el usuario va al
elemento del menú \drgeniusMenu{Editar->Preferencias...} para abrir el
diálogo de preferencias.

\drgeniusFigureSize{Preferencias de las figuras geométricas}{fig38}{8}

El diálogo se compone de dos partes~:
\begin{enumerate}
\item La primera parte trata sobre propiedades de las figuras
  geométricas.  Las distintas opciones permiten al usuario dar las
  reglas predeterminadas para cada tipo de objeto (geométrico o
  numérico).  Estas reglas se refieren a la apariencia de los objetos.
\item La segunda parte trata sobre preferencias globales~:
 \begin{itemize}
 \item El nivel para Deshacer/Rehacer.
 \item El nombre de la figura predeterminado que se usará cuando una
   nueva figura es creada.  El\, \%d es remplazado por un valor entero
   que es manejado por \drgeo; este valor es incrementado con cada
   nueva figura creada.
 \item El navegador de Internet predeterminado para visualizar la
   ayuda en línea~.
 \item Los nombres predeterminadas para ser utilizados cuando se
   guarde una figura o una sesión~.
 \item Los nombres predeterminados para exportar en los formatos
   \LaTeX~ y PostScript~.
 \end{itemize}
\end{enumerate}

\drgeniusIndex{Editar}{Estilo predeterminado (por default)}{}{}
\drgeniusIndex{Editar}{Preferencias predeterminadas (por
  default)}{Deshacer/Hacer}{} \drgeniusIndex{Editar}{Preferencias
  predeterminadas}{Nombres}{} \drgeniusIndex{Ayuda}{Preferencias
  predeterminadas}{Navegador}{}


\subsection{Otras Preferencias}

Además del comportamiento predeterminada de \drgenius, el usuario
puede cambiar el nombre de una figura desde el elemento menú
\drgeniusMenu{Editar->Renombrar}.

\drgeniusFigure{Renombrar la vista de una figura}{fig39}


\chapter{Características Avanzadas}
\label{advancedFeatures}

En este capítulo presentamos características usadas para extender las
características de \drgenius\ o adaptarlo a una situación pedagógica
dada.

La primera es la macro de una construcción geométrica. Ella permite la
extracción de la lógica de una construcción en un registro.  Ya hecho
esto, este registro se puede repetir o guardar en un archivo que lleve
la extensión \textbf{.mgeo}, y puede ser abierto cuando sea
necesario..

Los Scripts Scheme de \drgeo\ --~\drgeo\ Script en inglés; abreviado
DGS ~-representan otra forma de extender \drgenius.  Estos scripts son
en realidad elementos de figuras como cualquier otro elemento
geométrico.  Ellos reciben como entrada las referencias a los
elementos de figura seleccionados por el usuario y dan como resultado
un valor numérico, que se inserta en la figura .  Son, en efecto,
funciones \footnote{O procedimientos para los que se iniciaron en el
  lenguaje Pascal.} injertadas en una figura, y son evaluadas en cada
actualización de la figura (i.e. cada vez que el programa requiere
volver a dibujar la figura)
 
Los Scripts Guile de \drgeo\ pueden ser útiles por el valor que dan
como resultado o por sus efectos colaterales, dependiendo de lo que el
usuario desee hacer.

Extendiendo la funcionalidad de los Scripts de DrGeo, \drgeo\ puede ir
todavía más allá, con la Figura Scheme de \drgeo: Ésta consiste en un
archivo de texto que contiene una figura geométrica completamente
escrita en el lenguaje de programación Scheme.  La potencia de este
modo de crear una figura radica en permitir una construcción usando el
tipo de programación llamado funcional \footnote{Permite la recursión, 
por ejemplo.}, y no solamente declarativo, como es el caso de la
interfaz gráfica.  De este modo, \drgeo\ se convierte en un programa
que puede ser utilizado para la introducción a la programación.

Por último, la adaptación de la interfaz de usuario de \drgeo\ permite
al maestro preparar una sesión de trabajo con varios documentos en los
que ciertas funciones han sido bloqueadas a través de una contraseña
(password).  El objetivo de esto es permitir el uso del programa en
ciertas situaciones pedagógicas dadas.

\xname{using_macro}
\section{Macros de Construcciones}
\label{macroConstruction}

Una Macro para una una construcción es una especie de procedimiento
que recibe como entrada a elementos de figuras y devuelve uno o más
elementos de figuras, construidas por la macro.  Una macro es 
construida a partir de un modelo definido por el usuario.  Esto 
significa que el usuario
tiene que elaborar la serie de pasos para la construcción sólo una
vez. A partir de entonces puede ordenar a \drgenius\ grabar esta 
serie de
pasos en una macro.  Esta macro puede ser
entonces guardada en un archivo con extensión \textbf{.mgeo}.

Para grabar una serie de pasos para la construcción, \drgeo\ necesita
saber cuáles son los elementos iniciales de la serie y los elementos
que se van a dar como resultado.  Desde luego que los elementos que se
den como resultado deben depender \textit{solamente} de los elementos
iniciales, \footnote{Esta restricción ha sido posteriormente
  flexibilizada, lo cual permite ir más allá con las macros.  Ver
  \link{Crear un polígono regular}[ Sección \Ref, página
  \Pageref]{polygon_macro}.}, de otro modo \drgenius\ no podría
deducir los elementos producidos a partir de los dados.



De este modo, \drgenius\ deduce la lógica de la serie de pasos de la
construcción y la guarda en una macro.  El usuario puede ejecutar esta
macro con sólo especificar los elementos de entrada (que deben
coincidir con los parámetros que necesita la macro) en la figura.
Entonces la macro crea los elementos especificados como resultado.

\drgeniusNote{Los elementos invisibles de las figuras intermedias
  también son construidos por la macro.  Estos elementos son
  necesarios para crear los elementos resultantes}


Para ilustrar la característica de macros para construcciones,
supondremos que el usuario desea grabar la construcción de un círculo
que pasa por tres puntos.  Supondremos, además, que se desea obtener
el centro del círculo.



\drgeniusFigureSize{Nuestra figura inicial}{fig40}{4}

\drgeniusIndex{Macro}{Crear}{}{}


Antes de la creación de la macro, el usuario necesita construir la
figura final, ésta es usada como un molde con el cual se crea la
macro.

\drgeniusFigure{Nuestra figura con la construcción resultante}{fig41}



\subsection{Crear una Macro}

En esta etapa, la serie de pasos para la construcción ya está hecha.
Ahora el usuario necesita ordenar a \drgeo\ que quiere una macro a
partir de esta serie de pasos.  Puede llamar la función
\drgeniusMenu{Construir una macro} de la barra de íconos
\drgeniusIcon{fig26} o del menú contextual que aparece al pulsar el
botón derecho sobre el fondo de la figura..

Desde el menú de creación de la macro, el usuario selecciona los
parámetros de entrada y de salida, el nombre y la descripción de la
macro.

\drgeniusFigureSize{La primera parte del menú de creación de la
  macro}{fig42}{6}


La segunda parte del diálogo sirve para seleccionar los parámetros de
entrada.  En nuestro ejemplo, estos son los tres puntos iniciales.  El
usuario sólo necesita llegar a este lugar y seleccionar los tres
puntos en la figura.  Los elementos seleccionados parpadearán.

\drgeniusFigureSize{Segunda parte, los tres puntos ya están
  seleccionados}{fig43}{6}


En la tercera parte del diálogo, el usuario selecciona los parámetros
de salida.  En nuestro ejemplo, deseamos que el círculo y el centro
sean los parámetros de salida para la macro.  El usuario procede
entonces como en el caso de los parámetros de entrada par
seleccionarlos.


\drgeniusFigureSize{La tercera página, el círculo y su centro ya están
  seleccionados}{fig44}{6}

En la cuarta parte del diálogo, el usuario escribe el nombre y la
descripción de la macro.  Estos datos son desplegados cuando el
usuario ejecuta una macro, de modo que ayuda a distinguir una macro de
otra.

\drgeniusFigureSize{La cuarta parte, el nombre y la descripción de la
  macro}{fig45}{6}



En la última parte del diálogo (la quinta), el usuario crea la macro
haciendo click sobre el botón \texttt{Aplicar}(finalizar la
construcción).  Alternativamente, el usuario puede regresar a las
partes previas para ajustar los parámetros de la macro.


\drgeniusNote{Si los parámetros de entrada y de salida no coinciden
  (\drgenius\ no puede extraer la lógica de la construcción), la macro
  no puede ser construida.  En este caso, el usuario necesita
  reconsiderar la selección de los parámetros de entrada y de salida.
  Puede regresar a la segunda o a la tercera parte del menú de
  creación para ajustar sus elecciones.}


En este momento la macro está construida y grabada en \drgenius.  En
la siguiente sección, veremos cómo usarla.


\subsection{Ejecutar una Macro}
\drgeniusIndex{Macro}{Ejecutar}{}{}

\subsubsection{A Través de la ventana de Diálogo}
\drgeniusIndex{Macros}{Ejecutar}{Ventana de Diálogo}{}


Para ejecutar la macro de una construcción, el usuario llama la
función \drgeniusMenu{Ejecutar macro previamente construida} de la
barra de íconos \drgeniusIcon{fig27} o desde el menú contextual que se
obtiene pulsando el botón derecho.  Una ventana de diálogo que
describe el procedimiento se inserta entonces.

Desde la ventana de diálogo, el usuario selecciona la macro.  En la
segunda parte selecciona la macro de la lista en la parte más alta
del diálogo.  Una vez que la macro fue seleccionada, puede hacer click
directamente en los parámetros de entrada en la figura.  Tan pronto
como todos los parámetros de entrada sean seleccionados, la macro es
ejecutada y los elementos de salida aparecen.

\drgeniusFigureSize{El usuario selecciona los parámetros de entrada
  directamente en la figura}{fig46}{6}

En nuestro ejemplo, la macro necesita tres parámetros de entrada (tres
puntos) y crea a partir de ellos un círculo y un punto.  Para ejecutar
nuestra macro, necesitamos una figura con al menos tres puntos.

\drgeniusFigureSize{Una figura con tres puntos}{fig47}{4}

Una vez que nuestra macro es ejecutada usando esos tres puntos,
obtenemos el círculo deseado y también su centro.


\drgeniusFigureSize{La figura resultante con el círculo y su
  centro}{fig48}{4}

\subsubsection{Con la ayuda del menú Macros}
\drgeniusIndex{Macro}{Ejecutar}{Menú}{}

Existe otro procedimiento --más rápido-- para ejecutar una macro.  La
barra de menú principal de \drgeo\ contiene un menú
\drgeoMenu{Macros}.  Este menú está poblado con los
nombres de las macros cargadas en la memoria del programa.  Para
ejecutar una macro, el usuario selecciona directamente la macro de su
preferencia.

Más aún, al pasar el ratón por cada item del menú,
aparece una pequeña nota informativa con la descripción
de la macro.  El usuario puede de este modo tener 
rapidamente una explicación de cada una de las
macros. 

\drgeniusFigureSize{Ejecutar una macro directamente desde el menú
  \drgeoMenu{Macro-constructions}}{fig62}{6}



\T \clearpage


\xname{drgenius_guile_script}
\section{Script Scheme de \drgeo}
\label{script}

\drgeniusIndex{Script}{Introducción}{}{}


\drgenius\ es compatible con Guile.  Esto quiere decir que es posible
ejecutar un script del lenguaje Scheme en \drgeo.  Pero, ¿qué es Guile?
Leemos en el manual de Guile~:

\begin{quote}{\em  Guile es un intérprete del lenguaje de programación 
    Scheme, concebida para su uso en una gran variedad de ambientes }
\end{quote}
        

Las siguientes citas describen de modo preciso como es Guile usado
dentro de \drgenius:

\begin{quote}{\em
    Como un shell, Guile puede correr interactivamente, leyendo
    expresiones del usuario, evaluándolas, y mostrando los resultados,
    o como un intérprete para un script, leyendo y ejecutando código
    de Scheme a partir de un archivo.  Por otro lado, Guile también
    está disponible como una biblioteca (library) de objetos, lo que
    permite a otras aplicaciones fácilmente incorporar un intérprete
    de Scheme completo.  Un programa puede usar Guile como un lenguaje
    de extensión, un lenguaje de configuración simple y poderoso, o
    como un ``pegamento'' multipropósito que conecta primitivas
    elaboradas dentro del programa.  }
\end{quote}

En \drgenius, una API (Interfaz de programa para una aplicación,
--Application Program Interface-- en Inglés) está disponible a partir
del intérprete Guile.  Esta API es un conjunto de ``enlaces'' en la
maquinaria geométrica.  Por lo tanto, el usuario puede escribir un
script para manipular elementos de figuras (geométricas y numéricas).
Asimismo, ya que los scripts son figuras como cualquier otra, los
scripts no necesitan ser guardados en un archivo separado; son
guardados en el archivo de la figura.  En lo que sigue usaremos el
acrónimo DGS para referirnos a un Script Scheme de \drgenius\ 
(``\drgenius\ Script'').


\subsection{DGS a Través de Ejemplos}

\drgeniusIndex{Script}{Ejemplos}{}{}


La herramienta para crear un DGS está disponibe al seleccionar la
sección Valor Numérico dentro del menú contextual que se obtiene al
hacer click con el botón derecho del ratón en el fondo de la figura.
Un DGS puede recibir de 0 a \textit{n} parámetros de entrada.



Después de haber escogido el DGS, basta hacer click en los objetos
geométricos (o numéricos) que constituirán los parámetros de entrada.
Al terminar de escoger los parámetros de entrada, se debe hacer click
en un área libre del fondo de la figura; con ello, el script sera
visible.


En lo que sigue nos proponemos trabajar con algunos ejemplos de DGS
que permitirán comprender fácilmente su uso y su potencialidad.

Los DGS, como las macros, dan una dimensión particular a \drgenius, Le
permiten, junto con las macros\footnote{Las macros constituyen el
  aspecto geométrico, en tanto que los DGS abarcan también el aspecto
  numérico; pero no sólo eso, pues nos permiten utilizarlos con un
  espíritu de programador (``hacker'', en inglés, sería un término más
  apropiado)}, llevar a cabo cosas que los autores del programa no
incorporaron o no quisieron incorporar: ``Ir hacia donde ellos no
fueron o no quisieron ir''.

Es también importante comprender que la mayor parte de las funciones
del intérprete GNU Guile están disponibles a través del DGS.  Esto es
particularmente cierto para las librerías de funciones\footnote{En
  particular, las funciones matemáticas} que utilizaremos ampliamente.




\paragraph{DGS sin parámetros de entrada}

El procedimiento para crear un script sin parámetros de entrada es el
siguiente~:

\begin{enumerate}
\item Después de haber escogido \link{Script Guile de \drgenius\ }[
  Sección \Ref, página \Pageref]{script-tool}, hacer click 
 \emph{directamente}en el lugar
  de la figura donde se desee colocar el script.  Como deseamos que el
  script no tenga parámetros de entrada, debemos prestar atención y no
  hacer click erróneamente en algún objeto geométrico; no sea que
  \drgenius\ considere ese objeto como un parámetro de entrada
  \footnote{Si por accidente hacemos click sobre un objeto, el
    seleccionar de nuevo la herramienta Script en el menú bastará para
    anular nuestro error}.
  
\item Una vez que el DGS ha sido creado, aparece en la figura la
  cadena de caracteres ``Dr.~Genius''.  Todo script recién creado
  contiene un comando predeterminado que muestra ese mensaje.  Usted
  puede editarlo seleccionando \link{propiedades del objeto}[ Sección
  \Ref, página \Pageref]{property-item}.
  
\item Una vez que esta herramienta ha sido seleccionada, haga click
  sobre el script --o para ser más precisos sobre su valor~-- de su
  elección.  Una ventana se abrirá con el contenido del script y le
  permitirá editarlo.  En lo que sigue, usaremos ese diálogo para
  escribir nuestros ejemplos.
\end{enumerate}


\subparagraph{Un generador de números aleatorios y otros ejemplos~:}

\drgeniusIndex{Script}{\texttt{números aleatorios}}{}{}


Si usted desea un generador de números aleatorios, nada es más simple:
simplemente su script contiene únicamente la siguiente línea (recuerde
hacer click en aplicar y luego cerrar...):

\begin{verbatim}
(random 10)
\end{verbatim}


Así, cada vez que se dibuja la figura, este script devuelve un número
entero aleatorio en el intervalo [0~;~10[ (es decir, [0~;~10) )



Si usted prefiere un número real en el intervalo [0~,~1), utilice el
siguiente script:

\begin{verbatim}
(random:uniform)
\end{verbatim}

\drgeniusNote{Algunas precisiones~:

\begin{itemize}
\item El valor devuelto por el script es el valor calculado por la
  última línea del script.  En nuestros ejemplos, se trata del valor
  devuelto por la función que usamos.
\item La última línea debe devolver un número real; de otro modo
  \drgenius\ imprimirá ``Resultado no imprimible''.
\item Si lo que se desea es mostrar el valor de una variable, basta
  poner esa variable en la última línea.
\end{itemize}
}

\subparagraph{Cálculo de algunas constantes comunes~:}

Para calcular el valor aproximado de $\pi$~:
\begin{verbatim}
(acos -1)
\end{verbatim}

O de $e$~:
\begin{verbatim}
(exp 1)
\end{verbatim}


Los valores devueltos por estos DGS pueden ser inmediatamente
utilizados como todos los demás valores numéricos que \drgenius\ 
genera.  Por todo lo anterior, los DGS son verdaderamente nuestros
aliados. Pero eso no es todo, los DGS pueden hacer muchas más cosas
interesantes cuando reciben parámetros de entrada.  Enseguida veremos
cómo.



\paragraph{DGS con al menos un parámetro de entrada}

\drgeniusIndex{Script}{Con parámetros de entrada}{}{}

El procedimiento para crear un DGS con un parámetro de entrada es
esencialmente el mismo.  Justo después de haber seleccionado la
herramienta script, basta hacer click sobre el objeto que será el
parámetro de entrada y enseguida hacer click sobre el fondo de la
figura, en el lugar donde se desee tener al nuevo script.

Enseguida, dentro del script, el parámetro de entrada será referido
por la variable $a1$.  En caso de tengamos dos o más parámetros de
entrada, utilizaremos, respetando el orden en que fueron
seleccionados, las variables $a1, a2, a3, a4,$ etc. dependiendo del
número de objetos seleccionados.

Dependiendo del objeto que seleccionemos, diversos métodos estarán
disponibles para obtener valores, como pueden ser coordenadas,
longitud, etc.  Estos métodos son mostrados en la Sección
\link{Métodos de referencia para un DGS}[ \Ref, página
\Pageref]{api-dgs}.


En lo que sigue, expondremos gradualmente un ejemplo no muy complicado
en que construiremos la curva de una función así como la tangente en
un punto de la curva que podremos mover.

La figura final es mostrada por \drgeo.  Ésta se llama
\xlink{slope.fgeo}[(/usr/share/drgeo/examples/figures/slope.fgeo)]{/usr/share/drgeo/examples/figures/slope.fgeo}
\drgeniusFigureSize{La figura que obtendremos}{fig55}{8}


\subparagraph{Definir un valor en un intervalo dado~:}

\drgeniusIndex{Script}{Intervalo}{}{}




En una nueva figura, empezamos colocando dos puntos y el segmento que
ellos determinan.  Sobre este segmento colocamos un punto libre al que
llamaremos ``¡Muéveme!''(``Move me!'' en inglés).  Este punto nos
sirve para determinar un valor numérico que identifica la posición del
punto dentro del segmento; esto lo lograremos dentro del script.

En seguida crearemos un script que tiene como único parámetro de
entrada el punto ``¡Muéveme!''.



Ya que $a1$ es la variable en el script del punto ``¡Muéveme!'', el
script siguiente (que llamaremos Xo) nos dará un valor decimal
comprendido entre [-10~;~10]~.

\begin{verbatim}
(define x (getAbscissa a1))
(* 20  (- x 0.5))
\end{verbatim}



% I FOLLOWED THE ITALIAN VERSION IN THE FOOTNOTE HERE.

Cabe aclarar algunas cosas.  En la primera línea, \texttt{(getAbscissa
  a1)} permite obtener la ``abscisa curvilínea'' del objeto al que se
refiere $a1$\footnote{En este punto $x$ toma un valor entre 0 y 1
  inclusive.  La ``abscisa curvilínea'' del objeto es 0 en un extremo,
  y va creciendo hasta ser 1 en el otro extremo; es 0.5 en la mitad,
  0.25 a un cuarto, etc. } .  En la segunda línea calibramos el valor.
En este caso la expresión significa $20 \times ( x -0.5)$.  Dado que
ésta es la última línea del script, el resultado de esta última
operación será el valor que el script devuelva, y será un número
decimal en el intervalo $[-10;+10]$ como se deseaba\footnote{Ya que
  $x$ estaba entre 0 y 1, $20 \times ( x -0.5)$ estará entre -10 y
  10.}.

Finalmente, llamemos este script Xo. (Esto se puede hacer en el menú
contextual: seleccione otros, luego apariencia, y haga click en el
script para ponerle nombre).



\subparagraph{Dibujar la gráfica de una función~:}
\drgeniusIndex{Lugar geométrico}{Script}{}{}

% I DECIDED NOT TO TRANSLATE nous servira d'abscisse BECAUSE IT COULD
% LEAD TO SOME CONFUSSION WITH THE CURVILÍNEAR ABSCISSA.
% I FOLLOWED THE ITALIAN VERSION HERE

El valor obtenido por el script precedente nos servirá, a través de
otro script, para calcular la imagen del punto bajo la función $x
\rightarrow cos(x)$. Este segundo script tiene como parámetro de
entrada al script Xo.

\begin{verbatim}
(define x (getValue a1))
(cos x)
\end{verbatim}




Subrayemos que en \texttt{(getValue a1)} el objeto al que se refiere
$a1$ no es el punto ``¡Muéveme!'', sino el script Xo, y que no estamos
obteniendo la ``abscisa curvilínea'' de un punto, sino el valor de un
número (en este caso del script Xo, que dentro del segundo script es
llamado $a1$).  Llamamos a este script Yo

% I ADDED THE NEXT PARAGRAPH.

Por ejemplo, si el punto ``¡Muéveme!'' estaba a la mitad entonces su
``abscisa curvilínea'' es 0.5, de modo que Xo toma el valor $20 \times
( 0.5 -0.5)=0$, y Yo toma el valor cos(0)=1.



% I ADDED SOME SENTENCES IN PARENTHESIS TO CLARIFY SOME THINGS AND
% TO REMIND THE READER HOW TO CREATE Mo AND THE LOCUS.

Enseguida crearemos el punto Mo de coordenadas (Xo~;~Yo).  Es un punto
de la curva de la función $x \rightarrow cos(x)$.  Para dibujar la
porción de la gráfica con dominio [-10~;~10], crearemos el lugar
geométrico del punto Mo cuando el punto ``¡Muéveme'' describe el
segmento. Con ello obtendremos la gráfica!(Recordar que para crear Mo,
hay que seleccionar, en el menú contextual, punto, coordenadas y luego
hacer click en los scripts que dan las coordenadas.  Para lograr el
lugar geométrico, recordar seleccionar en el menú contextual curva,
lugar geométrico y luego seleccionar los puntos ``¡Muéveme!'' y Mo.)



\subparagraph{Calcular y dibujar la tangente a la gráfica en un 
punto~:}

\drgeniusIndex{Script}{Ejemplos}{Tangente a una curva}{}

Para dibujar la tangente en Mo=(Xo,Yo), hace falta tener la pendiente
en ese punto.  Usando Cálculo Diferencial, sabemos que la pendiente
está dada por la derivada, que en este caso es $x \rightarrow -sin(x)$
evaluada en el punto Xo. De modo que crearemos un script que tiene
como parámetro de entrada al script Xo~:

\begin{verbatim}
(- 0 (sin (getValue a1)))
\end{verbatim}



La notación prefija (i.e ``* 2 3'' en vez de ``2 * 3'') utilizada por
Scheme/Guile puede parecer poco intuitiva, pero es cuestión de
simplemente acostumbrarse a ella; es simplemente decir ``El producto
de dos y tres'' en lugar de ``dos por tres''.

Llamemos al script recién creado ``Pendiente en el punto Mo''.

Resta, pues dibujar la tangente.  Para esto calcularemos, primero, las
coordenadas de un segundo punto --~M1~-- de esa recta.

Comencemos por su abscisa (No confundir con la ``abscisa
geométrica''); por ejemplo: $X_{1} = X_{0} + 2$.  Para hacer esto
crearemos un script que tendrá como parámetro de entrada al script
Xo~, y al que llamaremos X1:



\begin{verbatim}
(define x1 (getValue a1))
(+ x1 2)
\end{verbatim}

Encontremos en este momento la ordenada del punto M1.  Para ello
necesitamos:

\begin{itemize}
\item Mo (referencia $a1$)~;
\item la pendiente en Mo ($a2$)~;
\item la abscisa X1 ($a3$).(No confundir con ``la abscisa
  geométrica'')
\end{itemize}

Después de seleccionar como parámetros de entrada al punto Mo, a la
pendiente en Mo(que llamamos ``Pendiente en el punto Mo'', ``Slope at
Mo'' en inglés), y a X1, determinamos la ordenada de M1, que
llamaremos Y1, a través del siguiente cálculo:

$Yo + m \times (X1 - X0)$~:

\begin{verbatim}
(define x0 (car (getCoordinates a1)))
(define y0 (cadr (getCoordinates a1)))
(define m (getValue a2))
(define x1 (getValue a3))
(+ (* m (- x1 x0)) y0)
\end{verbatim}



En relación con la función \texttt{(getCoordinates a1)} en la que $a1$
debe ser una referencia a un objeto de tipo punto, el método devuelve
una lista que contiene las coordenadas del punto, en este caso Mo. La
instrucción \texttt{car} permite extraer el primer elemento de esta
lista; la instrucción \texttt{cadr}, el segundo. El resto del script
debe resultar claro.



Habiendo nombrado este último script Y1, construimos el punto
M1=(X1~;~Y1), y, para terminar, construimos la tangente (MoM1). (Para
esto ya no necesitamos scripts; podemos usar el menú, escogiendo punto
dadas sus coordenadas y la recta dados dos puntos).




Por supuesto, habría sido posible utilizar unos dos o tres scripts en
lugar de la gran cantidad que usamos.  Sin embargo, esperamos que
estos pequeños ejemplos logren en usted el deseo de experimentar por
usted mismo los DGS.



\subsection{Métodos de Referencia para los Scripts de  \drgeo\  }
\label{api-dgs}




Las secciones siguientes contienen la descripción de los métodos
disponibles para los DGS.  Estos métodos están clasificados de acuerdo
al tipo de objeto geométrico o numérico.


% I FOLLOWED THE ITALIAN VERSION IN TERMS OF THE SYNTAX.


\subsubsection{Punto}



\drgeniusIndex{Script}{\texttt{getAbscissa}}{}{}{}
\begin{drgeoApi}{valor (getAbscissa punto)}
  \drgeoApiIn{punto}{Referencia a un punto sobre una curva}
  \drgeoApiOut{La ``abscisa geométrica'' del punto sobre la curva.El
    valor pertenece al intervalo [0~;~1]}
  \drgeoApiExample{(define x (getAbscissa a1))\\
    (* x 10)}
\end{drgeoApi}



\drgeniusIndex{Script}{\texttt{setAbscissa}}{}{}{}
\begin{drgeoApi}{(setAbscissa punto x)}
  \drgeoApiIn{punto}{Referencia a un punto libre sobre una línea}
  \drgeoApiIn{x}{Valor decimal en el intervalo [0~;~1] que representa
    a la nueva ``abscisa geométrica''} \drgeoApiExample{(setAbscissa
    a1 0.5)}
\end{drgeoApi}


\drgeniusIndex{Script}{\texttt{getCoordinates}}{}{}
\begin{drgeoApi}{lista (getCoordinates punto|vector)}
  Devuelve las coordenadas de un punto o de un vector.\\
  \drgeoApiIn{punto|vector}{Referencia a un punto o un vector}
  \drgeoApiOut{Lista que contiene las coordenadas del punto o del
    vector}
  \drgeoApiExample{(define c (getCoordinates a1))\\
    (define x (car c))\\
    (define y (cadr c))\\
    (+ (* x x) (* y y))}
\end{drgeoApi}


\drgeniusIndex{Script}{\texttt{setCoordinates}}{}{}
\begin{drgeoApi}{(setCoordinates punto coord)}
  Asigna coordenadas a un punto\\
  \drgeoApiIn{punto}{Referencia a un punto libre en el plano}
  \drgeoApiIn{coord}{Lista de dos números decimales}
  \drgeoApiExample{(define l (list 1.4 (random 5)))\\
    (setCoordinate a1 l)}
\end{drgeoApi}



\subsubsection{Recta, Semirrecta, Segmento, Vector}



\drgeniusIndex{Script}{\texttt{getSlope}}{}{}{}
\begin{drgeoApi}{valor (getSlope dirección)}
  \drgeoApiIn{dirección}{Referencia a un objeto de tipo recta,
    semirrecta, segmento o vector} \drgeoApiOut{La pendiente en esa
    dirección} \drgeoApiExample{(define p (getSlope a1))}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{getUnit}}{}{}{}
\begin{drgeoApi}{valor (getUnit dirección)}
  \drgeoApiIn{dirección}{Referencia a un objeto de tipo recta,
    semirrecta, segmento o vector} \drgeoApiOut{Una lista que contiene
    las coordenadas de un vector unitario en la dirección dada}
  \drgeoApiExample{(define v (getUnit a1))}
\end{drgeoApi}

\drgeniusIndex{Script}{\texttt{getNormal}}{}{}{}
\begin{drgeoApi}{valor (getNormal dirección)}
  \drgeoApiIn{dirección}{Referencia a un objeto de tipo recta,
    semirrecta segmento o vector} \drgeoApiOut{Una lista que contiene
    las coordenadas de un vector normal a la dirección dada}
  \drgeoApiExample{(define n (getNormal a1))}
\end{drgeoApi}


\drgeniusIndex{Script}{\texttt{getNorm}}{}{}
\begin{drgeoApi}{valor (getNorm vector)}
  \drgeoApiIn{vector}{Referencia a un vector} \drgeoApiOut{La norma
    (i.e., magnitud, longitud) de ese vector} \drgeoApiExample{(define
    n (getNorm a1))}
\end{drgeoApi}



\drgeniusIndex{Script}{\texttt{getLength}}{}{}
\begin{drgeoApi}{valor (getLength segmento)}
  \drgeoApiIn{segmento}{Referencia a un segmento} \drgeoApiOut{La
    longitud de ese segmento} \drgeoApiExample{(define l (getLength
    a1))}
\end{drgeoApi}

\subsubsection{Círculo, Arco de círculo}


\drgeniusIndex{Script}{\texttt{getCenter}}{}{}
\begin{drgeoApi}{lista (getCenter círculo|arco)}
  \drgeoApiIn{círculo|arco}{Referencia a un círculo o un arco de
    círculo} \drgeoApiOut{Lista que contiene las coordenadas del
    centro de un círculo o de un arco de círculo}
  \drgeoApiExample{(define c (getCenter a1))\\
    (car c)}
\end{drgeoApi}


\drgeniusIndex{Script}{\texttt{getRadius}}{}{}
\begin{drgeoApi}{valor (getRadius círculo|arco)}
  \drgeoApiIn{círculo|arco}{Referencia a un círculo o un arco de
    círculo} \drgeoApiOut{Radio del círculo o del arco de círculo}
  \drgeoApiExample{(define r (getRadius a1))}
\end{drgeoApi}



\drgeniusIndex{Script}{\texttt{getLength}}{}{}
\begin{drgeoApi}{valor (getLength círculo|arco)}
  \drgeoApiIn{círculo|arco}{Referencia a un círculo o un arco de
    círculo} \drgeoApiOut{Perímetro del círculo o longitud del arco de
    círculo} \drgeoApiExample{(define l (getLength a1))}
\end{drgeoApi}



\subsubsection{Funciones Numéricas}

\drgeniusIndex{Script}{\texttt{getValue}}{}{}
\begin{drgeoApi}{valor (getValue número)}
  \drgeoApiIn{número}{Referencia a un número} \drgeoApiOut{Valor de
    ese número}
  \drgeoApiExample{(define a (getValue a1))\\
    (define b (getValue a2))\\
    (+ a b)}
\end{drgeoApi}




\drgeniusIndex{Script}{\texttt{setValue}}{}{}
\begin{drgeoApi}{(setValue número v)}
  \drgeoApiIn{número}{Referencia a un número} \drgeoApiIn{v}{Valor
    decimal}
  \drgeoApiExample{(define v (getValue a1))\\
    (setValue a2 v)}
\end{drgeoApi}



\subsubsection{Ángulo}



\drgeniusIndex{Script}{\texttt{getAngle}}{}{}
\begin{drgeoApi}{valor (getAngle ángulo)}
  \drgeoApiIn{ángulo}{Referencia a un ángulo orientado o geométrico}
  \drgeoApiOut{La medida de ese ángulo en grados.  Para obtener la
    medida en radianes, utilice la función \texttt{getValue}}
  \drgeoApiExample{(define angle1 (getAngle a1))\\
    (define angle2 (getAngle2))\\
    (define angle3 (getAngle a3))\\
    (+ angle1 angle2 angle3)}
\end{drgeoApi}


\subsubsection{Otros}



% THERE IS A TYPO IN THE FRENCH VERSION!!!!
% WARNING SINCE THE SCRIPT IS EXECUTED LOTS OF TIMES THE FIGURE WILL MOVE A LOT.
\drgeniusIndex{Script}{\texttt{move}}{}{}
\begin{drgeoApi}{(move item t)}
  \drgeoApiIn{item}{Referencia a un objeto de la figura}
  \drgeoApiIn{t}{vector de dos dimensiones}
  \drgeoApiExample{(define v (vector .1 0))\\
    (move a1 v)}
\end{drgeoApi}


\section{Figura Scheme de \drgeo}

\drgeniusIndex{Figura Scheme de \drgeo}{Introducción}{}{}

Las \emph{Figuras Scheme de \drgeo} -- (FSD) -- son figuras escritas
en un lenguaje relativamente natural.  No se trata entonces de
construir una figura con la ayuda de la interfaz gráfica de \drgeo\ 
sino más bien de describir una figura dentro del lenguaje Scheme(Una
variante de Lisp).  Hemos cuidado mucho que la sintaxis utilizada sea
fácil y concisa.  Además, el conjunto de palabras clave utilizadas en
Scheme para para describir una figura simple son adaptables de modo
que aparezcan en Español, Francés, Inglés, etc. . Una combinación de
varios idiomas es también posible; pero no es deseable.(N. del T. es
por ello que varias palabras clave en este manual aparecen en Español.
Basta con traducir un archivo en el directorio scm donde \drgeo\ está
instalado; notar que en la traducción hecha del archivo, se incluyó
una versión de los comandos con acentos y eñes, así como otra sin
acentos y sin eñes.  Las palabras clave no traducidas serán escritas
en inglés.)


\subsection{Algunos Ejemplos}

\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{}{}

(N.del T. En lo que sigue se usarán las palabras ``referencia'' y
``nombre''.  ``referencia'' es una variable que apunta a un objeto.
``nombre'' es el rótulo que aparece en la figura.  A veces se usará el
termino variable; pero ``referencia'' es más preciso en otros casos.)
  
En sí, Scheme es un lenguaje de muy alto nivel. Cuando una figura es
definida en este lenguaje, disponemos también de todo su poder para,
por ejemplo, definir recursivamente alguna parte de la figura o bien
para colocar aleatoriamente ciertos objetos de tal suerte que, cada
vez que se cargue la figura, los objetos aparecerán ligeramente
distintos.  En pocas palabras, los FSD no están atados a las
limitantes de la interfaz gráfica, y además poseen todo el poder del
lenguaje Scheme.  \drgeniusIndex{Figura Scheme de
  \drgeo{}}{Evaluar}{}{}Un FSD es entonces un archivo con extensión
\textbf{.scm} creado con la ayuda de un editor de texto, el cual es
abierto en \drgeo\ con la ayuda del comando
\drgeniusMenu{Archivo->Evaluar}.



\drgeniusIndex{Figura Scheme de \drgeo}{Nueva figura}{}{} Comencemos
por estudiar un ejemplo sencillo de FSD~:

\begin{verbatim}
(nueva-figura "Mi figura")
\end{verbatim}


Este es el script más pequeño que podemos definir.  Después de ser
cargado en \drgeo, simplemente crea una nueva figura vacía con el
nombre ``Mi figura''.  Podemos escribir comandos \texttt{(nueva-figura
  "{}Mi figura"{})} tantas veces como deseemos.



Veamos ahora un segundo ejemplo~:

\begin{verbatim}
(nueva-figura "Mi figura")
(sea Punto "A" libre 1.2 -2)
\end{verbatim}


Este FSD define una figura con un punto libre $A$ de coordenadas
iniciales $(1,2~;~-2)$.  Como podemos ver la sintaxis de la definición
de un objeto geométrico es relativamente cómoda, a tal grado que esa
expresada en nuestra lengua madre.  Esto es de interés especial para
la enseñanza secundaria.  De hecho, todos los comandos de definición
de objeto tienen una sintaxis común.  Tal sintaxis es como sigue:


\begin{enumerate}
\item Se comienza siempre con la palabra clave \texttt{sea}, la cual
  indica que deseamos definir un nuevo objeto
\item Inmediatamente le sigue la clase de objeto; en este caso
  \texttt{Punto}.
\item El nombre del objeto va enseguida, $A$, debe siempre estar entre
  dos comillas "{}. Si no deseamos nombrar al objeto, de todos modos
  es necesario dar un nombre vacío como sigue: "{}"{}.
\item Para terminar, necesitamos precisar, dentro de la clase, qué
  tipo de objeto, en nuestro ejemplo, la clase es punto, y el tipo es
  \texttt{libre}.  Esto significa que el punto $A$ es libre.
\item El tipo de objeto es seguido por una lista de argumentos que
  depende de la clase de objeto y del tipo de objeto.  En nuestro
  ejemplo, esta lista se compone de dos números: las coordenadas del
  punto libre $A$.
\end{enumerate}


Prosigamos con un tercer ejemplo~:

\begin{verbatim}
(define (triángulo p1 p2 p3)
  (Segmento "" extremos p1 p2)
  (Segmento "" extremos p2 p3)
  (Segmento "" extremos p1 p3))

(define (azar)
  (- 8 (* 16 (random:uniform))))

(nueva-figura "Mi figura")

(sea Punto "A" libre (azar) 0)
(sea Punto "B" libre 5 0)
(sea Punto "C" libre (azar) 5)

(triángulo A B C)
\end{verbatim}



(N. del T. En este ejemplo, dos palabras están en inglés: ``random''
que significa ``azar'', y ``uniform'' que significa ``uniforme''.
Como se comentó antes es posible traducirlas modificando el archivo
dentro del directorio scm donde \drgeo\ esté instalado.  El archivo
para español es:
\texttt{/usr/share/drgeo/scm/drgeo\_scm\_interface\_constant\_es.scm}).

Este ejemplo es particularmente interesante, nos muestra tres cosas
importantes~:

\begin{enumerate}

  
\item La definición de una construcción de alto nivel no prevista por
  los autores de \drgeo.  En el programa que acabamos de ver hemos
  definido la función \texttt{triángulo} la cual, a partir de tres
  puntos construye el triángulo que pasa por esos tres puntos.
  Podemos comparar esto con las macros; pero con un grado de libertad
  mucho más amplio e importante.
\item La definición de las funciones asociadas, en este caso definimos
  la función \texttt{azar} que devuelve un número decimal comprendido
  entre -8 y 8. Utilizamos esta función para añadir un elemento de
  azar en ciertos puntos en nuestra figura.  De este modo cada vez que
  se cargue la figura, ésta será ligeramente distinta.
\item En efecto, la utilización de la palabra clave \texttt{sea} no es
  obligatoria; nosotros la utilizamos para guardar una referencia al
  objeto creado.  Por ejemplo, dentro de la función \texttt{triángulo}
  no guardamos referencias para los segmentos creados. Por otro lado,
  cuando definimos los puntos $A$, $B$ y $C$ necesitamos guardar una
  referencia para ellos, estas referencias se llamarán
  igual\footnote{Desde el punto de vista del lenguaje Scheme, estas
    referencias son símbolos que apuntan hacia una estructura interna
    del objeto --un prototipo-- mientras que los nombres son
    simplemente cadenas de caracteres.}; pero sin las comillas; así
  nuestras referencias son: \texttt{A}, \texttt{B} y \texttt{C}.  En
  lo que sigue llamaremos \textbf{símbolos} a esas variables, ésta es
  la terminología precisa del lenguaje Scheme. De este modo, al llamar
  a la función \texttt{triángulo}, pasamos como parámetros a los
  símbolos \texttt{A}, \texttt{B} y \texttt{C} que son utilizados para
  definir nuestros tres segmentos.
\end{enumerate}


Notar que cuando definimos los segmentos, no les dimos ningún nombre;
en ese caso \drgeo\ les dará un nombre que está determinado a partir
del nombre de sus extremos.  Nuestros tres segmentos tendrán entonces
los nombres $[AB]$, $[BC]$ y $[AC]$.



Para concluir esta sección, veamos un último ejemplo~:


\begin{verbatim}
(sea Punto "A" libre 1 0)
(sea Punto "B" libre 5 0)
(sea Recta "d1" 2puntos A B)

(envía A color amarillo)
(envía A forma redonda)
(envía A tamaño grande)
(envía B oculto)
(envía d1 grosor punteado)
\end{verbatim}


Los tres primeros comandos crean dos puntos y una recta.  La parte que
nos interesa particularmente es la serie de comandos \texttt{envía}.
Estos comandos permiten la comunicación con un objeto cuyo símbolo
hemos guardado; en este caso tenemos los símbolos \texttt{A},
\texttt{B} y \texttt{d1}.  El comando consiste en enviar un mensaje a
un objeto.  Su primer parámetro de entrada es el objeto con el que
deseamos comunicarnos, el segundo argumento es el mensaje, los
restantes argumentos están determinados por tipo de mensaje que es
enviado.  Por ejemplo \texttt{(envía A color amarillo)} envía el
mensaje \texttt{color} con parámetro de entrada \texttt{amarillo}.  El
punto A toma entonces el color amarillo.  Es fácil comprender el
sentido de los otros comandos \texttt{envía}.  Estos serán
explicados en la sección siguiente.

Hemos terminado nuestra pequeña visita guiada a las \emph{Figuras
  Scheme de Dr. Geo, FSD}.  En las secciones siguientes expondremos el
conjunto de comandos disponibles para definir las FSD.



\subsection{Métodos de Referencia para las Figuras Scheme de \drgeo}


La definición de los objetos en un documento FSD se hace a través de
prototipos.  Los prototipos son en cierto sentido objetos a los que
podemos interrogar y modificar como veremos en lo que sigue.

Empero, antes de la definición de objeto alguno en un FSD, el FSD debe
ser creado con el comando \texttt{nueva-figura} en el principio del
archivo.

\subsubsection{Comandos Generales}


\begin{drgeoApi}{(nueva-figura nombre)}
  \drgeoApiIn{nombre}{Cadena de caracteres} \drgeoApiOut{No devuelve
    ningún valor. Es llamada por el efecto que produce, no por el
    valor que devuelve.  Este comando crea una figura nueva.  Los
    objetos creados posteriormente se crean dentro de esta figura
    hasta que se vuelva a llamar este comando.}
  \drgeoApiExample{(nueva-figura "{}Mi 1er figura"{})}
\end{drgeoApi}


\subsubsection{Definición de Objetos en una Figura}
\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{}{} Un
objeto puede ser definido a través de varias sintaxis~:

\begin{itemize}
\item \texttt{(sea Punto "{}p1"{} tipo args)} El punto es creado y su
  referencia guardada en la variable \texttt{p1}. Esta sintaxis
  utiliza una macro Scheme.
  
\item \texttt{(Punto "{}Nombre"{} tipo args)} El punto es creado pero
  ninguna referencia al punto es conservada.
  
\item \texttt{(define p1 (Punto "{}Nombre"{} tipo args))} El punto es
  creado y su referencia guardada en la variable \texttt{p1}.
  
\item \texttt{(set! p1 (Punto "{}Nombre"{} tipo args))} El punto es
  creado y su referencia es copiada en la variable, ya existente,
  \texttt{p1}.
\end{itemize}


Si unos objetos son creados después del cuerpo de una función, utilice
ya sea la forma \texttt{set!} o la forma especial de Scheme
\texttt{let}.  Es importante subrayar que la llamada se hace a una
función que devuelve una referencia al objeto creado.

Para saber más sobre la correspondencia entre los nombres de los
comandos Scheme en Español y en Inglés, vea el archivo
\texttt{/usr/share/drgeo/scm/drgeo\_scm\_interface\_constant\_es.scm}.


\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{Punto}{}
\paragraph{Punto}
\T ~\\
\begin{drgeoApi}{prototipo (Punto nombre libre x y)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x}{La abscisa del punto} \drgeoApiIn{y}{La
    ordenada del punto} \drgeoApiOut{Referencia a un punto libre del
    plano con coordenadas iniciales \texttt{x} y \texttt{y}.}
  \drgeoApiExample{(define p1 (Punto "{}A"{} libre 1.2 (acos -1)))}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Punto nombre en-linea linea x)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{linea}{Referencia a una linea (recta,
    semirrecta, segmento, arco, círculo, etc..)}
  \drgeoApiIn{x}{Abscisa curvilínea (la ``abscisa geométrica'') del
    punto libre; el valor pertenece al intervalo [0~;~1]}
  \drgeoApiOut{Referencia a un punto libre sobre la curva}
  \drgeoApiExample{(Punto "{}M"{} en-linea s1 0.5)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Punto nombre mitad-2pts p1 p2)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{p1}{Referencia a un punto}
  \drgeoApiIn{p2}{Referencia a un punto} \drgeoApiOut{Referencia al
    punto medio de los dos puntos.}
  \drgeoApiExample{(sea Punto "{}A"{} libre 1 1)\\
    (sea Punto "{}B"{} libre 4 4)\\
    (Punto "{}I"{} mitad-2pts A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Punto nombre mitad-segmento s)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{s}{Referencia a un segmento}
  \drgeoApiOut{Referencia a la mitad de un segmento.}
  \drgeoApiExample{(Punto "{}L"{} mitad-segmento s)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Punto nombre intersección l1 l2)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{l1}{Referencia a una línea(recta o curva)}
  \drgeoApiIn{l2}{Referencia a una línea(recta o curva)}
  \drgeoApiOut{Referencia al punto de intersección de las dos líneas}
  \drgeoApiExample{(Punto "{}I"{} intersección recta segmento)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Punto nombre intersección2 l1 l2)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{l1}{Referencia a una línea(recta o curva)}
  \drgeoApiIn{l2}{Referencia a una línea(recta o curva)}
  \drgeoApiOut{Referencia al segundo punto de intersección de las dos
    líneas cuando una de las dos líneas es del tipo arco de círculo o
    del tipo círculo.}  \drgeoApiExample{(Punto "{}I"{} intersección2
    recta círculo)}
\end{drgeoApi}



\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{Recta}{}
\paragraph{Recta}
\T ~\\
\begin{drgeoApi}{prototipo (Recta nombre 2puntos p1 p2)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{l1}{Referencia a un punto}
  \drgeoApiIn{l2}{Referencia a un punto} \drgeoApiOut{Referencia a una
    recta que pasa por los dos puntos.}
  \drgeoApiExample{(sea Punto "{}A"{} libre 0 0)\\
    (sea Punto "{}M"{} libre 1 2)\\
    (Recta "{}"{} 2puntos A M)}
\end{drgeoApi}

% HERE AN EXPLICIT EXAMPLE MIGHT BE USEFUL.  d WAS NOT DEFINED.

\begin{drgeoApi}{prototipo (Recta nombre paralela p d)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{p}{Referencia a un punto}
  \drgeoApiIn{d}{Referencia a una dirección (recta, segmento,
    vector,...)}  \drgeoApiOut{Referencia a una recta paralela a la
    dirección \texttt{d} y que pasa por el punto \texttt{p}.}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Recta "{}d1"{} paralela A d)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Recta nombre perpendicular p d)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{p}{Referencia a un punto}
  \drgeoApiIn{d}{Referencia a una dirección (recta, segmento, vector,
    ...)}  \drgeoApiOut{Referencia a una recta perpendicular à la
    dirección de \texttt{d} y que pasa por por \texttt{p}.}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Recta "{}d1"{} perpendicular A d)}
\end{drgeoApi}


\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Semirrecta}{}
\paragraph{Semirrecta}
\T ~\\
\begin{drgeoApi}{prototipo (Semirrecta nombre 2puntos o p)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{o}{Referencia a un punto, origen de la
    semirrecta} \drgeoApiIn{p}{Referencia a un punto, punto de la
    semirrecta} \drgeoApiOut{Referencia a una semirrecta definida por
    su origen y por un punto.}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Punto "{}O"{} libre 0 0)\\
    (sea Semirrecta "{}dd1"{} 2puntos A 0)}
\end{drgeoApi}

\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Segmento}{}
\paragraph{Segmento}
\T ~\\

\begin{drgeoApi}{prototipo (Segmento nombre extremos p1 p2)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{p1}{Referencia a un punto}
  \drgeoApiIn{p2}{Referencia a un punto} \drgeoApiOut{Referencia a un
    segmento definido por sus extremos}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Punto "{}B"{} libre 10 4)\\
    (sea Segmento "{}"{} extremos A B)}
\end{drgeoApi}

\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Círculo}{}
\paragraph{Círculo}
\T ~\\
\begin{drgeoApi}{prototipo (Círculo nombre 2puntos c p)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{c}{Referencia a un punto, centro del círculo}
  \drgeoApiIn{p}{Referencia a un punto sobre el círculo}
  \drgeoApiOut{Referencia a un círculo definido por su centro y por un
    punto.}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Punto "{}B"{} libre 10 4)\\
    (sea Círculo "{}C1"{} 2puntos A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Círculo nombre centro-radio c r)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{c}{Referencia a un punto, centro del círculo}
  \drgeoApiIn{r}{Referencia a una valor numérico, radio del círculo}
  \drgeoApiOut{Referencia a un círculo definido por su centro y por su
    radio}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Número "{}r"{} libre 10)\\
    (sea Círculo "{}C1"{} centro-radio A r)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Círculo nombre centro-segmento c s)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{c}{Referencia a un punto, centro del círculo}
  \drgeoApiIn{s}{Referencia a un segmento dada la donde la longitud
    del segmento será el radio del círculo} \drgeoApiOut{Referencia a
    un círculo definido por su centro y por un segmento cuya longitud
    es su radio.}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Círculo "{}C1"{} centro-segmento A s)}
\end{drgeoApi}


\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{Arco}{}
\paragraph{Arco de círculo}
\T ~\\
\begin{drgeoApi}{prototipo (Arco nombre 3puntos p1 p2 p3)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{p1}{Referencia a un punto, 1$^{er}$ extremo
    del arco de círculo} \drgeoApiIn{p2}{Referencia a un punto del
    arco} \drgeoApiIn{p3}{Referencia a un punto, 2$^{o}$ extremo del
    arco de círculo} \drgeoApiOut{Referencia a un arco de círculo
    definido por sus extremos y por un punto interno.}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 5)\\
    (sea Punto "{}B"{} libre  0 5)\\
    (sea Punto "{}C"{} libre  -1 -2)\\
    (sea Arco "{}arc"{} 3puntos A B C)}
\end{drgeoApi}


\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Polígono}{}
\paragraph{Polígono}
\T ~\\
\begin{drgeoApi}{prototipo (Polígono nombre npuntos args)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto.}  \drgeoApiIn{args}{Una lista de referencias de puntos~;
    vértices del polígono.}  \drgeoApiOut{Referencia a un polígono
    definido por sus vértices.}  \drgeoApiExample{(sea Polígono
    "{}quad"{} npuntos A B C D)}
\end{drgeoApi}



\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Transformaciones geométricas}{}
\paragraph{Las transformaciones geométricas}
\T ~\\
Los prototipos de las transformaciones geométricas permiten la
obtención de objetos rotados, reflejados, trasladados, a escala, etc..
Estos prototipos usan como referencia a los tipos punto, recta,
semirrecta, vector, círculo, arco de círculo y polígono.

\begin{drgeoApi}{prototipo (TipoDeObjeto nombre rotación objeto centro ángulo)}  
  \drgeoApiIn{TipoDeObjeto}{Punto, Segmento, Recta, Semirrecta,
    Vector, Círculo, Arco, Polígono} \drgeoApiIn{nombre}{Cadena de
    caracteres que designa al nombre del objeto}
  \drgeoApiIn{objeto}{Referencia del objeto a transformar}
  \drgeoApiIn{centro}{Referencia a un punto, centro de la rotación}
  \drgeoApiIn{ángulo}{Referencia a un valor numérico, ángulo de la
    rotación} \drgeoApiOut{Referencia del objeto ya transformado.}
  \drgeoApiExample{(sea Punto "{}I1"{} rotación I C a)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (TipoDeObjeto nombre escala objeto centro k)}  
  \drgeoApiIn{TipoDeObjeto}{Punto, Segmento, Recta, Semirrecta,
    Vector, Círculo, Arco, Polígono} \drgeoApiIn{nombre}{Cadena de
    caracteres que designa al nombre del objeto}
  \drgeoApiIn{objeto}{Referencia del objeto a transformar}
  \drgeoApiIn{centro}{Referencia a un punto, centro de la escala
    (centro de homotecia)} \drgeoApiIn{k}{Referencia a un valor
    numérico, factor de la escala (homotecia)} \drgeoApiOut{Referencia
    del objeto transformado.}  \drgeoApiExample{(sea Polígono "{}P1"{}
    escala P C k1)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (TipoDeObjeto nombre simetría objeto centro)}  
  \drgeoApiIn{TipoDeObjeto}{Punto, Segmento, Recta, Semirrecta,
    Vector, Círculo, Arco, Polígono} \drgeoApiIn{nombre}{Cadena de
    caracteres que designa al nombre del objeto}
  \drgeoApiIn{objeto}{Referencia del objeto a transformar}
  \drgeoApiIn{centro}{Referencia a un punto, centro de la simetría
    (esto es, una rotación de 180 grados)} \drgeoApiOut{Referencia del
    objeto ya transformado.}  \drgeoApiExample{(sea Segmento "{}S1"{}
    simetría S C)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (TipoDeObjeto nombre reflexión objeto eje)}  
  \drgeoApiIn{TipoDeObjeto}{Punto, Segmento, Recta, Semirrecta,
    Vector, Círculo, Arco, Polígono} \drgeoApiIn{nombre}{Cadena de
    caracteres que designa al nombre del objeto}
  \drgeoApiIn{objeto}{Referencia del objeto a transformar}
  \drgeoApiIn{eje}{Referencia a una recta, eje de la reflexión}
  \drgeoApiOut{Referencia del objeto ya transformado}
  \drgeoApiExample{(sea Polígono "{}P1"{} reflexión P d1)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (TipoDeObjeto nombre traslación objeto vector)}  
  \drgeoApiIn{TipoDeObjeto}{Punto, Segmento, Recta, Semirrecta,
    Vector, Círculo, Arco, Polígono} \drgeoApiIn{nombre}{Cadena de
    caracteres que designa al nombre del objeto}
  \drgeoApiIn{objeto}{Referencia del objeto a transformar}
  \drgeoApiIn{vector}{Referencia a un vector} \drgeoApiOut{Referencia
    del objeto ya transformado} \drgeoApiExample{(sea Círculo "{}C1"{}
    traslación C v)}
\end{drgeoApi}


\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{Lugar
  Geométrico}{}
\paragraph{Lugar geométrico}
\T ~\\
\begin{drgeoApi}{prototipo (Lugar-geométrico nombre 2puntos m c)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{m}{Referencia a un punto móvil sobre una línea
    (recta, círculo, etc.)}  \drgeoApiIn{c}{Referencia a un punto fijo
    que depende del punto \texttt{m}} \drgeoApiOut{Referencia al lugar
    geométrico de \texttt{c} cuando \texttt{m} se mueve sobre la línea
    (recta, círculo, etc.) }  \drgeoApiExample{(Lugar-geométrico
    "{}locus1"{} 2puntos M I)}
\end{drgeoApi}



\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{Vector}{}
\paragraph{Vector}
\T ~\\
\begin{drgeoApi}{prototipo (Vector nombre 2puntos o e)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{o}{Referencia a un punto, origen del vector}
  \drgeoApiIn{e}{Referencia a un punto, extremo del vector}
  \drgeoApiOut{Referencia a un vector.}
  \drgeoApiExample{(sea Punto "{}B"{} libre  0 5)\\
    (sea Punto "{}C"{} libre  -1 -2)\\
    (Vector "{}"{} 2puntos C B)}
\end{drgeoApi}



\drgeniusIndex{Figura Scheme de \drgeo}{Creación de objetos}{Número}{}
\paragraph{Número}
\T ~\\
\begin{drgeoApi}{prototipo (Número nombre libre x y v)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x,y}{Las coordenadas del número}
  \drgeoApiIn{v}{El valor inicial del número} \drgeoApiOut{Referencia
    a un número libre.}  \drgeoApiExample{(sea Número "{}pi"{} libre 5
    5 (acos -1))}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre longitud-segmento x y s)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x,y}{Las coordenadas del número}
  \drgeoApiIn{s}{Referencia a un segmento} \drgeoApiOut{Referencia a
    un número, longitud de un segmento.}  \drgeoApiExample{(sea Número
    "{}l"{} longitud-segmento 5 5 S)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre norma-vector x y v)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x,y}{Las coordenadas del número}
  \drgeoApiIn{s}{Referencia a un vector} \drgeoApiOut{Referencia a un
    número, norma(longitud) de un vector.}  \drgeoApiExample{(sea
    Número "{}l"{} norma-vector 5 5 V)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre punto-círculo x y p c)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x,y}{Las coordenadas del número}
  \drgeoApiIn{p}{Referencia a un punto} \drgeoApiIn{c}{Referencia a un
    círculo} \drgeoApiOut{Referencia a un número, distancia entre el
    punto y el círculo.}  \drgeoApiExample{(sea Número "{}l"{}
    punto-círculo 5 5 P C)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre punto-recta x y p d)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x,y}{Las coordenadas del número}
  \drgeoApiIn{p}{Referencia a un punto} \drgeoApiIn{c}{Referencia a
    una recta} \drgeoApiOut{Referencia a un número, distancia entre el
    punto y la recta.}  \drgeoApiExample{(sea Número "{}d"{}
    punto-recta 5 5 M D1)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre punto-punto x y p1 p2)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{x,y}{Las coordenadas del número}
  \drgeoApiIn{p1}{Referencia a un punto} \drgeoApiIn{p2}{Referencia a
    un punto} \drgeoApiOut{Referencia a un número, distancia entre los
    dos puntos.}  \drgeoApiExample{(sea Número "{}d"{} punto-punto 5 5
    A B)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre longitud-círculo x y c)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto.}  \drgeoApiIn{x,y}{Las coordenadas del número.}
  \drgeoApiIn{c}{Referencia a un círculo.}  \drgeoApiOut{Referencia a
    un número, perímetro del círculo.}  \drgeoApiExample{(sea Número
    "{}p"{} longitud-círculo 5 5 C)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre pendiente-línea x y d)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto.}  \drgeoApiIn{x,y}{Las coordenadas del número.}
  \drgeoApiIn{d}{Referencia a una recta.}  \drgeoApiOut{Referencia a
    un número, pendiente de la recta dada.}  \drgeoApiExample{(sea
    Número "{}p"{} pendiente-línea 5 5 d1)}
\end{drgeoApi}

\begin{drgeoApi}{prototipo (Número nombre longitud-arco x y arc)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto.}  \drgeoApiIn{x,y}{Las coordenadas del número.}
  \drgeoApiIn{arc}{Referencia a un arco de círculo.}
  \drgeoApiOut{Referencia a un número, longitud del arco de círculo
    dado.}  \drgeoApiExample{(sea Número "l" longitud-arco 5 5 ABC)}
\end{drgeoApi}

\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Ángulo}{}
\paragraph{Ángulo}
\T ~\\
\begin{drgeoApi}{prototipo (Ángulo nombre geométrico A B C)}
  \drgeoApiIn{nombre}{Cadena de caracteres que designa al nombre del
    objeto} \drgeoApiIn{A}{Referencia a un punto}
  \drgeoApiIn{B}{Referencia a un punto, vértice del ángulo}
  \drgeoApiIn{C}{Referencia a un punto} \drgeoApiOut{Referencia a un
    ángulo geométrico} \drgeoApiExample{(sea Ángulo "{}a"{} geométrico
    A B C)}
\end{drgeoApi}

\subsubsection{Modificación de los Atributos(Apariencia) de los Objetos}

\drgeniusIndex{Figura Scheme de \drgeo}{Creación de
  objetos}{Atributos(Apariencia) de los objetos}{}


Para modificar los atributos de un objeto ya creado, utilizamos un
sistema de envío de mensajes directamente al prototipo que representa
al objeto en cuestión.  La modificación de sus atributos(apariencia)
es resultado de este proceso, y se hace ya que los objetos han sido
creados.

% ``bordeaux'' means dark-red.

\begin{drgeoApi}{(envía objeto color valor)}
  \drgeoApiIn{objeto}{Referencia a un objeto} \drgeoApiIn{valor}{El
    color; los valores posibles son: \texttt{negro, gris-oscuro, gris,
      blanco, verde-oscuro, verde, azul-oscuro, azul, rojo, rojo-obscuro,,
      amarillo, naranja}}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 2)\\
    (envía A color verde)}
\end{drgeoApi}

\begin{drgeoApi}{(envía línea grosor valor)}
  \drgeoApiIn{línea}{Referencia a una línea (recta, semirrecta,
    círculo, lugar geométrico, etc.)}  \drgeoApiIn{valor}{El grosor,
    los valores posibles son: \texttt{punteado, pequeño, grande}}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 2)\\
    (sea Punto "{}O"{} libre 0 0)\\
    (sea Recta "{}d"{} 2puntos A B)\\
    (envía d grosor punteado)}
\end{drgeoApi}

\begin{drgeoApi}{(envía punto tamaño valor)}
  \drgeoApiIn{punto}{Referencia a un punto} \drgeoApiIn{valor}{El
    tamaño del punto, los valores posibles son: \texttt{pequeño,
      normal, grande}}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 2)\\
    (envía A tamaño pequeño)}
\end{drgeoApi}

\begin{drgeoApi}{(envía punto forma valor)}
  \drgeoApiIn{punto}{Referencia a un punto} \drgeoApiIn{valor}{La
    forma del punto, los valores posibles son: \texttt{redondo , cruz,
      redondo-vacío,rec, rec-vacío}}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 2)\\
    (envía A forma redondo)}
\end{drgeoApi}

\begin{drgeoApi}{(envía objeto oculto)}
  \drgeoApiIn{objeto}{Referencia a un objeto que va a ser ocultado}
  \drgeoApiExample{(sea Punto "{}A"{} libre  1 2)\\
    (envía A oculto)}
\end{drgeoApi}

% IT WOULD BE BETTER TO INCLUDE THE SYNONIMS IN THE DEFINITION

% OF EACH COMMAND IN ADDITION TO PUTTING THEM  IN A SEPARATE SECTION

% IT WOULD BE NICE TO HAVE IT IN TWO COLUMNS.

\subsection{Sinónimos de los Comandos de las Figuras Scheme de \drgeo }
\drgeniusIndex{Figura Scheme de \drgeo}{Sinónimos}{}{}

Esta sección consta de una transcripción ligeramente modificada del
archivo
(\texttt{/usr/share/drgeo/scm/drgeo\_scm\_interface\_constant\_es.scm})

Este archivo define los sinónimos de los comandos utilizados 
para escribir una Figura Scheme en Español.  Estos sinónimos son 
siempre definidos a partir de la versión de referencia de los 
comandos, la cual está en Inglés.

En efecto, es posible combinar código en Inglés con código 
con sinónimos en Español, francés etc.  Sin embargo, si desea 
que su figura pueda ser comprendida por cualquier grupo lingüístico,
 le sugerimos utilizar el Inglés.

Por ejemplo, los siguientes comandos son sinónimos:
\begin{verbatim}
(lets  Point "P" free 3 3)(send A 'color bordeaux)
(sea Punto "P" libre 3 3)(envía A color rojo-oscuro)
\end{verbatim}

Notar que algunos pocos términos son iguales en Español y en Inglés.
Además, se han traducido varias versiones, de modo que es posible 
evitar escribir eñes o acentos.

\T \begin{multicols}{2}[][0.1cm]
\begin{verbatim}

COLORES:
 negro black
 gris-oscuro dark-grey
 gris-obscuro dark-grey
 gris grey
 blanco white
 verde-oscuro dark-green
 verde-obscuro dark-green
 verde green
 azul-oscuro dark-blue
 azul-obscuro dark-blue
 azul blue
 rojo red
 rojo-oscuro bordeaux
 rojo-obscuro bordeaux
 amarillo yellow
 anaranjado orange
 naranja orange

GROSORES:
 punteado dashed
 pequeño small
 pequeno small
 grande large
 normal normal

FORMAS DE PUNTO:
 redondo round
 redonda round
 cruz cross
 cuadrado rec
 cuadrada rec
 redondo-vacío round-empty
 redondo-vacio round-empty
 redonda-vacía round-empty
 redonda-vacia round-empty
 cuadrado-vacío rec-empty
 cuadrado-vacio rec-empty
 cuadrada-vacía rec-empty
 cuadrada-vacia rec-empty
 rec-vacía rec-empty
 rec-vacia rec-empty

ESTILOS:
 color 'color
 grosor 'thickness
 forma 'shape
 tamaño 'size
 tamano 'size
 enmascarado 'masked
 oculto 'masked
 ocultar 'masked

PUNTOS:
 libre 'free
 sobre-la-curva 'on-curve
 sobre-curva 'on-curve
 en-curva 'on-curve
 en-linea 'on-curve
 mitad-2pts 'middle-2pts
 mitad-segmento 'middle-segment
 intersección 'intersection
 interseccion 'intersection
 intersección2 'intersection2
 interseccion2 'intersection2

SEGMENTOS:
 extremos 'extremities

COMUNES A PUNTOS,LINEAS,ETC.
 2puntos '2points
 2pts '2points
 3points '3points
 3pts '3points

LÍNEAS:
 paralela 'parallel
 ortogonal 'orthogonal
 perpendicular 'orthogonal
 to circle
 centro-radio 'center-radius
 centro-segmento 'center-segment

POLÍGONOS:
 npuntos 'npoints

NÚMEROS:
 longitud-segmento 'segment-length
 norma-vector 'vector-norm
 longitud-vector 'vector-norm
 punto-recta 'point-line
 punto-círculo 'point-circle
 punto-circulo 'point-circle
 punto-punto 'point-point
 perímetro-círculo 'circle-length
 perimetro-circulo 'circle-length
 longitud-círculo 'circle-length
 longitud-circulo 'circle-length
 pendiente-línea 'line-slope
 pendiente-linea 'line-slope
 pendiente-recta 'line-slope
 longitud-arco 'arc-length

ÁNGULOS:
 geométrico 'geometric
 geometrico 'geometric
 orientado 'oriented

TRANSFORMACIONES:
 rotación 'rotation
 rotacion 'rotation
 homotecia 'scale
 escala 'scale
 simetría 'symmetry
 simetria 'symmetry
 reflexion 'reflexion
 translación 'translation
 translación 'translation
 traslación 'translation
 traslacion 'translation

GENERAL:
 sea lets
 nueva-figura new-figure
 figura-nueva new-figure
 enviar send
 envía send
 envia send
 Punto Point
 Recta Line
 Línea Line
 Linea Line
 Segmento Segment
 Semirrecta Ray
 Rayo Ray
 Círculo Circle
 Circulo Circle
 Arco Arc
 Arco Arc
 Lugar-geométrico Locus
 Lugar-geometrico Locus
 Vector Vector
 Numérico Numeric
 Numerico Numeric
 Número Numeric
 Numero Numeric
 Ángulo Angle
 Angulo Angle
 Polígono Polygon
 Poligono Polygon
\end{verbatim}
\T \end{multicols}

\subsection{Galería de Ejemplos}
\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{}{}

Para ilustrar la utilización de las Figuras Scheme de \drgeo,
proponemos una breve serie de ejemplos.  En ellos mostraremos el
potencial de las FSD y esperamos igualmente que le sean una fuente de
inspiración.  Para cada uno de estos ejemplos damos el código fuente
en Scheme de la figura, y en seguida el resultado.  El código fuente
puede ser copiado dentro de un archivo de texto con un editor, y luego
guardado con la extensión \textbf{.scm} con lo que podrá ser evaluado
después por \drgeo.

% AGRUGUÉ EL SIGUIENTE PÁRRAFO.

El código siguiente se encuentra en Inglés.  Favor de ver la sección
Sinónimos para poder escribir la mayor parte del código en Español.

\subsubsection{Polígono Regular}
\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{Polígono
  regular}{}

Para construir un polígono regular, con un número arbitrario de lados,
podemos hacer uso de una función recursiva en Scheme. 

\begin{verbatim}
(define pi (acos -1))
(define n 15)
(define x0 0)
(define y0 0)
(define p1 0)

(define (polygon center p a n)
  (if (> n 0)
      (begin
        (set! p1 (Point "" rotation p center a))
        (send p1 masked)
        (Segment "" extremities p p1)
        (polygon center p1 a (- n 1)))))

(new-figure "Regular Polygon!")
(lets Point "C" free x0 y0)
(lets Numeric "a" free 0 0 (* 2 (/ pi n)))
(send a masked)

(set! p1 (Point "I" free 5 0))

(lets Segment "S" extremities C p1)
(Segment ""  rotation S C a)

(polygon C p1 a n)
\end{verbatim}

\drgeniusFigureSize{Un polígono regular de 15 lados}{fig59}{6}


\subsubsection{Fractal}
\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{Fractal}{}

La construcción de una curva fractal con la forma de un árbol se logra
fácilmente con una Figura Scheme.  El código fuente de la figura es
sorprendentemente breve, sobre todo cuando lo comparamos con la
construcción ``a mano'' usando la interfaz gráfica.

\begin{verbatim}
(new-figure "Baum")
(lets Numeric "A1" free 2 2 +3.4)
(lets Numeric "A2" free 2 3 -3.7)
(lets Numeric "S1" free 2 4 +0.5)
(lets Numeric "S2" free 2 5 +0.9)

(define (dec n)
  (- n 1))
(define (inc n)
  (+ n 1))
(define (invisible p)
  (send p masked)
  p)
(define (scalerot oP C a s)
  (let* ((sP (invisible (Point "" scale oP C s)))
         (rP (invisible (Point "" rotation sP C a))) )
    rP))
(define (Zweig p0 p1 n)
  (Segment "" extremities p0 p1)
  (let* ((left-scale (if (odd? n) S1 S2))
         (left-angle A1)
         (right-scale (if (odd? n) S2 S1))
         (right-angle A2) )
    (if (> n 0)
      (begin
        (Zweig p1 (scalerot p0 p1  left-angle  left-scale) (dec n))
        (Zweig p1 (scalerot p0 p1 right-angle right-scale) (dec n))))))
        
(lets Point "A" free -3 0)
(lets Point "B" free -3 2)
(Zweig A B 6)
\end{verbatim}

\drgeniusFigureSize{Una curva fractal que simula la representación de
  un árbol}{fig60}{8}


\section{Bloquear las Herramientas de la Interfaz}
\label{ui-lock}

\drgeo\ ofrece la posibilidad de preparar sesiones\footnote{Archivos
  que contienen varios documentos de \drgeo\ (i.e. figuras y/o texto)}
dentro de los cuales el maestro puede decidir, para ciertas figuras,
impedir el acceso a ciertas herramientas. El bloqueo se realiza
utilizando una contraseña distinta para cada figura. Esto da al
maestro flexibilidad al preparar una actividad con distintas figuras,
y diversas herramientas disponibles en cada figura.


\subsection{Bloqueo de las Herramientas}


\drgeniusIndex{Herramientas}{Bloquear}{}{}

% I FOLLOWED THE ITALIAN, THE FIRST LINE IS CRYPTIC.

Para impedir el acceso a las herramientas de construcción recurrimos
al comando \drgeniusMenu{Editar->Personalizar interfaz}.  Después de
haberlo seleccionado se abre una gran ventana de diálogo con todos los
íconos de los instrumentos de \drgenius.  Allí, podemos hacer click
sobre los íconos para activarlos o desactivarlos.  Cuando una
herramienta está desactivada, el ícono que la representa aparece
ligeramente desvanecido.  Es igualmente posible desactivar todas las
herramientas en una misma columna haciendo click en el ícono principal
del menú (que se reconoce por tener un pequeño triángulo verde en la
parte inferior derecha).

\drgeniusFigureSize{Ventana de diálogo para bloquear algunas
  herramientas de la interfaz}{fig53}{8}



Cuando el usuario ha terminado de seleccionar los íconos que han de
ser bloqueados, se procede al bloqueo propiamente dicho haciendo click
sobre el botón \drgeniusMenu{bloqueo} en la ventana de diálogo.  En
este momento, \drgenius\ pedirá una contraseña.



\drgeniusNote{Cuando se guarda una figura o una sesión en que se
  impide el acceso a ciertas herramientas, las contraseñas son
  igualmente guardadas, de forma encriptada, en el archivo}




\subsection{Desbloqueo de las Herramientas}


\drgeniusIndex{Herramientas}{Desbloqueo}{}{}


% I AM NOT SURE !! I SKIPPED ONE COMMENT IN THE TRANSLATION!!!

Es por supuesto posible desbloquear la interfaz, ya sea para dar
acceso progresivo a las herramientas --~estando en la clase con los
estudiantes-- o para volver a diseñar la figura.  Para ello, se
necesita escoger dentro de la ventana de diálogo el botón
\drgeniusMenu{Desbloquear}. \drgenius\ pide entonces la contraseña que
se ingresó previamente.




\drgeniusFigure{La ventana de diálogo para desbloquear la interfaz de
  una figura.}{fig54}


\chapter{Archivos y Documentos}


Las construcciones pueden ser guardadas de dos maneras.  Una
construcción por archivo o un conjunto de construcciones por archivo
(i.e. una sesión de \drgenius).  Le recordamos que los 
documentos que contienen las figuras debes ser guardados 
con una extensión \textbf{.fgeo} y que
aquellos que contengan sólo macros que sean guardados con la 
extensión \textbf{.mgeo}.  Para los documentos que contienen 
varias figuras, construcciones de 
macros y textos explicativos, utilizar la extensión \textbf{.fgeo}

Lo anterior es sólo indicativo, pero seguir estas reglas 
permitirá identificar y volver a cargar los archivos más fácilmente.

\section{Guardar una Construcción}

\drgeniusIndex{Figura}{Guardar}{}{}

A partir del menú \drgeniusMenu{Archivo->Guardar} o del menú
\drgeniusMenu{Archivo->Guardar como...}, un archivo que contiene la
figura de la vista activa puede ser guardada.
\drgeniusNote{\drgenius\ puede trabajar con varias figuras al mismo
  tiempo.  El usuario puede pasar de una figura a otra haciendo click
  sobre el nombre de la figura (ubicado en la parte baja de la
  figura).}.

Con el segundo menú, el usuario puede cambiar el nombre del documento
a guardar.


\drgeniusNote{El nombre del archivo inicialmente propuesto puede ser
  cambiado con el menú\drgeniusMenu{Editar->Preferencias...}.  Para
  más información ver la \link{sección comportamiento predeterminado}[
  Sección \Ref, página \Pageref]{default_behaviour}.}

\section{Guardar una Sesión}

\drgeniusIndex{Macro}{Guardar}{}{}
\drgeniusIndex{Sesión}{Guardar}{}{}


Una sesión es un conjunto de objetos de \drgenius\ que el usuario
desea guardar de un solo golpe en un archivo.  Esto permite al maestro
organizar un conjunto de objetos (figuras, macros y notas de clase) en
un solo archivo con el fin de facilitar su uso.


A partir del menú \drgeniusMenu{->Guardar múltiple}, el usuario puede
abrir la ventana de diálogo de la sesión.

\drgeniusFigureSize{La ventana de diálogo de la sesión
  \drgenius}{fig51}{8}

En esta ventana de diálogo, la lista de todos los objetos activos está
presente en una tabla.  La primera columna muestra los tipos de
objetos contenidos en la sesión de \drgenius, la segunda muestra los
nombres de los objetos.



\drgeniusNote{De hecho, una sesión puede contener tres tipos de
  objetos~: figuras interactivas en dos dimensiones, macros y textos.}

El usuario puede seleccionar uno por uno los objetos a guardar y
después hacer click en el botón\drgeniusMenu{Guardar selección}.
Alternativamente, puede guardar todos los objetos haciendo click sobre
el botón \drgeniusMenu{Guardar todo}.

\drgeniusNote{El menú \drgeniusMenu{Archivo->Guardar múltiple} es el
  único medio de guardar una macro en un archivo.}

\section{Guardar una Macro}
\drgeniusIndex{Macro}{Guardar}{}{}
Para guardar una o varias macros en un archivo.  es necesario proceder como
cuando uno desea guardar una sesión --guardar múltiple--.  Posteriormente
, en la ventana para guardar una sesión, seleccionar la o las macros que se
desea guardar.  En seguida guárdelas en un archivo que contenga la extensión
\textbf{.mgeo}. ¡Eso es todo!

Es de este modo posible crear bibliotecas de macros, una por 
archivo, o varias agrupadas por temas en un sólo archivo.



\section{Abrir un Archivo}

\drgeniusIndex{Macro}{Abrir}{}{} 
\drgeniusIndex{Sesión}{Abrir}{}{}
\drgeniusIndex{Figura}{Abrir}{}{}

Ya sea que el usuario haya guardado una sola figura o una sesión con
los distintos objetos, el procedimiento para la apertura de cualquier
tipo de archivo es siempre a través del menú
\drgeniusMenu{Archivo->Abrir}.  Si la sesión recién abierta contiene
macros, estas están directamente disponibles a partir de que la
herramienta para ejecutar macros esté disponible para la ejecución.
Las macros están disponibles para todas las figuras abiertas.


\section{Exportar una Figura}

\drgeo\ ofrece la posibilidad de exportar una figura geométrica a un
documento \LaTeX o PostScript.  Estos dos formatos de exportación son
de tipo vectorial, a diferencia de las imágenes de mapas de bits que
son de menor calidad para una impresión.  Los comandos de exportación
son accesibles a través del menú \drgeniusMenu{Archivo->Exportar
  como...}

\subsection{Exportar a  \LaTeX}
\drgeniusIndex{Figura}{Exportar}{\LaTeX}{}

En el caso de una exportación al formato \LaTeX, el documento
exportado necesita el paquete \texttt{pstricks}.  Éste es en general
distribuido con \LaTeX.  Típicamente un documento exportado en \LaTeX\ 
podrá ser integrado dentro de otro documento \LaTeX\ o bien
directamente compilado con los comandos:

\begin{verbatim}
latex figure.tex
dvips figure.dvi 
\end{verbatim}

Esta serie de comandos permite obtener el documento figure.ps, el cual
puede ser abierto por el programa GhostView\footnote{GhostView es un
  programa que permita visualizar documentos PostScript (.ps o .eps)
  así como documentosPDF} \texttt{gv}.


\subsection{Exportar a PostScript}
\label{exporter-ps}
\drgeniusIndex{Figura}{Exportar}{PostScript}{}

La exportación al formato PostScript -- extensión \texttt{eps} --
ofrece la ventaja de ser fácilmente utilizable por diversos programas
\footnote{Este formato es reconocido por TeXmacs, OpenOffice.org, Lyx,
  \LaTeX\, Xfig, el Gimp y muchos más.}.  En efecto, el formato \textsc{eps} es
cercano a ser un estándar en lo que se refiere a imágenes
vectoriales.  Para visualizar rápidamente este tipo de
imágenes,utilizamos, como ya antes mencionamos, el programa GhostView;
en una terminal se invoca escribiendo \texttt{gv}.

\subsection{Exportar a \textsc{png}}
\drgeniusIndex{Figura}{Exportar}{PNG}{}

Ciertos programas como OpenOffice.org sólo explotan parcialmente el
formato \textsc{eps}\footnote{OpenOffice.org permite integrar una 
imagen \textsc{eps} pero no la puede mostrar.  Únicamente en la 
impresión en papel aparecerá la imagen}. 

Es posible, afortunadamente, exportar al formato \textsc{png}.  
La imagen exportada bajo este formato tiene una alta definición 
y posee un fondo transparente.  Esto puede permitir escribir un
 texto a lo largo de la figura.

\subsection{Exportar Fly Draw}
\drgeniusIndex{Figura}{Exportar}{Fly Draw/WIMS}{}

El servidor de ejercicios WIMS desarrollado por el Dr. Xiao
 Gang en la universidad de Nice dispone de un formato de 
descripción de figuras llamado Fly Draw.  \drgeo\ puede 
exportar hacia ese formato.

\subsection{Definir el Área de Exportación}
\drgeniusIndex{Figura}{Exportar}{Definir el área de exportación}{}

Inicialmente, \drgeo\ exporta la zona visible de la figura. Por lo
anterior, si deseamos exportar una zona precisa de la figura, una
manera de hacerlo es redimensionar la ventana de \drgeo\ hasta obtener
la zona deseada \footnote{Cuando lo deseemos, el panel lateral que
  contiene el árbol lógico de la figura, puede ser desplegado
  reduciendo aún más la zona visible, y, en consecuencia, el área de
  exportación.}.

Esta solución, empero, aunque rápida y simple, no es lo
suficientemente flexible.  Además, el área de exportación no queda
guardada junto con la figura.  Afortunadamente, existe otro modo de
definirla usando el comando \drgeniusMenu{Definir el área de
  exportación} el cual es accesible desde el menú
\drgeniusMenu{Archivo->Preferencias de Exportación}

Habiendo seleccionado el comando, podemos seleccionar un rectángulo en
la figura que corresponderá con el área de exportación.  Esta área
puede ser redefinida tantas veces como sea necesario.  En la figura
estará representada por un rectángulo gris claro.  Cuando la figura
sea guardada, esta zona lo será también.

Para suprimir el área de exportación y regresar al comportamiento
inicial de \drgeo\ use el comando \drgeniusMenu{Eliminar área de
  exportación}, el cual, por supuesto, no borra ningún objeto de la
figura.


\drgeniusFigureSize{Una figura con un área de exportación
  definida}{fig56}{7}

\drgeniusFigureSize{El área de exportación ha sido exportada a un
  documento PostScript; es visible con el programa
  GhostView}{fig57}{7}

\chapter{Aplicaciones Didácticas}

Este capítulo constituye una ayuda para el usuario que desea familiarizarse
con \drgeo{} a través de ejemplos.  A diferencia de los capítulos precedentes,
el enfoque es más concreto, y es orientado a situaciones precisas.  
El capítulo consiste en diversas aplicaciones pedagógicas.

\section{Pitágoras y  Scripts}

Una de las aplicaciones didácticas en \drgeo{} consiste en la 
utilización de los 
\link{scripts Scheme}[ Sección \Ref, página \Pageref]{script} 
para resolver ejercicios de Geometría.

Como ejemplo, vamos a mostrar la solución a un problema 
clásico en cuya solución se usa el teorema de Pitágoras.
  El texto es el siguiente~:

\begin{quote}
\em Sea un trapecio rectángulo $ABCD$ del que son 
conocidas las bases y la altura.  Calcular el perímetro 
y el área del trapecio.
\end{quote}

No es difícil, siguiendo el mismo modelo, desarrollar otros ejemplos semejantes.

\textbf{Solución~:}

Comencemos por construir la figura en \drgeo{}, la cual debe ser como sigue~:

\drgeniusFigureSize{Trapecio Rectángulo}{dafig1}{8}

La figura contiene los datos a partir de los cuales podemos
resolver el problema.  Podemos contestar enseguida la pregunta
relacionada con el área, para ello podemos escribir el script Scheme
siguiente que tiene como entradas las dos bases y la altura del trapecio~:

\drgeniusIndex{Script}{Ejemplos}{Área de un trapecio}{}

\begin{quote}{\begin{verbatim}
define AB (getLength a1))
(define DC (getLength a2))
(define AD (getLength a3))
(/ ( * AD (+ AB DC )) 2 )
\end{verbatim}
}
\end{quote}

\drgeniusIndex{Script}{Ejemplos}{Diferencia en la 
longitud de dos segmentos}{}
Calculamos la longitud del segmento $BH$ escribiendo
 un script Scheme que tiene por parámetros de entrada a los
 segmentos $AB$ y $CD$.  El texto del script
es el siguiente~:
\begin{quote}{\begin{verbatim}
(define AB (getLength a1))
(define CD (getLength a2))
(- AB CD)
\end{verbatim}
}
\end{quote}

\drgeniusIndex{Script}{Ejemplos}{Teorema de Pitágoras}{}
En este momento, podemos aplicar el Teorema de Pitágoras 
al triángulo rectángulo $CHB$.  Aquí también utilizamos un 
script Scheme que tiene por parámetros de entrada al 
segmento $CH$ y al script $BH$~:

\begin{quote}
{
\begin{verbatim}
(define CH (getLength a1))
(define BH (getValue a2))
(+ (* CH CH) (* BH BH))
\end{verbatim}
}
\end{quote}

\drgeniusIndex{Script}{Ejemplos}{Raíz cuadrada}{}
Finalmente, podemos obtener el valor del segmento $BC$ calculando 
la raíz cuadrada del valor devuelto por el script anterior~:
\begin{quote}
{
\begin{verbatim}
(define q (getValue a1))
( sqrt q )
\end{verbatim}
}
\end{quote}

Los dos scripts anteriores pueden ser combinados en un solo script un poco más elaborado.


\drgeniusIndex{Script}{Ejemplos}{Perímetro}{}
Ahora podemos concluir el ejercicio calculando el perímetro con un script Scheme~:
\begin{quote}
{
\begin{verbatim}
(define AB (getLength a1))
(define CB (getValue  a2))
(define DC (getLength a3))
(define AD (getLength a4))
(+ (+ AB CB )(+ DC AD ))
\end{verbatim}
}
\end{quote}

\section{Teoremas y Conjeturas}

Los  
\link{scripts Scheme}[ Sección \Ref, página \Pageref]{script}
permiten  no sólo resolver ejercicios, sino también 
comprender mejor el enunciado de los teoremas (y las 
hipótesis de los mismos) así como corroborar o descartar conjeturas.

En esta sección comenzaremos analizando el enunciado del  Teorema de Ptolomeo~:

\begin{quote}
\em Dado un cuadrilátero inscrito en una circunferencia, 
la suma de los productos de los lados opuestos es igual al
 producto de las diagonales.
\end{quote}

Podemos construir la figura con \drgeo{} como abajo~:

\drgeniusFigureSize{Teorema de Ptolomeo: cuadrilátero convexo}{dafig2}{8}

En la figura, hemos implementado dos scripts que calculan, 
respectivamente, la suma del producto de los lados opuestos, 
y el producto de las diagonales.
\drgeniusIndex{Script}{Ejemplos}{Teorema de Ptolomeo}{}

El primer script es el siguiente~:
\begin{quote}
{
\begin{verbatim}
(define AB (getLength a1))
(define DC (getLength a2))
(define BC (getLength a3))
(define AD (getLength a4))
(+ (* AB DC )(* BC AD ))
\end{verbatim}
}
\end{quote}

El segundo script es~.
\begin{quote}
{
\begin{verbatim}
(define DB (getLength a1))
(define AC (getLength a2))
(* DB AC )
\end{verbatim}
}
\end{quote}

Como podemos ver, los valores devueltos por los dos 
scripts, en conformidad con el Teorema de Ptolomeo, 
son iguales \footnote{Esto es una verificación numérica;
 no una prueba}.  Cuando modificamos dinámicamente la 
figura, los valores de los scripts son idénticos, salvo
 en el caso siguiente~:

\drgeniusFigureSize{Teorema de Ptolomeo: cuadrilátero 
no convexo}{dafig3}{8}

Vemos en la figura que el cuadrilátero ya no es convexo.

En este caso el enunciado del Teorema es falso.  Por lo 
tanto, para contemplar ese caso, debemos reformular el 
enunciado como sigue~:

\begin{quote}
\em Dado un cuadrilátero  CONVEXO inscrito en una 
circunferencia, la suma del producto de lados opuestos 
es igual al producto de las diagonales..
\end{quote}

En este momento las conjeturas aparecen de modo natural~:
  ¿es acaso valida la conclusión del teorema de Ptolomeo
 también valida para un cuadrilátero convexo no inscrito
 en un círculo~?(i.e. ¿es cierto el recíproco?)

Con \drgeo{} podemos ver que dicha conjetura es falsa como muestra la  figura siguiente~:

\drgeniusFigureSize{Refutación de la conjetura}{dafig4}{8}

El lector no tendrá problemas en utilizar \drgeo{} para 
la construcción de ejemplos didácticos, relacionados 
probablemente con teoremas más conocidos, como el Teorema
 de Pitágoras o alguno de los teoremas de Euclides.

\section{Números Irracionales}
\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{Espiral de Teodoro}{}

Una construcción clásica, relacionada con los números 
irracionales,  conocida bajo el nombre de ``Espiral de 
Teodoro'' permite construir geométricamente la raíz 
cuadrada de números enteros a partir de un triángulo isósceles.

Consideremos el triángulo $OAB$ donde  $OA=1$~:

\drgeniusFigureSize{Construcción de la raíz cuadrada de 2}{dafig7}{8}

Por el teorema de Pitágoras, tenemos que $OB$ es igual
 a la raíz cuadrada de 2.  Si, ahora, con la figura, 
construimos un nuevo triángulo rectángulo en $B$, con 
lados $OB$ y $BC$ tal que $BC=1$.

\drgeniusFigureSize{Construcción de la raíz de 3}{dafig8}{8}

Nuevamente, por el teorema de Pitágoras, es claro que la 
hipotenusa $OC$ del triángulo $OBC$ tiene por longitud la 
raíz cuadrada de 3.  Repitiendo este proceso obtenemos 
todas las raíces cuadradas de los números naturales.

La naturaleza repetitiva de la construcción se presta 
perfectamente para la utilización de un FSD.  Consideremos
 el código siguiente~:

\begin{quote}
{
\begin{verbatim}
(new-figure "Triangle")

(define (triangle p1 p2 p3 n)
  (let* ((s1 (Segment "" extremities    p1 p2))
         (s2 (Segment "" extremities    p2 p3))
         (s3 (Segment "" extremities    p3 p1))
         (pe (Line    "" orthogonal     p3 s3))
         (ci (Circle  "" center-segment p3 s2))
         (p4 (Point   "" intersection2  pe ci)))
    (send pe masked)
    (send ci masked)
    (send p4 masked)
    (if (> n 0)
       (triangle p1 p3 p4 (- n 1)))))


(lets Point "O" free  0  0)
(lets Point "A" free -1  0)
(lets Point "B" free -1  1)
(triangle O A B 15)
\end{verbatim}
}
\end{quote}

El triángulo inicial está definido a través de 
coordenadas por comodidad únicamente.  El código es 
la transcripción literal del procedimiento repetitivo 
previamente descrito.  Una vez evaluado por \drgeo{}, 
el código nos da la siguiente figura~:

\drgeniusFigureSize{Espiral de  Teodoro}{dafig9}{8} 
 
Las hipotenusas de cada triángulo tienen por longitud 
las raíces cuadradas de los números enteros naturales 
entre 2 y 17.


\section{Espiral de Baravelle}

\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{Espiral de
Baravelle}{}

Como vimos anteriormente, con la ayuda de una FSD es
 posible construir de manera intuitiva y simple 
figuras que permiten visualizar situaciones que en un
 programa son ya sea iterativas o recursivas.

Profundicemos un poco más en este aspecto.  Modificando
 el código Scheme utilizado para la construcción de los
 números irracionales,  podemos obtener una figura famosa
 en la literatura matemática:  la espiral de Baravelle.

El código Scheme que define la espiral es el siguiente~:

\begin{quote} 
\begin{verbatim} 
(new-figure "Baravelle")
 
(define (triangle p1 p2 p3 n)   
  (let* ((s1  (Segment "" extremities    p1 p2))
         (s2  (Segment "" extremities    p2 p3))
         (s3  (Segment "" extremities    p3 p1))
         (m   (Point   "" middle-2pts    p1 p3))
         (r   (Segment "" extremities    m  p3))
         (pe  (Line    "" orthogonal     p3 s3))
         (ci  (Circle  "" center-segment p3 r ))
         (p4  (Point   "" intersection2  pe ci)))
    (send pe  masked)
    (send ci  masked)
    (send p4  masked)
    (send m   masked)
    (if (> n 0)
      (triangle  m  p3  p4 (- n 1)))))
   
 
(lets Point "A" free  0  5)
(lets Point "B" free  5  5)
(lets Point "C" free  5  0)
(triangle A B C 9)
 
(lets Point "D" free  0 -5)
(lets Point "E" free -5 -5)
(lets Point "F" free -5  0)
(triangle D E F 9)
\end{verbatim}
\end{quote}

\drgeniusFigureSize{La espiral de Baravelle obtenida al evaluar el código Scheme}{dafig10}{8}


Con base en la figura y en el código Scheme 
correspondiente, vemos claramente la naturaleza 
iterativa del mecanismo de construcción de la figura. 
 Un problema interesante, que dejamos al lector, 
consiste en establecer en qué momento las dos ramas
 de la espiral convergen.

Una pequeña variación al código precedente~:


\begin{quote}
\begin{verbatim}
(new-figure "Spirale")

(define (square p1 p2 p3 p4 n)
  (let* ((s1 (Segment "" extremities p1 p2))
         (s2 (Segment "" extremities p2 p3))
         (s3 (Segment "" extremities p3 p4))
         (s4 (Segment "" extremities p4 p1))
         (A (Point "" on-curve s1 1/10))
         (B (Point "" on-curve s2 1/10))
         (C (Point "" on-curve s3 1/10))
         (D (Point "" on-curve s4 1/10)))
     (send A masked)
     (send B masked)
     (send C masked)
     (send D masked)
     (if (> n 0)
       (square A B C D (- n 1)))))

(lets Point "M" free 5 5)
(lets Point "N" free -5 5)
(lets Point "O" free -5 -5)
(lets Point "P" free 5 -5)

(square M N O P 30)
\end{verbatim}
\end{quote}


Obtenemos, pues, una espiral simplificada.
 
\drgeniusFigureSize{Espiral simplificada}{dafig11}{8}

El lector está invitado a divertirse creando nuevas variaciones.

\T \clearpage

\section{Cadena de Papus}
\drgeniusIndex{Figura Scheme de \drgeo}{Ejemplos}{Cadena de Papus}{}


Una aplicación de las Figuras Scheme de \drgeo\ consiste 
en la reproducción de una figura cuando sólo conocemos sus 
características analíticas.

Nos proponemos desarrollar un ejemplo famoso: ``La Cadena de Papus''.

\drgeniusFigureSize{Cadena de Papus}{dafig12}{8}

Los centros y los radios de los círculos que la constituyen 
tienen una expresión analítica conocida, y es sencillo 
implementar la expresión analítica en una FSD que reproducirá la figura.
  
\begin{quote}
\begin{verbatim}
(new-figure "Pappo")

(define (circle n)
(let*(
  (r (Numeric "" free 0 0 (/ 15 ( + 6 (* n n )))))
  (c (Point   "" free (* 5 (/ 15 ( + 6 (* n n )))) 
                      (* 2 (* n (/ 15 ( + 6 (* n n )))))))
  (p (Circle "" center-radius c r )))
 (send r masked)
 (if (> n 0)
    (circle (- n 1)))))

(circle 8)

(lets Point "A" free 5 0)
(lets Point "O" free 0   0)
(lets Point "B" free 15 0)
(lets Point "M" middle-2pts B O)
(lets Circle "" 2points M O)
(lets Circle "" 2points A O)
(lets Line   "" 2points A O)
\end{verbatim}
\end{quote}

El código de la figura es relativamente intuitivo y no necesita mayor comentario.

Un ejercicio no trivial, que dejamos al lector, 
consiste en determinar una construcción con regla 
y compás que conduzca a una implementación iterativa. (la 
implementación dada es recursiva).

\section{Cálculo de $\pi$}

El cálculo aproximado de $\pi$ ha tenido un papel importante
  en la historia de las Matemáticas.  Los métodos para su 
cálculo son diversos, teniendo mejoras de uno a otro método. 
Nos proponemos atacar el problema  con un método que llamaremos, 
aunque no sea del todo apropiado, \textbf{Método de Exhaución}. 
 Éste método tiene la ventaja de mostrar la esencia misma del 
problema. (El método siguiente fue desarrollado por Arquímedes 
usando el método de Exhaución desarrollado por  Eudoxo, el cual
 fue precursor de la teoría de límites).

Comenzaremos con la construcción de un hexágono regular inscrito
 en una circunferencia a partir de su lado $BC$.  Notemos de
 paso que es posible a partir de esta construcción crear y 
memorizar una macro que llamaremos \textit{Hexágono} 

\drgeniusFigureSize{Hexágono regular inscrito}{dafig5}{8}

La idea del método de exhaución consiste en primero aproximar
 la longitud del círculo con el perímetro $P_{0}$ del hexágono
 y de calcular una aproximación de $\pi$ dividiendo $P_{0}$ 
por el diámetro del círculo.  Claramente, la aproximación 
obtenida sera de 3.

En una segunda etapa podemos, utilizando \drgeo{}, construir 
dentro de la misma circunferencia, un dodecágono regular. 
Calculemos su perímetro,$P_{1}$, y dividamos por el diámetro
 de la circunferencia.  Esto nos dará una mejor aproximación.

\drgeniusFigureSize{Aproximación de $\pi$}{dafig6}{8}

Duplicando en cada paso el número de lados del polígono 
regular inscrito obtenemos mejores aproximaciones.


\chapter{Libro de Recetas}

Este capítulo constituye una ayuda para el usuario que desea realizar
construcciones geométricas con \drgeo.  Contrariamente a los
capítulos precedentes, el enfoque es hacia problemas precisos.  El
contenido de este capítulo es fruto del uso que los usuarios han hecho
del programa, y responde a algunas peticiones de los mismos.

\section{Crear un Polígono Regular}
\label{polygon_macro}

\drgeniusIndex{Macro}{Polígono}{}{}
\drgeniusIndex{Polígono}{Macro}{}{}
\drgeniusIndex{Macro}{Script}{}{}

\drgeo\ puede crear varias macros con elementos 
independientes (i.e. varios puntos libres, valores
 libres o  scripts independientes).  Para hacer esto
 drgeo dota de valores a los parámetros libres de esos
 objetos \footnote{Si no, las macros no podrían ser 
llamadas.  Por ejemplo,¿qué valor debemos dar a un 
objeto tipo valor libre que interviene dentro de la 
construcción de una figura?}. \drgeo\ puede crear 
varias macros.  El o los valores escogidos son, en 
efecto, los valores del objeto que sirvió de modelo
 durante la creación de la macro.

En lo que sigue, un pequeño ejemplo que permite crear
 polígonos regulares de cualquier número de lados es 
presentado.  En varias de las macros, un script Scheme
 interviene en el proceso.

El ejemplo es mostrado paso a paso; aunque el lector 
no familiarizado con las macros, los scripts o más 
generalmente el funcionamiento de \drgeo\ está invitado
 a leer las secciones anteriores.

\subsection{El Modelo del Polígono}

Para comenzar, crearemos un punto libre, en seguida 
un Script que no tome parámetros de entrada (para 
crear el script, seleccionar la herramienta script
 y hacer enseguida click sobre el fondo de la figura). 
 Editar el script  y escribir lo siguiente~:

\begin{verbatim}
(/ (* 2 (acos -1)) 7)
\end{verbatim}

El resultado de este script es el valor del script y servirá para construir, a través de una rotación, un polígono regular de 7 lados.  Colocar enseguida un valor libre con valor 2.  Éste será el radio de nuestro polígono.

Construir un círculo con centro el punto libre,  y con radio 
el valor recién creado.  Sobre este círculo colocar un punto.  
Llamemos a este último punto $O$.

Ahora utilicemos la herramienta rotación para crear la 
imagen del punto $O$ bajo  la rotación con centro de 
rotación en el centro del círculo, y con un ángulo de 
rotación cuyo valor es el valor del script. Continuar 
sucesivamente hasta obtener los siete vértices del 
polígono.  Unir los vértices con los segmentos hasta 
obtener el polígono.

\drgeniusFigureSize{Resultado de construir un polígono
 regular de 7 lados.}{fig61}{8}

\subsection{La Macro del Polígono}

Abrir el diálogo para la creación de la macro y 
crearla como se indica a continuación~:

\begin{enumerate}
\item \textbf{parámetro de entrada~:} el centro 
del círculo~;
\item \textbf{parámetros de salida~:} el punto  
$O$ y los 7 lados del polígono.
\end{enumerate}

Listo, la macro ha sido creada.

Para crear un polígono regulara de 7 lados, abrir
 la ventana de diálogo para ejecutar una macro.  
Basta seleccionar un punto de la figura para crear
 un polígono de 7 lados.

\subsection{Algunas Consideraciones}

Cuando \drgeo\ encuentra los elementos libres 
en una macro, fija sus valores tomando a la 
figura como modelo.  En nuestro ejemplo, el script,
 el valor del radio y el punto $O$ son los elementos
 libres de los que hablamos.  Cuando la macro es 
ejecutada, sus valores se fijan como sigue~:

\begin{itemize}
\item El valor se fija 2~;
\item el script se fija en  \texttt{(/ (* 2 (acos -1)) 7)}~;
\item el punto sobre el círculo se fija con la 
misma abscisa curvilínea que la que tenía el punto $O$..
\end{itemize}

Es esto último lo que da sentido a la utilización 
conjunta de macros con scripts u otros elementos libres.

En otras palabras: Por ejemplo, si para construir 
una figura necesitamos 7 elementos libres al 
empezar, y al crear la macro sólo damos 1, el 
resto de los elementos libres necesarios para 
la figura se toman de la figura que sirvió de modelo.

\section{Imprimir una Figura}

\drgeniusIndex{Figura}{Imprimir}{}{}
\drgeniusIndex{Imprimir}{Figura}{}{}

Lo más sencillo es exportar la figura al formato PostScript --
\link{Exportar a PostScript}[ Sección \Ref, página
\Pageref]{exporter-ps}.  En seguida es posible usar un programa que
permita visualizar los documentos e imprimirlos.  El documento, de
calidad vectorial, puede ser abierto e impreso por programas como
GhostView, Gnome GhostView o incluso K GhostView, por citar algunos.

\section{Colocar un Párrafo de Texto en la Figura}

\drgeniusIndex{Colocar}{Texto}{}{}
\drgeniusIndex{Figura}{Colocar}{Texto}{}
\drgeniusIndex{Texto}{colocar}{}{}

Uno puede ventajosamente utilizar los scripts de una manera
ciertamente imprevista.  Se selecciona la creación de un script
--\link{Herramienta Script}[ Sección \Ref, página
\Pageref]{script-tool} --, y se hace click sobre el fondo de la
figura.  De este modo un script sin parámetros de entrada es creado.

Enseguida se editan las propiedades del script -- \link{Propiedades de
  un objeto}[ Sección \Ref, página \Pageref]{property-item}.  En la
zona de texto donde el código Scheme es normalmente escrito, colocamos
un texto entre comillas precedido por una única apóstrofe, por
ejemplo~:


\begin{verbatim}

'"Animación \n  y \n  observaciones
=====================
Desplace los puntos de la figura para responder a las siguientes preguntas:
\n
1.¿Dónde hay que colocar al punto A para que el punto A' se confunda con el punto A?
2. ¿Dónde hay que colocar al punto A para que el punto A' coincida con el punto B?
3. ¿Cómo hay que colocar al punto I para que los puntos B', C' e I estén alineados?
4. ¿Cuál es el simétrico del punto I? ¿Cuál es el simétrico del punto A'?"

\end{verbatim}

\drgeniusFigureSize{Ejemplo de párrafo de texto dentro de una
  figura}{fig58}{10}

Como con todo script, es igualmente posible cambiar el color del
texto.  Observe que es posible usar algunos caracteres de control dentro del texto.

%  I ADDED THE FOLLOWING PARAGRAPH:
Ahora, supongamos que queremos combinar texto con valores numéricos que 
dependen de un cálculo, por ejemplo $17+187$.  Supongamos  que queremos
 escribir el texto 
``17 más 187 es  204''.  El siguiente script se encarga
de ello~:
\begin{verbatim}
(format #f "~s más  ~s es  ~s" 17 187 (+ 17 187))
\end{verbatim}



\W \chapter*{Índice} 
\W \htmlprintindex

\W \begin{iftex}
\appendix 
\listoffigures 
\printindex 
\W \end{iftex}

\chapter{Histórico}
\section*{Redacciones Originales de la Documentación}
Hilaire Fernandes (Inglés y Francés),  Andrea Centomo (Italiano).

\section*{Traducciones al Español}
Adrián Ulises Soto Bañuelos.

\section*{Relecturas}

\chapter{GNU Free Documentation License}
\input{../fdl}


\end{document}

% LocalWords:  Guile Homothétie homothétie macro-construction glisser-déposer
% LocalWords:  redessinée

