| 
 | 
|  | 
| 
 | 
| Este documento está disponible en los siguientes idiomas: English Castellano Deutsch Francais Turkce | 
| 
 ![[bayboraseckin]](../../common/images/article268/bayborabenlinux.gif)  por Baybora Baran and Seckin Gokaltun <baybora(at)be.itu.edu.tr, gokaltun(at)itu.edu.tr> Sobre el autor: Somos dos ayudantes de investigación en el Instituto de informática de ITU. Trabajamos con aplicaciones de ingeniería con ordenadores y empleamos Linux para ello... La página de Seckin está en www.be.itu.edu.tr/~seckin Taducido al español por: Miguel Alfageme Sánchez <malfageme(at)terra.es> Contenidos: 
 | 
| Utilizando PGPLOT para gráficos interactivos bajo Linux![[PgPlot for Linux]](../../common/images/article268/top.jpg)  Resumen: 
    En este artículo aprenderemos cómo contruir programas
    con gráficos interactivos escritos en Fortran. PGPLOT es la
    lista de subrutinas que necesitamos utilizar con nuestro código
    Fortran. Describiremos la instalación y algunas aplicaciones de
    las subrutinas PGPLOT. Se van a mostrar dos ejemplos, con el
    código Fortran incluído, que nos dará una idea de
    las posibles aplicaciones que podemos hacer con PgPlot.
    
 | 
La librería gráfica PGPLOT es un paquete gráfico para la realización de gráficas científicas simples, independiente del dispositivo y que se puede utilizar desde Fortran o C. Su objetivo consiste en la creación de imágenes gráficas con calidad para publicarse y todo con un mínimo esfuerzo. Para la mayoría de las aplicaciones, el programa puede ser independiente del dispositivo, y la salida puede redirigirse al dispositivo adecuado en el momento de la ejecución.
La librería PGPLOT consiste en dos partes principales: una parte independiente del dispositivo y un conjunto de subrutinas controladoras dependientes del dispositivo para la salida en varios tipos de terminales, displays, impresoras matriciales, impresoras láser, y plotters. Están soportados formatos de ficheros comunes, incluyendo PostScript y GIF. PGPLOT, en sí mismo está escrito en su mayor parte en Fortran-77 estándar.
Las subrutinas PGPLOT se pueden llamar directamente desde un programa Fortran-77 o Fortran-90. Se proporciona una librería C de enlace (cpgplot) y un fichero de cabecera (cpgplot.h) para permitir que el PGPLOT pueda ser invocado desde un programa C o C++; la librería de enlace maneja la conversión entre C y Fortran. PGPLOT ha sido probado con sistemas operativos UNIX (la mayoría de sus variantes, incluyendo Linux, SunOS, Solaris, HPUX, AIX, e Irix) y OpenVMS.
PGPLOT no es un software de dominio público. Sin embargo, está disponible gratuitamente para uso no comercial. El código fuente y la documentación tienen el copyright del California Institute of Technology con unas pocas subrutinas no estándar y dependientes del sistema. Para conseguir el fichero de instalación e instrucciones simplemente hay que pinchar aquí.
A continuación se presentan algunos ejemplos sencillos de aplicaciones PGPLOT para demostrar las posibilidades del PGPLOT.
![[Example1]](../../common/images/article268/example1.gif)
![[Example2]](../../common/images/article268/example2.gif)
![[Example3]](../../common/images/article268/example3.gif)
![[Example4]](../../common/images/article268/example4.gif)
![[Example5]](../../common/images/article268/example5.gif)
/usr/local/src/pgplot (directorio de
    distribución)
    /usr/local/pgplot (directorio destino)
cd pub/pgplot
binary
hash
get pgplot5.2.tar.gz
tar. ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz.
     
