Traceur de fonction évolué [en travaux]

Soyez le premier à donner votre avis sur cette source.

Vue 11 514 fois - Téléchargée 1 790 fois

Description

Bonjour à tous,

je vous présente ici un traceur de fonction évolué.
Il gère, plus ou moins bien, un environnement de travail auquel on peut ajouter, supprimer et réutiliser des fonctions.
Par exemple il est possible de definir une fonction avec un nombre n d'arguments et de l'utiliser dans une autre fonction.

Mais pour en savoir plus sur ses possibilités, rdv un peu plus bas, dans la section "Explication finale", je vous ai concocté un petit exercice ;).

D'autres part, j'ai aussi créé un nouveau (par rapport a mes precedents traceurs, et ceux que j'ai pu voir ici) "moteur" de dessin des courbes. Celui-ci ne nécessite plus de définir la précision du tracé, il s'adapte a la courbe, et donc offre un tracé (presque toujours) optimisé en fonction de la fenetre d'affichage. Malheureusement, ce "presque toujours" persiste et j'accepte volontier de l'aide pour y remedier ;). [NB: le moteur se trouve dans board.cls]

Dans le but de vous orienter un peu, j'ai fait des annotations sur l'image capturée ;)

Conclusion :


Comme vous le constaterez, le code manque un peu de commentaires, mais je fais toujours en sorte de choisir des noms pertinants. De plus chaque partie du programme est répartie dans des sous-projets indépendants (analyseur syntaxique et lexical, gestion des sauvegardes/chargements de l'environnement, etc... a ce sujet, je tiens a preciser que le projet "WinDoIt" present dans le groupe de projets n'est pas encore utilisé).

J'espère avoir beaucoup de feedback de votre part, et même de l'aide de la part des plus courageux ;).

Voici les bugs et manques du logiciel que j'ai pu constater (non exhaustif) :

- Bug (aléatoire ?) lors de l'utilisation de fonctions en parametre d'autres fonctions. Je ne sais pas vraiement d'ou ca vient, j'ai plusieurs fois tracé l'exécution sans vraiement mettre le doigt sur l'origine du problème. N'hésitez donc pas a me donner vos impressions et le plus de details possibles lorsque cela survient.
- Pour les fonctions paramétriques, je n'ai pas encore implanté l'exécution en mode console de la fonction pour une valeur de t donnée. On ne peut que tracer une fonction paramétrique, pas la manipuler. Donc j'aimerai egalement pouvoir faire en sorte d'utiliser le résultat de fonctions paramétriques dans d'autres fonctions paramétriques. Exemple :
on a la fonction parametrique u(t) = cos(t), sin(t)
on souhaite utiliser le résultat de cette fonction paramétrique dans v(t) en ecrivant ainsi : v(t)=2*u(t),3*u(t).
tel que cela revienne à éfinir v(t) ainsi : v(t) = 2*cos(t),3*sin(t).
Pour cela aussi, si quelques âmes charitables se sentent de m'aider, c'est avec joie ! :D

Bon, pour le reste des bugs, je compte sur vous pour m'en faire remonter quelques uns si possible ;).
_____________________________________________________________

Utilisation :

