Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Dessiner rapidement une fonction f(x)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Dessiner rapidement une fonction f(x)

Posté le 22/12/2015 12:28

Bonjour à tous !
Il n'y a pas longtemps, nous avons vu en cours ce magnifique outil qu'est le graphe de fonction.
En voyant une parabole à l'envers et comment on peut la déplacer, j'ai eu l'idée d'un jeu.

J'ai fébrilement pris ma calculatrice, je l'ai non moins fébrilement allumé et j'ai été, en me demandant ce que je faisais, dans le menu programme. Après tout ce temps sans y avoir touché, j'ai appuyé sur F3 et nommé mon programme "WQJNRPLF". Nom fort évocateur de ce que j'allais écrire.

Après plusieurs heures de cours et pages de calculs sur mes feuilles d'exercices. J'en suis arrivé à un petit truc sympa. MAIS j'utilise Graph Y= pour dessiner ma fonction carré ce qui est horriblement lent.
Je fais donc appel à vous cher communauté que j'ai honteusement quitté au gré d'une certaine personne.
Comment puis-je dessiner rapidement une fonction carré ?

Merci aux personnes non rancunières de mon départ imprévue qui auront l'incroyable gentillesse de m'aider

Merci à tous de votre aide ! Voici comment je procède grâce au superdrawstat :

ViewWindow -64,64,0,1,64,0,1,50,1 //On paramètre la fenêtre pour avoir l'axe des ordonnés au milieu que des Y positifs. Ainsi que (les 3 derniers) dans l'ordre : la 1ère case de la liste à lire, la dernière case à lire, et le pas

//On initialise les list avec un nombre max assez grand
ClrList3Ù
ClrList4Ù
50ãDim List 3Ù
50ãDim List 4Ù

//On détermine le point de départ
EãList 3[1]Ù
FãList 4[1]Ù

E-1ãXÙ //On détermine a partir de quelle coordonnées X de la courbe commencer a lire les valeurs

2ãYÙ //Quand Y sort de l'écran on arrête de dessiner donc ce serait bête de ne pas dessiner à cause de l'ancien Y qui était en dehors

2ãPÙ //La case de la liste par laquelle on va commencer à remplir

//Boucle de détermination des points de la courbe
While 1Ù
-((X-A)/B)²+CãYÙ //Notre fonction à dessiner

//On écrit les coordonnées du point dans les listes
XãList 3[P]Ù
YãList 4[P]Ù

Y<1×BreakÙ //Si le point sort de l'écran on arrête

X-1ãXÙ //On va de la droite vers la gauche donc on enlève 1 à X

//Pour avoir un dessin aussi rapide peu importe la taille de la courbe
X-1-(E-X)*0.2→X //Plus le nombre de points augmente moins on en comptabilise. Merci Ninestars !

P+1ãPÙ //On passe à la case suivante de la liste

WhileEndÙ

PãTämaxÙ //Taille de la liste

Graph(X,Y)=(List 3[T],List 4[T]) //On dessine le graphe



Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 22/12/2015 13:28 | #


Il n'y a malheureusement pas plus rapide que Graph Y=. Ou sinon il faut calculer f(x) pour chacun des pixels à afficher, puis utiliser le super drawstat.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir Hors ligne Administrateur Points: 24700 Défis: 170 Message

Citer : Posté le 22/12/2015 13:29 | #


Dark storm a écrit :
Il n'y a malheureusement pas plus rapide que Graph Y=. Ou sinon il faut calculer f(x) pour chacun des pixels à afficher, puis utiliser le super drawstat.

Sauf que le Super DrawStat est un graphe paramétrique donc accessoirement nécessairement plus lent que le graphe classique.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 22/12/2015 13:30 | #


J'y ai pensé mais rien que remplir les listes seraient long à mourir. Merci de votre aide. Je vais rester la dessus
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 22/12/2015 13:30 | #


Sur une centaine de points il est bizarrement plus rapide que le graphe classique

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 22/12/2015 13:33 | #


Vraiment ? J'ai seulement qqs points alors c'est partii !
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 22/12/2015 13:36 | #


