Tracer une fonction [Résolu]

luudo 10 Messages postés jeudi 18 janvier 2007Date d'inscription 22 juillet 2007 Dernière intervention - 20 juil. 2007 à 15:25 - Dernière réponse : ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention
- 21 juil. 2007 à 19:24
Bonjour , je souhaiterais tracer la fonction suivante :

(0.25 + 0.22508*Math.Sin(((Math.PI/4))*x)+0.0932*Math.Cos(((Math.PI/4))*x))

elle devrait donner une sinusoide , mais je ne sais pas du tout comment faire ?

dois-je faire un tableau de valeur pour x et après tracer des points ou peut on directement tracer cette fonction,

Merci
Afficher la suite 

5 réponses

Répondre au sujet
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 20 juil. 2007 à 16:01
+3
Utile
Salut !

Ta fonction c'est quelque chose de la forme y = f(x)
avec f(x) = (0.25 + 0.22508*Math.Sin(((Math.PI/4))*x)+0.0932*Math.Cos(((Math.PI/4))*x)) dans ton cas.

Donc, pour tracer ta fonction sur du papier millimétré, tu fais comment ?

Tu calcul f(0), et tu met ton point en [x=0; y=f(0)]
puis tu calcul un autre f(x), par exemple f(1), et tu refait pareil.
Enfin tu relie les points.

Et bien l'écran, c'est comme du papier millimétré. L'unité de mesure n'est pas le milimètre, mais le pixel. A part ca, rien ne change.

Admettons que ta fenetre de traçage fasse 100px par 100px.
Tu trace f(x) avec x allant de 0 à 20 (exemple)
donc, petit coefs : x 0 -> tx 0; x = 20 -> tx = 100; => coeffX = 100 / 20 = 5 && decalX = 0;
tu encadre les valeurs max/min de y de la meme facon :
y allant de -100 à 100 : y -100 -> ty 0; y = 100 -> ty = 100; => coeffY = 1 && decalY = -100;

Maintenant, en utilisant les coordoonées des pixels, tu obtient les valeurs de ta fonction :
p[X;Y] = [X * coeffX + decalX ; f(X) * coeffY + decalY]

Tu n'a plus qu'a tracer tes points. Si tu trace un point pour chaque pixel de ta zone de tracage, ca risque de prendre un paquet de temps.
Tu peux donc faire comme tu fait à la main : tu trace un pixel tous les 10/20 pixels en largeur. Et tu les relie.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ctx_man
luudo 10 Messages postés jeudi 18 janvier 2007Date d'inscription 22 juillet 2007 Dernière intervention - 20 juil. 2007 à 20:05
0
Utile
je comprend bien le principe mais quelle est la commande permettant de tracer ces points ?
Commenter la réponse de luudo
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 21 juil. 2007 à 00:05
0
Utile
Salut,

Il n'y a pas de commande à proprement parler.
Il doit bien exister quelques librairies destinées à cet usage mais de tête je ne peux pas t'en citer.
En revanche si tout ce qu'il te manque est de tracer la courbe à partir de points calculé, tu peux peut être regarder du côté de ZedGraph.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
luudo 10 Messages postés jeudi 18 janvier 2007Date d'inscription 22 juillet 2007 Dernière intervention - 21 juil. 2007 à 16:14
0
Utile
il n'y a rien a faire je n'arrive rien a faire pour tracer mes points
si je vous laisse les coordonnées de 4 points serait t'il possible d'avoir un exemple

point A (X,Y) : 1 ; 0,39
point B             2 ; 1,03
point C             3 ; 0,32
point D             4 ; -0,14

en fait il faut utiliser une picture box c'est bien ca ?

merci d'avance
Commenter la réponse de luudo
ctx_man 285 Messages postés mardi 28 décembre 2004Date d'inscription 20 janvier 2013 Dernière intervention - 21 juil. 2007 à 19:24
0
Utile
Salut !
Je ne pense pas q'une librairie de dessin additionnelle soit nécéssaire pour tracer une courbe. Si tu en veux vraiment, bah il y a OpenGL, DirectX, Allegro, SDL, .....

Mais bon, perso GDI me semble suffisent.
Pas besoin de picturebox ou je ne sais quoi. N'importe quel control/form peut servire de feuille de dessin.
Cherche du coté de Graphics.DrawLine, Graphics.DrawBezier ou encore Graphics.DrawCurve)
Tu trouvera toutes les infos que tu veux sur msdn. Ces objets/methodes sont dans System.Drawing.
Commenter la réponse de ctx_man

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.