Pour effectuer un calcul, déclarer une fonction ou une variable, il suffit de le taper dans la zone de texte en-dessous de la console.
Par exemple pour effectuer un calcul on tape :
3*5
Le résultat sera affiché dans la console.
Le principe reste le même pour tout type de calcul ou de déclaration.
Une déclaration (de fonction ou de variable) se fait a l'aide de l'opérateur '='. par exemple :
x=3*5
[declare la variable 'x' et lui affecte la valeur 15 calculée lors du lancement de l'instruction et pas a chaque fois qu'on rappelle x (pas si évident que ça).]
x
[renvoi la valeur contenue dans x, càd 15.]
f(x)=3*x
[définie la fonction f à 1 argument x, qui N'EST PAS le même que le x défini précédemment. Celui-ci est local a la fonction.]
g(y)=x*y
[défini g à 1 argument y, x quant à lui est le x défini 3 lignes au-dessus et dans l'état actuel de l'environnement, il vaut 15. A ce moment precis, g est equivalent à g(y)=15*y]
h(x,y,z)=x*y*z
[défini une fonction a 3 arguments.]
h(2,3,4)
[renvoi le résultat (2*3*4=)24.]
p(t)=3*t;5*t
[définie paramétriquement la fonction p qui vaut 3*t en x et 5*t en y]
p(3)
[~ Calculer les valeurs d'une fonction paramètrique pour une vameur du parametre n'est pas encore implémenté :s ~]
Voilà pour la console.

Lorsque vous déclaré une variable ou une fonction dans la console, cette dernière apparait dasn la liste déroulante au-dessus de la fenêtre graphique.
En sélectionner une dans cette liste provoquera son tracé, sauf si c'est une fonction a plus d'un argument, auquel cas rien ne sera tracé.

Le cadre situé sous la fenetre graphique sert à paramétrer la fenêtre graphique et le pas de la grille.
Celui situé sous la console sert a paramétrer les valuers du paramètre d'une fonction paramétrique, c'est a dire sa valeur de départ, sa valeur d'arrivée, et son pas de progression. La case a coché permet de ne pas se soucier du pas de progression du paramètre et d'essayer de tracé au mieu la courbe (n'est pas toujours parfait).

Enfin, il est possible de zoomer sur une portion de la fenêtre graphique. Pour cela il suffit de faire un clic avec le bouton du milieu de la souris pour prendre le premier coin de la zone de zoom, et un second clic avec le meme bouton pour valider la zone.

Voila, je pense que j'ai dis le principal. N'hésitez pas a poser vos questions en cas de problème.

_____________________________________________________________

EXERCICE :
_____________________________________________________________
Enfin, pour vous faire voir ce qu'il sait faire, je vous ai concocté un petit environnement avec les courbes de bézier.
Voici la marche a suivre pour afficher la courbe de bezier pour 4 points de controle :
1/ Tracé des points
Lancé successivement les fonctions p1(t),p2(t),p3(t) et p4(t) qui vont successivement dessiner les 4 pts a l'ecran (points definis respectivement par (x1,y1), (x2,y2), (x3,y3) et (x4,y4)).

2/ Tracé du polygone de controle
Une fois les pts tracés, je vous suggere de changer la couleur du tracé pour tracer les segments p1p2, p2p3 et p3p4 a l'aide des fonctions du meme nom.

3/ Tracé de la courbe de bézier pour le polygone de controle
Enfin, dans une autre couleur, lancez la fonction CB_4pts qui va tracer la courbes de bezier pour ce polygone. Et voila ! :)

Si vous voulez vous amuser a voir ce que cela donne pour un plus grand nombre de points, il suffit pour cela de définir ces points, rajouter les fonctions correspondantes de tracé des points et tracé des segments, et enfin, je vous laisse deviner a uqoi ressemble la fonction CB_Npts ou N est le nombre de points que vous avez ajouté !
exemple de figure interessante (entrez les points suivants, pour les pts p1 a p4, il n'y a rien a rajouter, juste a changer x1..x4 et y1...y4) :
p1:(0,0)
p2:(3,8)
p3:(11,7)
p4:(11,-1)
p5:(4,0)
p6:(-1,9)

PS: vous devez donc :
-modifier x1, x2, x3, x4 et y1, y2, y3, y4
-rajouter x5, x6, y5, y6, p5(u), p6(u), p4p5(u), p5p6(u) et CB_6tps(u)

Amusez-vous bien ! ;)

Merci et a bientôt

PS: il faut lancer le groupe de projet nommé "grpTraceurV4.vbg" ans le sous-répertoire TraceurV4.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
jeudi 8 juillet 2010
Statut
Membre
Dernière intervention
19 mars 2013

je suis entrain de comprendre votre programme pour dire encore tres bien puisque d'origine j'aime le mathematique si un jour vous pouvez rialiser un projet qui gere les estimation statistique et donne des privision a l'avenir
Messages postés
4
Date d'inscription
jeudi 8 juillet 2010
Statut
Membre
Dernière intervention
19 mars 2013

c'est tres bien fais MRS, VRAIMENT pour COMPRENDRE COMMENT CA MARCHE c'est compliquer vraiment chapau 20/20
Messages postés
36
Date d'inscription
mercredi 11 avril 2001
Statut
Membre
Dernière intervention
14 septembre 2006

Salut,

alors j'ai pas bien compris ce dont tu parlais, mais me semble-t-il, ce n'est pas quelque chose de faisable sans en passer par un rajout de code dans ton programme, non ? Il faut absolument coder les fonctions a tracer en dur ?
Parce que sinon, je serai pas passé a coté d'un truc terrible pendant 13ans de ma vie !!! (depuis mon premier prog en Basic sur amstrad ;) ! )

Pour info, je suis sur le developpement d'un prog d'analyse syntaxique en c++ avec gestion d'environnment plus evolué qui se presentera sous forme de Dll et devrait donc etre bcp plus rapide que celui en VB :). De plus, il devrait etre facilement "pluggable" sur celui-ci.

A+


Agaga
Messages postés
58
Date d'inscription
mercredi 27 juin 2007
Statut
Membre
Dernière intervention
1 septembre 2009

désolé pour les fautes d'orthographe ~~
Messages postés
58
Date d'inscription
mercredi 27 juin 2007
Statut
Membre
Dernière intervention
1 septembre 2009

Rien a dire bravo, mais tu saviais qu'en basic tout cours tu peux faire un programme de ce type en moins de deux et aussi complexe tu lui donne la fonction et il la réalise courbe ou non en fait il le trace point par point avec une fonction que tu définis !

#1, "set x y"
Afficher les 14 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.