Sur ce code, la solution par Super DrawStat (une fois les listes remplies) est beaucoup plus rapide…

X^2->[b]Y[/b]1
DrawGraph

For 1->I To 127
I*(6/127)-3->X // Pour le centrage du graphe
X->List 1[I]
[b]Y[/b]1->List 2[I]
Next

Graph(X,Y)=(List 1[T], List 2[T])

Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 22/12/2015 18:29 | #


Dark storm a écrit :
Sur une centaine de points il est bizarrement plus rapide que le graphe classique

Ça ne m'étonne pas beaucoup, j'imagine que le graphe standard fait le calcul pour les 128 points visibles à l'écran. Avec le graphe paramétrique, on peut réduire le nombre de points et les relier simplement entre eux.
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 22/12/2015 22:50 | #


J'ai surtout l'impression que le graphe classique fait plus que 128 points : sur du 1/x, quand on tend vers 0 le résultat n'est pas pareil via Super Drawstat
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 23/12/2015 11:55 | #


En SuperDrawStat on peut se débarrasser des listes en mettant directement les expressions des coordonnées en paramètre.
Et la variable Toptch défini le Pas. Autant s'en servir
0->Tomin
128->Tomax
3->Toptch
Graph(X,Y)=(T,T^2)
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 23/12/2015 11:56 | #


J'ai trouvé une manière plus rapide mais merci

J'edit le post de base pour la mettre.
Fabcvlr Hors ligne Membre Points: 2275 Défis: 41 Message

Citer : Posté le 23/12/2015 11:58 | #


Pour accélérer l'affichage d'une fonction, tu peux augmenter la valeur de dot dans le V-Window ! je le fais souvent sur les Ti car elles sont très lentes à afficher les fonctions. Cela augmente l'espace entre les points du graph mais ça ne se voit pas si tu sélectionnes Connect dans le Draw Type du Setup.
Du coup en me relisant, je me demande si j'ai été clair !
L'expérience des autres, c'est comme une chandelle que l'on tient allumée dans son dos par une nuit de tempête !
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 23/12/2015 12:00 | #


Pas bête ça 9*
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 23/12/2015 12:19 | #


J'ai rien compris Fab
J'ai éditer pour montrer comment j'ai fait. C'est de la bidouille mais ça marche bien
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 23/12/2015 14:25 | #


C'est bien compliqué ton code Matt
Merci DS
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 23/12/2015 15:55 | #


Comme c'est moi qui l'ai écrit ça me parait simple et clair
Donc je vois pas pourquoi tu le trouves compliqué
Ninestars Hors ligne Membre Points: 2462 Défis: 24 Message

Citer : Posté le 23/12/2015 17:53 | #


Pourquoi c'est compliqué ?
ViewWindow -64,64,0,1,64,0,1,50,1 // Tu initialises Tomax alors qu'il va changer plus tard

// Pourquoi faire des listes de 50 ? Et si ton programme a besoin de liste de taille 60 ?
// Autant faire des listes vides que tu agrandies au fur et à mesure (le Basic le permet)
ClrList3
ClrList4
50→Dim List 3
50→Dim List 4

//Un point de départ ? Si tu évalues ta fonction en E, tu obtiens ton point de départ, alors pourquoi le gérer à part ?
E→List 3[1]
F→List 4[1]

E-1→X

2→Y // Tu es sensé trouver Y avec la formule -((X-A)/B)²+C→Y, pas en l'imposant. Encore une fois tu fais une exception.

2→P // Et voilà ! Tu pourrais commencer à 1 et retirer les deux trucs du dessus. Voire à 0 et retirer les quatres trucs du dessus...

// Une boucle avec un P qui augmente de 1... C'est du For
While 1
-((X-A)/B)²+C→Y

X→List 3[P]
Y→List 4[P]

Y<1⇒Break

X-1→X

// 4 conditions !!! mais il doit bien y avoir un moyen de généraliser ça non ;)
E-X>5⇒X-1→X
E-X>10⇒X-1→X
E-X>18⇒X-1→X
E-X>28⇒X-1→X

