Le mini-prjojet JAVA: éditeur et viewer
de polynomes
Il s'agit d'un projet permettant
d'éditer des polynomes, puis de les visualiser à l'aide d'un
repère. Voici un premier grab:
L'onglet new permet de
créer des polynomes. L'utilisateur peut effectivement entrer une
chaîne pour un nouveau polynome, mais il peut aussi en créer à
partir d'autres déjà existants. Le polynome p2 peut alors être
la multiplication du polynome p1 et d'une valeur réelle, la
dérivée du polynome p4, l'addition des polynomes p1 et p3, la
tangente au polynome p4 en 2,054, etc.
Une chaîne est du type
ax^n+bx^m+...+gx^s, sachant que:
- la variable x est facultative (le polynome
3+7-22 est accepté)
- les coefficients a, b, ..., g sont des
coefficients réels en notation standard pointée
(2.055x-7x est accepté)
- les coefficient n, m, ..., s sont des
coefficients entiers (x^2+x^-1 est accepté)
Pour le
moment, c'est bien vide, mais:
Ici, 4 polynomes ont été créés,
le dernier étant la somme des 3 premiers. L'onglet options
permet de définir une couleur propre à chaque polynome, ainsi
qu'un type de tracé spécifique. La partie de droite les affiche
dans une zone de dessin éventuellement scrollable selon la
taille nécessaire pour dessiner la chaîne. Cet affichage est
standard, soit les termes sont affichés dans l'ordre
décroissant de leur exposant.
Les courbes
se tracent à leur rythme, puisqu'un thread leur est associé
(ici l'hyperbole en vert n'était pas complètement tracée au
moment du grab).
L'onglet repere est utilisé pour
différentes opérations:
- Seuls les polynomes sélectionnés dans la
partie supérieure sont tracés. Les polynomes sont
sélectionnés par défaut lors de leur création.
- Un facteur de zoom peut être appliqué.
Zoom intérieur, ou zoom extérieur.
- Le pas peut être modifié. Ici, on
constate que le dessin est le même que sur le grab
précédent, si ce n'est que le pas est 5 fois plus
grand. Le dessin est donc 5 fois moins précis, puisque
les polynomes sont évalués 5 fois moins.
- L'utilisateur peut décider d'afficher ou
non les axes, et la grille.
- Enfin, le paramètre subdiv peut être
modifié, sachant que le repère trace un trait sur les
axes ou une croix pour former la grille chaque subdiv.
Ici, la
grille a été tracée. De plus, la valeur minimale pour -x a
été changée en -1.
Plusieurs choses ont été faites
ici:
- Le polynome 5 a été créé comme étant
la division du polynome 4 par la valeur 3. Etant trop
grand, son affichage à droite devient scrollable.
- Un zoom intérieur de 20% a été opéré.
- Enfin, la grille et les axes ont été
supprimés
Ce dernier grab montre
les possibilités offertes dans l'onglet set. Un polynome peut
être remplacé. Il suffit de le sélectionner, puis d'entrer
dans la zone de texte le nouveau polynome. C'est ainsi que le
polynome 5 a été changé en x.
Les polynomes peuvent aussi
être supprimés, comme le polynome 3 ici.
Quelques
remarques:
- Le tracé à nécessité quelques
optimisations. Les droites (polynomes de degré 0 et 1)
se tracent en une seule fois, et leur thread est stoppé
immédiatement.
- Le découpage a été fait de telle sorte
que des ajouts puissent être possibles sans trop de
difficultés. On peut supposer par exemple un onglet
d'évaluation des polynomes en un point, voire un onglet
de résolution des polynomes de degré 2.
- Le fait de ne tracer que des polynomes se
justifie. En fait, tout a été fait à la main ici.
Qu'il s'agisse des fonction de mapping (coordonnées -
valeur en pixels) pour le repère, ou du parsing des
polynomes. La classe Polynome contient donc un automate
destiné à réaliser ce parsing. Gérer n'importe quelle
fonction serait trop compliqué pour un mini-projet
(notion d'arbre, etc.). Néanmoins, mon binôme a adapté
des classes implémentant ce parsing de fonctions dans
une application similaire. Vous trouverez ce projet
ici javaProjet.html
.
- Héritage, TreeMap, Comparator,
Observable, Observer, 3700 lignes de code commenté,
etc... bon courage à michel pour
la correction :)