Curseur et création de points.

MrMartin shared this question 2 years ago
Answered

Bonjour à tous.


Je débute en scripting sur Geogebra et, en m'inspirant de ce qu'on trouve sur le sujet Script, je voulais créer, via un curseur entier n, la réalisation de n point placés aléatoirement.

J'ai donc placé, via le menu "Propriétés", le script

for(var i =0;i<n;i++) {

ggbApplet.evalCommand("A_"+i+"=(random()*10,random()*10)"); }

dans l'onglet Actualisation


Malheureusement, rien ne se produit et je ne comprends pas vraiment pourquoi.


Pourriez-vous, s'il vous plait, m'éclairer à ce sujet?

Comments (30)

photo
1

Salut,


et tu n'as pas eu de messages d'erreur ?


as-tu vérifié que ton script était bien classé en Javascript et non en GGbscript


les variables ne sont globales, donc ton script doit aller lire la valeur de ton curseur


essaye avec


var n = ggbApplet.getValue('n')

for (var i = 0; i < n; i++) {

ggbApplet.evalCommand("A_" + i + "=(random()*10,random()*10)");
}

photo
1

Merci de cette réponse rapide.

J'ai bien déclaré le script en JS.

Je pensais bien qu'il s'agissait d'obtenir la valeur associée à l'objet curseur.

Je vais tester ça.


J'en profite pour une autre question annexe car je ne trouve pas la réponse sur les wiki.

Est-il possible via script de modifier les propriétés d'un objet Geogebra?

photo
1

comme je crois comprendre que tu as envie de faire mumuse avec JS


https://wiki.geogebra.org/f...


mais il y a aussi les GGbScript ;-)

photo
1

Merci encore.

J'essaie de concilier les deux au mieux en fait, sans devoir réinventer la roue.

Mais c'est tellement riche et vaste que je ne sais trop où chercher alors j'expérimente et, dès que je suis vraiment bloqué, je pose une question.

Maintenant, depuis votre première réponse, je sais qu'il faut définir des variables globales associées aux objets numériques pour interagir avec JS, ça ouvre déjà un sacré champ de possibles! Merci encore donc.


Par contre, je n'ai pas trouvé, via les GgbScripts, comment modifier l'état de l'objet, d'où ma volonté de "faire mumuse avec JS" ^^

photo
1

Bonjour

Dans un GeoGebraScript, on écrit des commandes GeoGebra (comme on les écrirait dans la saisie)

"comment modifier l'état de l'objet"

Regarde toutes les commandes qui commencent par "Soit"

Voici la première (voir toutes les autres dans l'encadré à droite de la page)

photo
1

Merci bien, je vais donc tester via la méthode evalCommand()

photo
1

Un petit détail d'affichage (quand i≥10)

Ecris A_{" + i + "} au lieu de A_" + i + "

photo
1

il faut le faire dès le départ si i doit dépasser 10

A_9 et A_{9} ne seont pas les mêmes objets

photo
photo
1

Bien.


Tout d'abord, merci, car avec vos explications claires, j'ai réussi à concevoir un script correspondant à l'affichage de points aux coordonnées aléatoires, avec nommage par indexation et affichage de l'étiquette.

Une question cependant bien que ce script fonctionne:


Le logiciel n'a pas indentifié la commande mise en commentaire, autrement dit la version française de la commande.

Est-ce un bug?

Le script in extenso:

var n = ggbApplet.getValue('n');


for (var i = 1; i <= n; i++) {


ggbApplet.evalCommand("A_{" + i + "}=(random()*10,random()*10)");


ggbApplet.evalCommandGetLabels("A_{" + i + "}");


// ggbApplet.evalCommand("SoitOptionEtiquette(A_{" + i + "}, 0)");


ggbApplet.evalCommand("SetLabelMode(A_{" + i + "}, 0)");


}

photo
1

oui oui l'anglais prime :-(


mais tu as quand même le loisir de scripter en français en général


SAUF ! pour la commande Exécute

https://wiki.geogebra.org/f...

photo
1

Chers experts otez-moi d'un doute.

Bien évidemment, si j'opte pour l'usage du JS, c'est essentiellement parce que je pense qu'il n'existe pas de structure de boucle en GgbScript.

Par contre, même pour une simple affectation de variable, je dois repasser par ggbApplet.evalCommand()?

photo
1

Cher toi ;-)


effectivement il n'y a pas de boucle (d'or) classique for... to... step ... dans GeoGebra, MAIS, la commande Séquence() fait bien souvent le taf !


evalCommand() est pour la création d'objet

pour une affectation de valeur à un objet, dans la majorité des cas, la commande setValue(nom, valeur) est bien adaptée

photo
1

Merci, ça devrait me faire gagner un temps précieux pour expérimenter plus avant.

photo
1

Bon, finalement je suis de retour plus vite que prévu, je tourne en rond en cherchant à corriger ce scrit, qui m'envoie un message d'erreur très long, et que je n'arrive ni à interpréter, ni à Googler efficacement. Voilà le code:

ggbApplet.evalCommand("a = RandomBetween( 1, 9)*(-1)^RandomBetween(1, 2)");


ggbApplet.evalCommand("b = RandomBetween( 2, 9)*(-1)^RandomBetween(1, 2)");


ggbApplet.evalCommand("c = RandomBetween( 1, 9)*(-1)^RandomBetween(1, 2)");


ggbApplet.evalCommand("d = RandomBetween( 2, 9)*(-1)^RandomBetween(1, 2)");


if (b<0) {


ggbApplet.setValue(b_1, -b);


ggbApplet.setValue(a_1, -a);


} else {


ggbApplet.setValue(b_1, b);


ggbApplet.setValue(a_1, a);


}