gunzip y tar para descomprimir
    el fichero y extraer su contenido. Esto creará el directorio
    pgplot (y subdirectorios) en el directorio actual. Es conveniente
    asegurarse que el directorio actual es donde se quiere crear el
    árbol de directorios de la ``distribución PGPLOT''.
    cd /usr/local/src
    gunzip -c pgplot5.2.tar.gz | tar xvof -
/usr/local/src/pgplot y
    sus subdirectorios.
     
mkdir /usr/local/pgplot
No se debe intentar crear la librería PGPLOT en el directorio de distribución.drivers.list del directorio de
    distribución al directorio destino, y entonces emplear un
    editor de textos para seleccionar los controladores de dispositivo.
    Este fichero contiene una línea por cada controlador disponible:
    borraremos la exclamación (!) del comienzo de la línea para
    incluir el controlador, o nos aseguraremos de que existe la
    exclamación si queremos excluir el controlador. Muchos
    de los controladores pueden ser utilizador únicamente en ciertos
    sistemas operativos (ver las notas en drivers.list),
    por lo que incluiremos sólo los controladores que tenemos
    planeado utilizar. PGPLOT se puede reconfigurar posteriormente
    recomenzando la instalación en este punto. La mayoría
    de las instalaciones deberían incluir: el dispositivo null
    (/NULL), impresoras PostScript (/PS, /VPS, /CPS, y /VCPS),
    terminales Tektronix (/TEK, /XTERM, y posiblemente otras variantes),
    y, si el sistema X window está disponible en el destino,
    los controladores X window (/XWINDOW, /XSERVE). También
    podríamos querer incluir los controladores para ficheros GIF
    (/GIF, /VGIF) o alguno de las otras impresoras.
    cd /usr/local/pgplot
    cp /usr/local/src/pgplot/drivers.list .
    vi drivers.list         (o nuestro editor preferido)
     
makemake, para
    generar un makefile UNIX estándar para nuestro sistema
    operativo, compiladores, y la lista de los controladores de
    dispositivo PGPLOT seleccionados. La información del
    Sistema operativo y compilador se obtiene de un fichero de
    configuración. Los ficheros de configuración
    están disponibles para los sistemas enumerados a
    continuación. Si nuestra configuración no es una de
    las que aparecen en la lista, o si tenemos problemas utilizando el
    makefile generado, más abajo podemos encontrar información
    acerca de la creación de nuestro propio fichero de
    configuración. f77 invoca el compilador GNU g77,
    entonces no podemos utilizar un fichero de configuración
    diseñado para, digamos, un compilador SPARC f77. Tendremos
    que crear un fichero de configuración especial. En la
    siguiente tabla, Arg#2 es un código para el sistema
    operativo, y Arg#3 es un código para los compiladores de
    Fortran y C. Para más información acerca de los
    sistemas soportados, podemos ver el fichero
    pgplot/sys_*/aaaread.me, donde * es una de las
    opciones para Arg#2.
    Arg#2   Arg#3
    ------  ------
    aix     xlf_cc
    alliant fortran_cc
    bsd     g77_gcc
    convex  fc_cc
    cray    cf77_cc
    epix2   f77_cc         (Control Data EP/IX 2.x)
    freebsd f77_cc
    fujitsu uxpm_frt_cc
    fujitsu uxpv_frt_cc
    hp      fort77_c89
    hp      fort77_gcc
    irix    f77_cc
    linux   absoft_gcc
    linux   f77_gcc
    linux   g77_elf
    linux   g77_gcc
    next    af77_cc
    next    f2c_cc
    next    g77_cc
    next    gf77_cc
    osf1    f77_cc
    osf1    f77_cc_shared
    sol2    f77_cc         (Solaris 2.x, SunOs 5.x)
    sol2    f77_gcc
    sol2    f90_cc
    sol2    g77_gcc
    sun4    f77_acc        (SunOS 4.x)
    sun4    f77_cc
    sun4    f77_gcc
    ultrix  f77_cc
    Si nuestro sistema es uno de los enumerados, procederemos de la
    siguiente manera: Estableceremos el directorio destino como
    nuestro directorio actual por defecto, p.e.,
    cd /usr/local/pgplot
    Ejecutaremos el script makemake desde el directorio
    de distribución: p.e.,
    /usr/local/src/pgplot/makemake  /usr/local/src/pgplot  linux
    El primer argumento proporcionado al makemake es el
    nombre del directorio de la distribución. Nótese que
    cuando ejecutamos makemake, nuestro directorio actual
    debería ser el directorio destino, i.e., el directorio en
    el que queremos dejar la librería compilada. drivers.list. ¡Regresaremos entonces al paso 4!
    Ejemplo
baybora@bilgi>../pgplot/makemake ../pgplot linux g77_gcc
For additional information, read file ../pgplot/sys_linux/aaaread.me
Reading configuration file: ../pgplot/sys_linux/g77_gcc.conf
Selecting uncommented drivers from ./drivers.list
Found drivers NUDRIV PSDRIV XWDRIV
Creating make file: makefile
Determining object file dependencies.
makemake genera un fichero
    makefile para su uso posterior, un fichero Fortran
    grexec.f que llama a los controladores de dispositivo
    seleccionados, y un fichero de texto rgb.txt que
    contiene definiciones de color para ser utilizadas por la PGSCRN.
    (Si ya tenemos un fichero rgb.txt, posiblemente
    modificado con nuestras propias definiciones a medida,
    makemake no lo modifica.)
    También copia dos ficheros include de Fortran que se
    necesitarán durante la compilación. Por tanto en
    este punto tendremos al menos los siguientes ficheros:
    drivers.list
     grexec.f
     grpckg1.inc
     makefile
     pgplot.inc
     rgb.txt
    
makemake dice que encontró se corresponde
    con aquellos que seleccionamos en drivers.list. Si
    nuestro sistema UNIX no es uno de los soportados listados
    anteriormente, crearemos nuestro propio fichero de
    configuración en el directorio destino, con el nombre
    local.conf. Lo mejor es copiar uno de los ficheros
    de configuración proporcionados (de
    pgplot/sys_*/*.conf), y entonces editarlo siguiendo
    los comentarios en el fichero. El procedimiento
    makemake utilizará local.conf
    si existe en el directorio actual, y si no especificamos Arg#3.
    Nótese que todavía debemos especificar Arg#2
   (sistema operativo).
     
make para compilar
    la librería PGPLOT siguiendo las instrucciones del
    makefile:
    make
Por defecto,make generará: una librería
    objeto, libpgplot.a; una librería compartida
    (si es posible para el sistema operativo seleccionado), el fichero de
    fuente binario PGPLOT grfont.dat, los programas de
    demostración pgdemo*, y un fichero de
    documentación pgplot.doc. Además, si el
    controlador /XWINDOW y/o /XSERVE fue seleccionado en el paso 4,
    generará un programa pgxwin_server, y si fue
    seleccionado el controlador /XDISP, generará un programa
    pgdisp. Si este paso se ejecuta correctamente, podemos
    teclear
    make clean
para eliminar los ficheros intermedios no necesarios. Entonces tendremos los siguiente ficheros en el directorio actual:drivers.list
     grexec.f
     grfont.dat (fichero de fuente binario)*
     libpgplot.a (librería PGPLOT)*
     libpgplot.so (librería compartida, opcional)*
     makefile
     pgdemo1 ... pgdemo16 (programas de demostración)
     pgdisp (requerido por el controlador /XDISP)*
     pgplot.doc (fichero ASCII de documentación)
     pgxwin_server (requerido por el controlador /XWINDOW)*
     rgb.txt (base de datos de colores)*
    
pgmdemo (progama ejecutable de demostración)
     libXmPgplot.a (librería objeto requerida por las aplicaciones
     PGPLOT/Motif)*
     XmPgplot.h (fichero de cabecera requerido por las aplicaciones
     PGPLOT/Motif)*
     libtkpgplot.a (librería objeto requerida por las aplicaciones
     PGPLOT/Tk)*
     pgtkdemo (programa ejecutable de demostración)
     pgtkdemo.tcl (script utilizado por el programa de demostración)
     tkpgplot.h (fichero de cabecera requerido por las aplicaciones
     PGPLOT/Tk)*
    
PGPLOT_DIR está correctamente definida.
    Este es el nombre del directorio en el cual el PGPLOT buscará
    los ficheros grfont.dat y rgb.txt (a no
    ser que las variables de entorno PGPLOT_FONT y
    PGPLOT_RGB estén definidas para ignorar este
    comportamiento por defecto), y, si fuese necesario, el programa
    servidor de X-window pgxwin_server:
UNIX csh o tcsh:   setenv PGPLOT_DIR /usr/local/pgplot/
UNIX sh o bash:    PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR
PGPLOT_DEV, e.g.
UNIX csh o tcsh: setenv PGPLOT_DEV /xwindow
Cuando se utilice una librería UNIX compartida (p.e., en Solaris 2.x), también se puede necesitar poner el directorio PGPLOT en la ruta de búsqueda del cargador, definida en la variable de entornoLD_LIBRARY_PATH. Para ejecutar un programa,
    teclearemos su nombre (con su directorio si el directorio
    actual no está en el path):
./pgdemo1
Todos los programas de demostración piden un nombre y un tipo de dispositivo. Se puede teclear un símbolo de interrogación para ver una lista de los tipos de dispositivos disponibles y verificar que el PGPLOT ha sido adecuadamente configurado. Los puntos que hay que comprobar son: el programa PGPLOT lee correctamente el fichero de fuente y muestra subíndices, superíndices y caracteres especiales (pgdemo2); el programa PGPLOT puede leer la base de datos de colores (pgdemo10); en dispositivos interactivos, el cursor funciona correctamente (pgdemo5, pgdemo6).
      PROGRAM EX1
      INTEGER PGOPEN, I
      REAL XS(9), YS(9), XR(101), YR(101)
C Calcular los numeros a representar.
      DO 10 I=1,101
          XR(I) = 0.1*(I-1)
          YR(I) = XR(I)**2*EXP(-XR(I))
 10   CONTINUE
      DO 20 I=1,9
          XS(I) = I
          YS(I) = XS(I)**2*EXP(-XS(I))
 20   CONTINUE
C Abrir el dispositivo de graficos.
      IF (PGOPEN(¿') .LT. 1) STOP
C Definir el rango de coordenadas del grafico (0 < x < 10, 0 < y < 0.65),
C y dibujar los ejes.
      CALL PGENV(0., 10., 0., 0.65,  0,  0)
C Etiquetar los ejes (se usa \u y \d para el exponenete).
      CALL PGLAB('x', 'y', 'PGPLOT Graph: y = x\u2\dexp(-x)')
C Se Dibuja la linea de la grafica.
      CALL PGLINE(101, XR, YR)
C Se dibujan los simbolos en los puntos seleccionados.
      CALL PGPT(9, XS, YS, 18)
C Se cierra el dispositivo de graficos.
      CALL PGCLOS
      END
    Esto dibuja el siguiente gráfico:
![[example]](../../common/images/article268/example.gif)
g77 nombre_del_codigo.f -L/directorioX11/ -lX11 -L/directorioPGPLOT/ -lpgplot
Necesitamos incluir los siguientes ficheros en el directorio donde estamos ejecutando nuestro código:
grfont.dat rgb.txt pgwin serversimplemente copiaremos estos ficheros del directorio del PGPLOT al directorio donde estamos ejecutando nuestro código.
En esta aplicación, nuestro objetivo era marcar tres puntos en la pantalla pinchando con el ratón y dejar que el código Fortran dibuje un círculo que pase por estos tres puntos. Este problema fue un ejercicio de nuestra clase de Geometría Computacional, conducida por Dr.Serdar Celebi (mscelebi(at)itu.edu.tr).
Las siguientes rutinas definen el fondo y configuración del área en la que se va a pintar el gráfico. Un uso detallado de estas subrutinas viene explicado en el manual del PGPLOT. (ver el enlace a la página del PGPLOT al final del artículo)
..
    ...
    call PGSCR(0,1.0,1.0,1.0) !establece la representacion del color
    call PGENV(-50.0,50.0,-50.0,50.0,1,1) !establece la ventana y la vista
    y dibuja un marco
    call PGSCI(1) !establece el indice del color
    call PGSFS(2) !establece el tipo de llenado de area
    ...
    ..
    
Utilizamos la siguiente rutina, PGPT1, para dibujar un puntero en el punto que queremos marcar con el ratón.
..
...
WRITE (*,*) 'Modo cursor:', MODE
             GOTO 10
          END IF
           CALL PGPT1(X, Y, 3)  !dibuja una marca
        ic=ic+1
        xp(i)=x
        yp(i)=y
    Después de marcar tres puntos diferentes en la pantalla, el código Fortran calcula el centro y entonces dibuja el círculo pasando por estos 3 puntos.



    ..
    ...
    c-----encuentra el radio----------------
     r=(xcenter-xp(1))**2+(ycenter-yp(1))**2
     r=r**0.5
    c-----dibuja el circulo-------------------
     call PGCIRC(xcenter,ycenter,r) !dibuja un circulo
     goto 1
    ...
    ..
    
    Dibujamos el círculo con la rutina mostrada anteriormente, "PGCIRC". Podemos limpiar el círculo predibujado y asignar los puntos desde el principio para dibujar otro círculo en el mismo área de dibujado. El código completo está incluído en las referencias (ver Ref. circle.f).
En esta aplicación, nuestro objetivo consistía
    en dibujar una curva de aproximación a través de
    varios puntos discretos marcados con el ratón en la
    pantalla y, entonces, dibujar las líneas "porcupine" en
    esta curva.
    
    Las porcupines son las líneas que se utilizan para
    detectar puntos de inflexión no deseados, partes planas
    de una curva, y discontinuidades en su curvatura. Es por esto
    que son un concepto importante en la Geometría
    computacional.
Nosotros desarrollamos un código que utiliza la
    aproximación del mínimo cuadrado para dibujar
    una curva del orden deseado (1~4) a través de un
    conjunto de puntos que pueden ser generados aleatoriamente
    por el usuario a través de una interfaz gráfica
    utilizando el ratón. Tiene la capacidad de dibujar
    porcupines en la curva (cuya frecuencia se puede ajustar por
    el usuario) que son un indicador de la curvatura de la curva.
    
    Saltándonos los detalles del código Fortran que
    hemos escrito, aquí presentamos los resultados
    gráficos (Podemos encontrar el código al final
    del artículo).
Primero introducimos los puntos discretos en la pantalla con el ratón y el código Fortran toma las coordenadas de estos puntos y las almacena en un array. Entonces aproxima la curva pasando por estos puntos según el grado indicado por el usuario.(1-4)


Entonces se dibujan las líneas porcupine en la curva. El número de líneas puede ser modificado por el usuario, y sin cambiar el fondo o los puntos el nuevo conjunto de porcupines puede ser dibujado en la misma curva.


La frecuencia de las porcupines también puede incrementarse tal y como vemos a continuación. Además el programa puede dibujar una nueva curva en el mismo conjunto de datos.


| 
 | 
| Contactar con el equipo de LinuFocus © Baybora Baran and Seckin Gokaltun, FDL LinuxFocus.org | Información sobre la traducción: 
 | 
2003-01-28, generated by lfparser version 2.34