![[bayboraseckin]](../../common/images/article268/bayborabenlinux.gif) 
 
    original in en Baybora Baran and Seckin Gokaltun
en to fr Paul Delannoy
Nous sommes deux assistants de recherche à l'Institut d'Informatique de l'universitéŽd'ITU. Nous réalisons des applications d'ingénierie et nous utilisons Linux pour cela... La page personnelle de Seckin se trouve àˆ www.be.itu.edu.tr/~seckin
![[PgPlot pour Linux]](../../common/images/article268/top.jpg) 
 
    La bibliothèque de programmes graphiques PGPLOT est un outil logiciel graphique utilisable en Fortran ou en C, indépendant des périphériques, qui permet de réaliser des graphes scientifiques simples. Il est conçu pour permettre la création de graphiques de qualité et publiables avec un minimum d'efforts. Dans la plupart des cas le programme peut être indépendant du périphérique et ses sorties sont dirigées vers le périphérique approprié lors de son exécution.
La bibliothèque PGPLOT se compose de deux grandes parties : l'une concerne ce qui est indépendant du périphérique, l'autre concerne ce qui est dépendant du périphérique et propose un ensemble de pilotes, sous-programmes effectuant les sorties sur différents terminaux, Žécrans d'affichage, imprimantes à aiguilles ou à jet d'encre, imprimantes laser, et traceurs de courbes. Les format de fichiers les plus répandus sont supportés, y compris PostScript et GIF. PGPLOT elle-même est écrite en Fortran-77 standard.
Les routines PGPLOT peuvent être invoquées directement dans un programme Fortran-77 ou Fortran-90. Une bibliothèque d'interface en C (cpgplot) et un fichier d'en-tête (cpgplot.h) sont fournis afin d'assurer les transferts lors d'appels depuis un programme en C ou C++; cette bibliothèque effectue les conversions nécessaires entre C et Fortran. PGPLOT a étéŽtesté sous UNIX (plusieurs variétés, dont Linux, SunOS, Solaris, HPUX, AIX, et Irix) et OpenVMS.
PGPLOT n'est pas dans le domaine public. Pourtant il est disponible librement pour des usages non-commerciaux. Le code source et la documentation, ainsi qu'un petit nombre de routines spécifiques àˆ certains systèmes, sont la propriété du California Institute of Technology (CalTech). Pour disposer du fichier et des instructions d'installation cliquez ici.
Ci-dessous quelques exemples d'application de PGPLOT afin de montrer ses capacités.
![[Exemple1]](../../common/images/article268/example1.gif)
![[Exemple2]](../../common/images/article268/example2.gif)
![[Exemple3]](../../common/images/article268/example3.gif)
![[Exemple4]](../../common/images/article268/example4.gif)
![[Exemple5]](../../common/images/article268/example5.gif)
/usr/local/src/pgplot (répertoire de distribution)
    /usr/local/pgplot (répertoire cible)
cd pub/pgplot
binary
hash
get pgplot5.2.tar.gz
tar. 
    ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz.
    gunzip et tar pour décompresser
    l'archive et extraire son contenu. Cela va créer le répertoire
    pgplot (et ses sous-répertoires) dans le répertoire courant. 
    Assurez-vous donc que le répertoire courant est bien celui où vous
    voulez créer l'arborescence de distribution de PGPLOT. 
    cd /usr/local/src
    gunzip -c pgplot5.2.tar.gz | tar xvof -
/usr/local/src/pgplot et
    ses sous-répertoires. 
    mkdir /usr/local/pgplot
N'essayez pas de créer la bibliothèque PGPLOT dans le répertoire de distribution.drivers.list du répertoire de distribution
    vers le répertoire cible, puis utilisez un éditeur de texte pour choisir les
    pilotes.
    Chaque pilote de périphérique disponible figure dans une ligne du fichier :
    l'abscence de point d'exclamation (!) au début de la ligne active le pilote,
    par contre sa présence le désactive. Plusieurs d'entre eux sont spécifiques
    à un système d'exploitation (voir les notes dans drivers.list),
    aussi n'activez que les périphériques que vous utiliserez vraiment.
    PGPLOT pourra être reconfiguré plus tard en reprenant l'installation à cette
    étape.
    Vous devrez souvent inclure : le périphérique null (/NULL), des imprimantes PostScript
    (/PS, /VPS, /CPS, et /VCPS), des terminaux Tektronix (/TEK, /XTERM, et d'autres variantes),
    et, si le système cible dispose du X Window System, les pilotes X Window (/XWINDOW,
    /XSERVE). Vous pouvez aussi inclure les pilotes pour les fichiers GIF (/GIF, /VGIF)
    ou d'autres imprimantes. 
    cd /usr/local/pgplot
    cp /usr/local/src/pgplot/drivers.list .
    vi drivers.list  (ou votre éditeur favori)
    makemake, pour générer un fichier makefile UNIX standard
    pour votre système, vos compilateurs, et les périphériques
    PGPLOT choisis. L'information sur le système et le compilateur est
    fournie par un fichier de configuration.
    Des fichiers de configuration sont disponibles pour les systèmes qui suivent.
    Si le votre n'est pas dans la liste, ou si vous rencontrez des problèmes
    pour créer le makefile, vous trouverez ci-dessous la façon de créer
    votre propre fichier de configuration. f77 appelle le compilateur GNU g77, vous ne pouvez
    pas utiliser le fichier de configuration d'un compilateur SPARC f77, par
    exemple.
    Vous aurez à créer un fichier de configuration particulier.
    Dans le tableau suivant, Arg#2 est le code correspondant au système 
    d'exploitation, et Arg#3 est le code correspondant aux
    compilateurs Fortran et C. Vous obtiendrez des informations supplémentaires
    sur les systèmes supportés en lisant le fichier
    pgplot/sys_*/aaaread.me, où * désigne une des valeurs
    possibles de 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 votre système est dans la liste, faites comme suit :
    faites du répertoire cible votre répertoire courant par défaut, comme ceci, 
    cd /usr/local/pgplot
    Exécutez le script makemake depuis le répertoire de distribution : 
    /usr/local/src/pgplot/makemake  /usr/local/src/pgplot  linux
    Le premier argument donné à makemake est le nom du répertoire
    de distribution. Notez que lorsque vous lancez makemake, 
    le répertoire courant par défaut doit être le répertoire cible, c-à-d. le répertoire
    dans lequel vous voulez mettre les bibliothèques compilées. drivers.list). 
    Reprenez à l'étape 4! 
    Exemple
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 génère un fichier makefile
    qui sera utile plus tard, un fichier Fortran grexec.f
    chargé des appels aux pilotes sélectionnés, et un fichier texte rgb.txt
    qui contient les codes couleur nécessaires à la routine PGSCRN.
    (Si un tel fichier rgb.txt existait auparavant, avec vos
    propres définitions de couleurs, makemake ne le modifierait
    pas.)
    Il copie aussi deux fichiers en-tête en Fortran nécessaires à la compilation.
   
    Ainsi, à ce stade, vous devriez au moins avoir les fichiers : 
    drivers.list
     grexec.f
     grpckg1.inc
     makefile
     pgplot.inc
     rgb.txt
    