if (d<0) {


ggbApplet.setValue(d_1, -d);


ggbApplet.setValue(c_1, -c);


} else {


ggbApplet.setValue(d_1, d);


ggbApplet.setValue(c_1, c);


}

photo
1

Je voulais mettre intialement tout le code en gras et on ne peux pas éditer...

photo
1

Hello

Je ne suis pas très compétent en JS, car je n'ai jamais eu besoin de l'utiliser, vu que j'ai toujours pu faire ce que je voulais faire par GeoGebraScript

Mais il me semble (Noel confirmera) que la bonne syntaxe est :

ggbApplet.evalCommand("SetValue (a_1,-a)")

et puis JS connaît-il ta variable a_1 ?

photo
1

Non Jean-Luc c'est bon ggbApplet.setValue() mais le 1er paramètre est une str !! donc sans aller fouiller je dirais à Mr Martin


qu'il écrive au moins ggbApplet.setValue('a_1', -a);


mais pourquoi se (nous) faire ch... avec JS pour si peu

photo
1

Tu te rappelles il y a quelques années que j'avais commencé JS, mais bon : j'ai laissé tomber surtout parce que cela ne m'était pas indispensable : GeoGebraScript fait le job... (il y a vraiment que des trucs très pointus qui nécessitent de passer par JS)

"Pourquoi faire simple quand on peut faire compliqué" (à remettre dans l'ordre lol)

On ne t'empêche pas d'apprendre JS Mr Martin... mais cela demande beaucoup d'investissement pour bien maitriser JS

Bon courage...

PS : Et puis Python est apparu dans les programmes de Mathématiques de lycée, et c'est là que nous (les french) regrettons beaucoup que Python ait été abandonné dans GeoGebra...

photo
1

Je le regrette également car je sais programmer en Python, et que je trouve le langage beaucoup plus simple et intuitif que JS.

photo
1

Merci pour la str, c'est ce qui avait échappé à ma vigilance.

Loin de moi l'idée de vouloir soulever une querelle idéologique entre les deux langages, j'envisageais d'utiliser une boucle while pour reproduire l'algorithme d'Euclide en fait, ceci n'existe pas en GgbScript d'accord?

J'ai ensuite vu avec plaisir qu'un objet liste avait des propriétés sympathiques sauf l'intersection, mais pour un PGCD en fait pas besoin, on se débrouille avec \.

photo
1

Je ne suis pas dogmatique, j'essaie de me former à tout, dans la mesure où passer par JS sera de toutes façons nécessaire si je veux développer quelque chose de "sérieux" sur le Web (enfin, plus diplomatiquement, disons que le fait que JS soit le langage le plus usité pour le dev Web me guide vers ça, Python doit faire le job avec Django mais bon...)Merci en tous cas, je sais bien que je vous sollicite souvent et pourtant, croyez-moi, je passe aussi et surtout du temps à chercher par moi-même...

photo
1

(J'avais oublié aussi le plus important pour Python: et surtout plus abondamment et mieux documenté pour une prise en main relativement autonome... En guise de comparaison, je n'ai sincèrement pas trouvé que le premier argument et SetValue était une str...)

photo
1

"j'envisageais d'utiliser une boucle while pour reproduire l'algorithme d'Euclide en fait, ceci n'existe pas en GgbScript d'accord?"

GeoGebra n'est pas un logiciel de programmation pure... Le JS n'a d'intérêt qu'en lien avec les objets créés avec GeoGebra

(GeoGebra possède la commande PGCD...)

photo
1

GeoGebra est un logiciel de géométrie dynamique

Certains sur Euclide ont fait de super fichiers

https://www.geogebra.org/m/h8ystQg4

photo
1

"J'ai ensuite vu avec plaisir qu'un objet liste avait des propriétés sympathiques sauf l'intersection"

https://wiki.geogebra.org/f...

Les commandes sur les listes sont très très complètes... et permettent de pratiquement tout faire

https://wiki.geogebra.org/f...

___________

Quant aux séquences, tu peux les imbriquer (comme tu imbriques des boucles "for")

photo
2

"j'essaie de me former à tout, dans la mesure où passer par JS sera de toutes façons nécessaire si je veux développer quelque chose de "sérieux" sur le Web (enfin, plus diplomatiquement, disons que le fait que JS soit le langage le plus usité pour le dev Web me guide vers ça"

Super...

Je te conseille de programmer en JS avec les bibliothèques adéquates...

(Moi je ne suis qu'un petit prof de Maths qui utilise GeoGebra non pas pour développer, mais dans le cadre de mon métier (pour la formation de mes élèves...) et faire le lien entre une séquence GeoGebra et une boucle Python est très formateur...)

photo
1

Merci beaucoup en tous cas pour avoir pris le temps de me répondre. Il n'y a pas de petit prof.

photo
1

J'utilise GeoGebra, non pas pour moi, mais pour mes élèves (je fais des animations, des exercices interactifs, des TPs)

Depuis le temps, je connais un peu ce logiciel, et j'aide des élèves ou des profs qui viennent ici pour l'utiliser

Ta motivation semble être toute autre... et je ne peux pas t'aider en JS

Bon vent...

photo
photo
2

@Mr Martin

Pour ton premier fichier, ça dépend de ce que tu veux faire, mais quand tu bouges le curseur, les 50 points restent dans le graphique...

Si tu veux que quand le curseur soit à une valeur (par exemple 16) il n'y ait que 16 points à l'écran

pour cela, il n'y a même pas besoin de script..!

© 2022 International GeoGebra Institute