Traceur de fonction évolué [en travaux]

0/5 (14 avis)

Vue 11 276 fois - Téléchargée 1 644 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

cs_Agaga
Messages postés
36
Date d'inscription
mercredi 11 avril 2001
Statut
Membre
Dernière intervention
14 septembre 2006
-
Petite précision ; exemple de declaration d'une fonction paramétrique :
p(t) = 3*cos(t) ; 2*sin(t)

Agaga
violent_ken
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010
-
Salut,

je n'ai pas eu le temps de regarder vraiment le source, je me suis surtout penché sur les résultats donnés par le programme.

Et là je dois dire que c'est vraiment un gros projet, très bien foutu (quoique je n'aime pas trop les projets "multi *.vbp"). J'avais aussi il y a longtemps (donc avec un style de programmation un peu nullissime ;) ) réalisé un programme similaire, mais je n'avais pas les mêmes objectifs ni les mêmes motivations. Je dois dire que le tien est LA référence sur vbfrance.com en la matière.

Rien d'autre à dire que : Bravo, 10/10.

@+
cs_Agaga
Messages postés
36
Date d'inscription
mercredi 11 avril 2001
Statut
Membre
Dernière intervention
14 septembre 2006
-
Merci beaucoup pour tant d'éloges :) !
Même si a mon goût il est loin d'être achevé... :s

Agaga
cs_PROGRAMMIX
Messages postés
1134
Date d'inscription
mercredi 2 octobre 2002
Statut
Membre
Dernière intervention
24 juillet 2011
-
Bonjour,

N'ayant regardé que le printscreen, je ne ferai aucun commentaire sur la source.

Mais j'aimerais savoir si quelqu'un pourrait nous faire une source traçant des "lignes" pour découper une image en puzzle.

Je m'explique : l'idée serait de charger une image, définir des quelques points sur des axes "imaginaires" et la fonction se chargerait de relier ces points par des "courbes".

Programmix
cs_Agaga
Messages postés
36
Date d'inscription
mercredi 11 avril 2001
Statut
Membre
Dernière intervention
14 septembre 2006
-
je vois bien ce que tu veux dire, mais a premiere vue, je pense que ce n'est pas si simple, en tout cas, pas avec des fonctions mathematiques, amoins d'utiliser les courbes de bezier "localement" (pour faire les boucles de decoupe des pieces du puzzle)... bref, sans rentrer dans les details, je vois bien un moyen de le faire, mais ce n'est pas evident. Je pense que ton idée est interessante et mérite que l'on s'y penche ;). Des que j'aurais un peu de temps je ferai une petite "etude" de la chose.

A+

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.