Mode d'emploi et manuel de référence

Previous Up Next

2.2  Un fichier d'exemple

La figure 2.1 est créée à partir du fichier source commenté semicirc.xp présenté ci-dessous dans la figure 2.2.


Figure 2.1: Un demi-cercle.


#include "epix.h"
using namespace ePiX;                  // semblable à \usepackage

// "double" = réel « décimal » en double precision
double f(double x) { return sqrt(1-x*x); } // c.-à-d. f(x) = \sqrt{1-x^2}

double width = 0.6, height = f(width); // dimensions du rectangle
P label_here(0.5, f(0.5));             // position de l'étiquette du graphique

int main() 
{
  unitlength("1in");
  picture(2.5, 1.25);                  // défini la taille imprimée, 2.5 x 1.25in
  bounding_box(P(-1, 0), P(1, 1));     // coins ; représente [-1,1] x [0,1]

  begin();   // ----- le corps de la figure commence ici -----
  h_axis(4);                           // marque 4 intervalles, etc.
  v_axis(2);  
  // 2 étiquettes ; descend de 4pt, 
  // place sous l'emplacement en coordonnées cartésiennes
  h_axis_labels(2, P(0, -4), b);    

  arc(P(0,0), 1, 0, M_PI);             // centre, rayon, angle de début/fin
  bold();                              // seulement les chemins, pas les fontes
  rect(P(-width,0), P(width, height)); // rectangle défini par ses coins

  // déplace l'étiquette à droite 2pt, en haut 4pt, 
  // aligne sur point de référence (défaut)
  label(label_here, P(2,4), "$y=\\sqrt{1-x^2}$");
  end();
}
Figure 2.2: Le fichier source du demi-cercle

Les commandes d'ePiX sont de trois types : définition (de données et de fonctions), fixation d'attributs et dessin. Comme un document LATEXien un fichier d'entrée ePiX contient un préambule qui définit certains aspect de l'apparence de la figure et un corps qui contient les commandes proprement dites de création de la figure.

On a utilisé des variables pour donner une structure logique à la figure : la largeur du rectangle et l'emplacement de l'étiquette sont définies dans deux lignes du préambule et la hauteur du rectangle est calculée en fonction de la largeur. La capacité qu'offre ePiX de structurer logiquement les figures est un de ses points forts. Dans un fichier aussi court que celui-là on pourrait éventuellement fixer les constantes « en dur» mais l'importance de la structuration s'accroît rapidement avec la taille du fichier d'entrée et il vaut mieux acquérir de bonnes habitudes dès le début. La définition de la fonction est donnée essentiellement comme illustration bien qu'elle permette une organisation légèrement préférable à ce qui suit

  double width = 0.6, height = sqrt(1-width*width);
  double lab_x = 0.5;
  P label_here(lab_x, sqrt(1-lab_x*lab_x));

Syntaxe des commandes

Les commandes de fixation d'attributs et celles de dessin sont des fonctions C++, des blocs d'instructions qui peuvent être appelés par leur nom. Comme des fonctions mathématiques, les fonctions C++ acceptent des arguments tels que des entiers (int), des nombres réels (double pour « nombre décimal à virgule flottante en double précision»), ou P (le point d'ePiX) et peuvent être codées en dur ou définies symboliquement. C++ est un langage « typé» ce qui signifie que le compilateur vérifie que les appels de fonction utilisent le bon type et le bon nombre d'arguments et qu'il produit une erreur si aucune fonction correspondante n'est trouvée.

En C++, une fonction peut avoir des arguments avec valeur par défaut et quand une fonction a des arguments avec valeur par défaut ces arguments peuvent être omis lors de l'appel de la fonction. Les commandes sont décrites ci-dessous en donnant les types et les noms de leurs arguments. Par souci de brièveté, le type double est parfois passé sous silence. Les arguments a valeur par défaut sont donnés entre crochets. Par exemple,

  line(P pt1, P pt2, [double stretch], [int n]);

decrit une commande « line» qui accepte deux arguments obligatoires de type P, un paramètre réel optionnel stretch et un paramètre entier optionnel n. Dans un fichier d'entrée, les types des arguments ne sont pas donnés, p. ex.

  line(P(-2,1), P(1,0), 6.4);

Le dernier argument prendrait, dans cet exemple, sa valeur par défaut.


Previous Up Next