wiki:InsiaProgCProjetGraph

Sommaire

Projet SRT3 - Graphe de fonctions

But du projet

On veut réaliser un programme qui est capable de tracer la courbe d'une fonction unidimensionnelle à l'aide de son expression mathématique. Il y a deux parties distinctes dans ce programme:

  • l'interpréteur mathématique: il sera plus ou moins sophistiqué (linéaire, trigo, associativité, etc)
  • l'afficheur: on pourra fournir une ou plusieurs méthodes d'affichage (console, fenêtre graphique, fichier image, SVG, etc)

Vous pourrez trouver des éléments d'aide (implémentations, suggestions) sur source:/insia/c/projet-graphe/

L'interpréteur mathématique

On définit trois niveaux pour l'interpréteur, qui correspondent à trois utilisation du programme.

Interpréteur 1

Le programme prend d'abord comme argument les valeures minimales et maximales de la variable, puis l'expression mathématique sous forme d'éléments séparés par des espaces. Les seuls éléments autorisés sont:

  • x: la variable
  • + - * /: les opérations mathématiques
  • 123...: une valeur numérique positive

Exemple d'utilisation:

$ ./graphe -5 5 3 \* x \* x + x + 2

Le mode d'affichage est unique et choisi par le programmeur.

Interpréteur 2

Le programme utilise getopt(3) pour gérer le format standard des options Unix, et s'utilise ainsi:

$ ./graphe --xmin [valeur] --xmax [valeur] [--output [format]] fonction
  • --xmin, --xmax: options obligatoires, désignent les abscisses minimales et maximales
  • --output: option facultative, sélectionne un format de sortie s'il en existe plusieurs
  • fonction: obligatoire, expression mathématique de la fonction

La syntaxe de la fonction accepte les mêmes éléments que l'interpréteur 1, mais ne requiert pas qu'ils soient nécessairement séparés par des espaces. La fonction doit toujours être passée dans un seul argument, exemple:

$ ./graphe --xmin -5 --xmax 5 "3*x*x + x +2"

Interpréteur 3

Il s'agit du même interpréteur que l'interpréteur 2, mais l'expression mathématique de la fonction peut utiliser des parenthèses pour

  • forcer l'associativité des opérations
  • permettre l'appel aux fonctions trigonométriques cos, sin, tan

Exemple:

$ ./graphe --xmin 0 --xmax 3.1416 "sin((x + 2)*x)"

Afficheur

Celui-ci pourra utiliser différents media pour l'affichage, et différents degrés de sophistication:

  • détection automatique des extremas des ordonnées
  • détection des asymptotes verticales (ex: 1/x quand x=0)
  • affichage et légendage des graduations

Les modes d'affichages proposés sont les suivants:

  • console 1: affichage simple avec printf
  • console 2: affichage enrichi avec la bibliothèques ncurses (détection de la taille de la console, affichage des axes)
  • SVG: produire un fichier SVG représentant la courbe de la fonction ainsi que ses axes
  • PNG: à l'aide de la bibliothèque libpng, produire un fichier image PNG qui contient une représentation de la courbe de la fonction et les axes
  • SDL: à l'aide de la bibliothèque SDL, ouvrir une fenêtre graphique et afficher la courbe représentant la fonction ainsi que les axes
Last modified 14 years ago Last modified on Dec 4, 2006, 1:13:14 PM

Attachments (1)

Download all attachments as: .zip