Listeners im JavaScript Funktionieren nicht

Samuel Süpke shared this question 2 years ago
Answered

Jo,

ich versuche gerade ein Projekt zu realisieren, bei dem ich mit relativ viel SchnickSchnack ein Bakterienwachstum und -sterben simuliere.

Dazu habe ich die Funktion erstellt, lasse mir "Messpunkte" angeben und einen Punkt auf der Funktion entlangfahren, über den eine Listener-Funktion laufen soll (sagt man das so?). Die Listener Funktion soll im Endeffekt überprüfen, ob die x-Werte des animierten Punktes mit den "Messwerten" übereinstimmen und diese dann in Grafik2 anzeigen.

Das Ding ist, dass der animierte Punkt über den Reset Knopf gelöscht und ein neuer, entsprechender erstellt wird, weswegen ich es nicht standardmäßigem OnUpdate coden kann.


ACHTUNG: in der angehängten Datei ist die Überprüfung mit den Punkten noch nicht umgesetzt, weil ich ersteinmal die Listener Funktion testen wollte. Beim Test soll einfach nur eine Liste erstellt werden, was aber selbst hier schon nicht funktioniert.

Vielleicht könnt ihr mir da weiter helfen, das wäre super lieb.

(Ein Workaround für die ganze Sache wäre, dass der animierte Punkt beim Reset nicht gelöscht und anschließend wieder erstellt werden muss, dann könte man das ganze in die standard- OnUpdate Funktion schreiben... beides habe ich nicht hingekriegt :( )

Ich hoffe, dass meine Intention klar wurde.

Beste Grüße,

Sam

(Im Anhang ist meine gesamte Datei - ich bin neu in GeoGebra und habe bisher nur ein wenig mit Python gecoded, weswegen ich auch absolut keine Ahnung von JavaScript habe ... der ganze Code ist eher so zusammen gebullsh!tted)

Comments (3)

photo
1

Try and avoid using "=" to change objects. Instead of

ggbApplet.evalCommand("A_{"+k+"}=("+i+", f("+i+")+random()*5-random()*3)");


try using ggbApplet.setCoords() and see if you can avoid doing

ggbApplet.evalCommand("Bakterienpopulation=Point(f)");

photo
1

Ohne die geplante Applikation wirklich zu kennen (nur erahnen), behaupte ich, dass sie ohne Skripts (GGB und schon gar nich JS) zu erstellen ist. Ausnahmen mögen einige Initialwerte und Bedienungshilfen sein, die in GGB-Skripts erstellt werden können.

Alle Iterationen können mit Folge(), Zip() oder IterationsListe() erstellt werden. Alle Punkte befinden sich in Listen (mit wenigen Ausnahmen).

Das bedeutet auch, dass alles (mit Ausnahme der Zufallswerte) jederzeit vorbestimmt (determiniert) ist. Es findet keine Simulation statt, alles ist Funktional und nicht Prozedural gedacht und realisiert. Das entspricht einem GGB-adäquaten Design.

Je mehr Programme Du schon geschrieben hast um so schwerer wird Dir diese Betrachtungsform fallen.

-----------------------------------------------

Zur Demonstration habe ich im Anhang die Funktion f(x) blind (ohne deren Inhalt verstehen zu wollen) übernommen. Die rot eingefärbten Objekte habe ich dazugefügt. Es sollte in etwa das machen was Du bis jetzt realisiert hast resp. wolltest (?).

  • Bereiche entlang der xAchse festlegen, die den Abstand der Messpunkte in diesem Bereich festlegen. (Dazu gäbe es auch ein automatisiertes Verfahren, das gleich lange Strecken auf der Funktion (nicht auf der xAchse) erzeugt)
  • Die Messpunkte auf der Funktion verteilen (sofern ich das richtig verstanden habe)
  • Im Reset-Script die Random-Messwerte erzeugen.
  • Von den Random-Messwerten nur jene anzeigen, die hinter der aktuellen Zeit (t) liegen.

Auch für routinierte GGB-Anwender wird es mühsam sein den Code zu verstehen.

Voraussetzung dazu ist auch das Verständnis zu den GGB-Befehlen, die im Manual recht grob beschrieben sind.

Konkrete, spezifische Fragen zu den verwendeten Befehlen und zu meiner Anwendung beantworte ich und einige weitere Forumsteilnehmer gerne.

-------------------------------------

Natürlich versteht sich mein Beitrag als Angebot, es ist an Dir ein anderes Vorgehen zu bestimmen und zu realisieren.

photo
1

rami's idea is better than mine (try and avoid scripts totally if possible)

© 2020 International GeoGebra Institute