makemake déclare avoir trouvé est bien identique à celle 
    indiquée dans drivers.list.
    Si votre UNIX n'est pas dans la liste des systèmes supportés ci-dessus, créez
    votre propre fichier de configuration dans le répertoire cible, en le nommant
    local.conf. Le mieux est de copier un des fichiers fournis (dans
    pgplot/sys_*/*.conf), et de l'éditer en suivant les commentaires
    présents dans ce fichier. La procédure makemake utilisera
    local.conf s'il existe dans le répertoire courant, et si vous
    ne spécifiez pas de valeur pour Arg#3. Mais Arg#2 est toujours nécessaire (OS). 
    make va compiler le code de la bibliothèque
    PGPLOT en s'appuyant sur les données du fichier makefile : 
    make
Par défaut,make génère : une bibliothèque module-objet, libpgplot.a;
    une bibliothèque partagée (si le système le supporte), le fichier binaire de polices
    PGPLOT grfont.dat, les programmes de démonstration pgdemo*,
    et un fichier de documentation pgplot.doc.
    De plus, si les pilotes /XWINDOW et/ou /XSERVE ont été activés à l'étape 4,
    le programme pgxwin_server sera crŽŽ, et si le pilote /XDISP a ŽtŽ
    activŽ, le programme pgdisp sera créé.
    Si cette étape se termine correctement, vous pouvez taper 
    make clean
pour effacer les fichiers intermédiaires devenus inutiles. Vous auriez alors au moins dans votre répertoire courant :drivers.list
     grexec.f
     grfont.dat (fichier binaire de polices)*
     libpgplot.a (bibliothèque PGPLOT)*
     libpgplot.so (bibliothèque partagée, sous réserve)*
     makefile
     pgdemo1 ... pgdemo16 (programmes de démonstration)
     pgdisp (nécessaire au pilote /XDISP)*
     pgplot.doc (fichier ASCII de documentation)
     pgxwin_server (nécessaire au pilote /XWINDOW)*
     rgb.txt (base de données des noms de couleurs)*
    
pgmdemo (programme de démo exécutable)
     libXmPgplot.a (bibliothèque objet nécessaire aux applications PGPLOT/Motif)*
     XmPgplot.h (fichier en-tête nécessaire aux applications PGPLOT/Motif)*
     libtkpgplot.a (bibliothèque objet nécessaire aux applications PGPLOT/Tk)*
     pgtkdemo (programme de démo exécutable)
     pgtkdemo.tcl (script nécessaire au programme de démo)
     tkpgplot.h (fichier en-tête nécessaire aux applications PGPLOT/Tk)*
    
PGPLOT_DIR
    est correctement définie. C'est le nom du répertoire dans lequel PGPLOT va chercher
    les fichiers grfont.dat et rgb.txt (à moins que les 
    variables PGPLOT_FONT et PGPLOT_RGB n'aient reçu des
    valeurs destinéesˆà modifier ce comportement), et, si nécessaire, le programme
    X Window server pgxwin_server : 
UNIX csh or tcsh:   setenv PGPLOT_DIR /usr/local/pgplot/
UNIX sh or bash:    PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR
PGPLOT_DEV, par exemple : 
UNIX csh or tcsh: setenv PGPLOT_DEV /xwindow
Si vous utilisez une bibliothèque partagée sous UNIX (par ex. sous Solaris 2.x), vous devrez sans doute aussi inclure le répertoire PGPLOT dans votre chemin de recherche, défini par la variable d'environnementLD_LIBRARY_PATH.
    Pour lancer un programme, tapez son nom (avec le répertoire si le
    répertoire courant n'est pas dans votre chemin de recherche) : 
./pgdemo1
Tous ces programmes de démo demandent un périphérique et son type. Tapez un point d'interrogation? pour avoir la liste
    des pilotes disponibles et vérifier ainsi que PGPLOT est bien
    configuré.
    Points à vérifier : le programme PGPLOT lit correctement les polices
    et affiche correctement les exposants, les indices et les caractères
    spéciaux (pgdemo2) ; le programme PGPLOT lit correctement les définitions
    de couleurs (pgdemo10) ; sur les périphériques interactifs, le curseur
    est bien géréŽ (pgdemo5, pgdemo6). 
    
      PROGRAM EX1
      INTEGER PGOPEN, I
      REAL XS(9), YS(9), XR(101), YR(101)
C Calcule les coordonnées des points à tracer.
      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 Ouvre le périphérique graphique.
      IF (PGOPEN('?') .LT. 1) STOP
C Définit l'étendue du graphe (0 < x < 10, 0 < y < 0.65),
C et trace les axes.
      CALL PGENV(0., 10., 0., 0.65,  0,  0)
C Etiquette les axes (notez l'usage de \u et \d pour les exposants).
      CALL PGLAB('x', 'y', 'PGPLOT Graph: y = x\u2\dexp(-x)')
C Trace le graphe.
      CALL PGLINE(101, XR, YR)
C Place des symboles aux points choisis.
      CALL PGPT(9, XS, YS, 18)
C Ferme le périphérique graphique.
      CALL PGCLOS
      END
    Ceci affichera le graphique ci-dessous :
![[exemple]](../../common/images/article268/example.gif)
g77 your_code_name.f -L/X11directory/ -lX11 -L/PGPLOTdirectory/ -lpgplot
Lors de l'exécution les fichiers suivants doivent être dans le répertoire courant :
grfont.dat rgb.txt pgwin serverIl suffit de les copier du répertoire pgplot vers le répertoire dans lequel vous exécutez votre code.
Notre but est de saisir les coordonnées de 3 points indiqués par des clics de souris, puis de laisser le code Fortran tracer le cercle qui passe par ces 3 points. Ce problème était une consigne donnée par le Dr.Serdar Celebi (mscelebi(at)itu.edu.tr) lors du cours de "Géométrie Computationnelle" que nous suivions.
Les routines suivantes définissent l'étendue et le fond de la zone dans laquelle vont figurer les tracés suivants. Leur usage est détailléŽ dans le manuel PGPLOT. (voir le lien vers la page de PGPLOT à la fin)
..
    ...
    call PGSCR(0,1.0,1.0,1.0) !fixe les codes couleur
    call PGENV(-50.0,50.0,-50.0,50.0,1,1) !définit fenêtre et étendue, dessine
    le cadre et son étiquette
    call PGSCI(1) !fixe la couleur
    call PGSFS(2) !fixe le style 'remplissage'
    ...
    ..
    
La routine utilisée, PGPT1, place un pointeur au point désigné par la souris.
..
... 
WRITE (*,*) 'Mode curseur :', MODE
             GOTO 10
          END IF
           CALL PGPT1(X, Y, 3)  !trace un marqueur
        ic=ic+1    
        xp(i)=x
        yp(i)=y
    Après avoir marqué 3 points dans l'écran, le code Fortran calcule le centre puis trace le cercle qui passe par les 3 points.



    ..
    ...
    c-----trouve le rayon---------------
     r=(xcenter-xp(1))**2+(ycenter-yp(1))**2
     r=r**0.5
    c-----trace le cercle-------------------
     call PGCIRC(xcenter,ycenter,r) !trace un cercle
     goto 1
    ...
    ..
    
    Nous traçons le cercle avec cette routine, "PGCIRC". Vous pouvez alors effacer le cercle pré-dessiné puis donner trois autres points et effectuer le tracé dans la même zone. Le code complet figure dans les références (cf. Réf. circle.f).
Nous voulons tracer une courbe d'approximation d'un nuage de points
    marqués à la souris dans l'écran, puis tracer sur cette courbe des 
    lignes droites en 'épines'.
    
    Les épines de porc-épic sont des lignes que l'on utilise pour
    détecter des points d'inflexion, des parties 'plates' de la courbe,
    et des discontinuités dans sa courbure. C'est ce qui rend leur usage
    important en "Géométrie Computationnelle".
Nous avons développé un code pour calculer une courbe d'un degréŽ
    donné (entre 1 et 4) par la méthode des moindres carrés appliquée àˆ
    un ensemble de points désignés par l'utilisateur dans l'interface 
    graphique grâce à la souris. Il donne la possibilité d'ajouter des 
   'épines' (avec une fréquence ajustable par l'utilisateur) sur la courbe
    afin de visualiser sa courbure.
    
    Sans entrer dans les détails de ce code (vous le trouverez à la fin
    de l'article) voici les résultats graphiques obtenus.
D'abord nous marquons les points à la souris et le code stocke leurs coordonnées dans un tableau. Puis il calcule la courbe du degré demandéŽ (entre 1 et 4) par l'utilisateur.


On trace alors les épines sur la courbe. Leur nombre peut être donné par l'utilisateur et le nouvel ensemble est tracé sur la même courbe.


La fréquence des épines peut être augmentée comme montré ci-dessous. Le programme peut aussi tracer une nouvelle courbe sur le même ensemble de données.