// Les 5 lignes, c'est à peu de choses prêt : X-1-(E-X)*0.2→X

P+1→P

WhileEnd

P→Tθmax

Graph(X,Y)=(List 3[T],List 4[T])
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 23/12/2015 18:00 | #


Voila ma justification

ViewWindow -64,64,0,1,64,0,1,50,1 // Tu initialises Tomax alors qu'il va changer plus tard : Il y a un moyen de ne pas l'initialiser ?

// Pourquoi faire des listes de 50 ? Et si ton programme a besoin de liste de taille 60 ?
// Autant faire des listes vides que tu agrandies au fur et à mesure (le Basic le permet)
//Je ne savais pas qu'on pouvait agrandir les listes au fur et a mesure sans effacer (j'avais un vague souvenir mais depuis le temps que je n'avais pas touché à une calculatrice)
ClrList3
ClrList4
50→Dim List 3
50→Dim List 4

//Un point de départ ? Si tu évalues ta fonction en E, tu obtiens ton point de départ, alors pourquoi le gérer à part ?
//Ca j'en ai besoin dans mon prog ;) Je le faisait sans avant mais j'en ai besoin mtn
E→List 3[1]
F→List 4[1]

E-1→X

2→Y // Tu es sensé trouver Y avec la formule -((X-A)/B)²+C→Y, pas en l'imposant. Encore une fois tu fais une exception. : Vrai mais je ne sais pas pourquoi dès fois ça buguait sans ça...

2→P // Et voilà ! Tu pourrais commencer à 1 et retirer les deux trucs du dessus. Voire à 0 et retirer les quatres trucs du dessus...

// Une boucle avec un P qui augmente de 1... C'est du For : On peut commencer à 2 dans une boucle for ?
While 1
-((X-A)/B)²+C→Y

X→List 3[P]
Y→List 4[P]

Y<1⇒Break

X-1→X

// 4 conditions !!! mais il doit bien y avoir un moyen de généraliser ça non : peut etre je vais voir mais c'est de la bidouille, ca fonctionne donc je n'ai pas forcement réfléchi a l'optimisation
E-X>5⇒X-1→X
E-X>10⇒X-1→X
E-X>18⇒X-1→X
E-X>28⇒X-1→X

// Les 5 lignes, c'est à peu de choses prêt : X-1-(E-X)*0.2→X  : Merci !

P+1→P

WhileEnd

P→Tθmax

Graph(X,Y)=(List 3[T],List 4[T])

Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 26/12/2015 00:13 | #


J'ai pas programmé depuis plusieurs année en Basic, mais pour les boucles for, d'après mes vagues souvenir, il me semble que c'est très simple ...


For 2->Z To 200 Step 1     //On va de 2 à 200 avec un incrément de 1
...
Next

1337
Matt36230 Hors ligne Membre Points: 1888 Défis: 0 Message

Citer : Posté le 26/12/2015 10:54 | #


C'est ça je ne pensais pas qu'on pouvait le faire commencer à deux. Je croyais que cette valeur était l'incrément. Merci Xav
Btl Hors ligne Ancien modérateur Points: 3879 Défis: 107 Message

Citer : Posté le 26/12/2015 13:33 | #


Btw si ton pas est de 1 (Step 1), tu n'es pas obligé de l'indiquer.
Un excellent tuto video qui vous explique comment transférer des fichiers de l'ordinateur vers la calculatrice et vice versa ma chaine youtube
mes jeux
mes jeux

Jouez à 6 sur une seule calto : Curve Fever
Un die and retry qui vous fera bieeeen rager Test Andropov
un très bon sokoban
le seul vrai jeu de foot en basic : FIFA 12
Ca c'est ce que j'appelle un jeu de reflexion jewel master
Qui vaincra l'intelligence artificielle de cet othello
Le célèbre pacman
Et tant d'autres BTL's games

Le jeu du mois de Novembre et award du jeu le plus dur de l'année 2013 MultiTask, testez-le

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 37 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd