Schieberegler koppeln

Carlos13 shared this question 5 years ago
Answered

Hallo,


ist es möglich zwei oder mehrere Schieberegler miteinander zu koppeln. Im angehängten Beispiel soll das grüne Packet sich nach unten bewegen und wenn es unten ist soll sich das gelbe Packet (Regler p) nach oben bewegen.


Gruß


Carlos

https://ggbm.at/563067

Comments (10)

photo
1

Hallo Carlos,


Schau mal hier hinein:

http://dynamic-mathematics....


Raymond

photo
1

Man kann zwei einzelne Bewegung auch mit einem Schieberegler hinbekommen. Man muss nur die Punkte entsprechend definieren.

photo
1

Bekomme ich überhaupt nicht hin.


Gibt es irgendwo eine umfassende Beschreibung der Scriptsprache, auch wie die Einzelscripte abgearbeitet werden (Reihenfolge) bzw. werden die Scripte tatsächlich von oben nach unten abgearbeitet...


1. Warum übernimmt das script in o nicht?


2. Warum läuft der Regler b gleich los und nicht beim angegebenen Wert?


Hoffe auf Hilfe!


Gruß Carlos

https://ggbm.at/563075

https://ggbm.at/563077

photo
1

Hallo Carlo ...


zum Thema Skripting kann ich dir folgendes anbieten. Ist sicher nicht perfekt, aber liefert ein paar Infos.

http://wikis.zum.de/geogebr...

photo
1

Hallo Carlos,


Am Skript für deine Anwendung bin auch ich beinahe verzweifelt.

Grund:

Ein GGB-Bug im Zusammenhang mit animierten Schiebereglern die auf Einmalig gesetzt sind.

Sobald der Schieberegler das Ende Erreicht hat, wird der/die andern laufenden Schieberegler blockiert.

Bug-Report: https://www.geogebra.org/forum/viewtopic.php?f=8&t=32755


Eine entsprechende Umgehungslösung haber ich in den Skript (o) gestellt.

Er enthält unter anderem das Setzen der Animation, die in ein Ausführen eingebettet ist. Damit wird

kein Else-Fall benötigt, der dann logischerweise true lauten würde und die Animation in bestimmten Konstellationen ungewollt starten würde.

zB. im Falle des Scriptes vom Reset-Knopf (neu), der die Regler auf 0 setzt aber die Animation nicht startet.

Den (im anhang gelöschten) Script in p verstehe ich nicht. Ich meine er kann ersatzlos gestrichen werden.

Ausserdem enthielt er einen Syntaxfehler, dar aber erstaunlicherweise von GGB nicht gemeldet wurde.

Im folgenden File findest Du die Scripts und die entsprechenden Kommentare dazu.


https://ggbm.at/563083


===============================================================================================

In Deiner Beispiel-Script-Datei ist im wesentlichen falsch, dass in a für b 3 StarteAnimation[] in Sequenz ablaufen.

Jeder dieser drei Skript-Zeilen wird in der Sequenz innerhalb des Skriptes ausgeführt und überschreibt in b das

Setzen (der Animation) der vorangegangenen Skript-Zeilen. Es wirkt sich also nur die letzte Zeile aus.

Siehe dazu auch im folgenden Befehl wie sich im (zugefügten) Text die Auswirkung (STOP resp. START) ändert.


https://ggbm.at/563085


===============================================================================================

Fals Deine Animation sich mit diesen Stati begnügt, so ist die Skript-Lösung noch einigermassen übersichtlich.

Solltest Du beabsichtigen komplexere, von einander abhängige Abläufe zu implementieren, so käme zB das folgende,

grundsätzlich anders funktionierendes Prinzip, in Frage:


https://ggbm.at/563079


Parallell zur x-Achse läuft auf einer Strecke ein Animierter Punkt (Time). Der x-Wert dieses Punktes entspricht dem Zeitpunkt der geamten Animation.

Parallel zu dieser Strecke und genau gleich lang verlaufen an- und absteigende Streckenzüge (im Beispiel 2 nämlich rot und blau)

Jeder dieser Streckenzüge entspricht einem "Regler".

Der "Regler"-Wert ergibt sich aus dem y-Wert des Schnittpunktes von der Senkrechten von Time zur xAchse. Damit ist es möglich zu bestimmen wann welcher "Regler" welchen Wert einnehmen soll.

- die Steilheit des Streckenzugabschnittes bestimmt die Geschwindigkeit und Bewegungsrichung des Reglers.

- die relative Lage der StreckenzugAbschnitte zwischen den verschiedenen Strecenzügen bestimmt die Reihenfolge der Animation

Damit hat man übersichtlich und ohne Skripts eine Möglichkeit für komplexere Animations-"Choreografien"


Folgenden Nachteil nimmt man in Kauf:

Da die Stützpunkte der Strecknzüge nicht voneinander abhängig sind, wird es notwendig, dass bei einer geringen Aenderung zu Beginn der Animation für einen bestimmten StreckenzugAbschnitt (zB Geschwindigkeit) alle andern Punkte (auch jene der anderen Streckenzüge) manuell nachgerückt werden müssen.

eine prinzipielle und generelle Lösung für dieses Problem habe ich (noch ?) nicht.

Ubrigens: ich persönlich verwende für die Animation praktisch ausschliesslich auf 0 bis 1 normierte Werte. Damit ist es ohne Umwege mglich den Befehl Punkt[<PfadName>,<PfadparameterWert>] recht effizient einzusetzen


Anmerkung:

Die Streckzüge und die Punkte sind in der Grafik 2 definiert. Sofern man einen Wert dieser Objekte ändert und das Grafik-Fenster ist nicht markiert (aktives Grafik-Fenster) so taucht das Objekt ungewollt in Grafik-1 auf. Das kann in Eingenschaften/Erweiter (ganz unten) wieder korrigiert werden.

Den Punkten habe ich Namen zugeordnet wie sie in der Tabelle verwendet werden. Damit erscheinen sie auch dort und können dort (übersichtlich) geändert werden. Danach den Bereich markieren und für alle Punkte gemeinsam in den Eigenschaft/Erweiter wieder Grafik-2 zuordnen.


===============================================================================================


Raymond

photo
1

Noch mal .. leider ist meine Zeit zu knapp, um es umzusetzen ... aber ich habe schon ähnliche Probleme auch mit einem Schieberegler gelöst.


1) Statt eine Script bei den Schiebereglern zu verwenden, kann man für die Geschwindigkeit eine Wenn-Abfrage eintragen. Die Geschwindigkeit ist beim zweiten dann Null bis eine bestimmte Situation eintritt, demzufolge dann die Ausgabe der Wenn-Funktion die "normale" Geschwindigkeit festlegt. Da gibt es einen mehrere Jahre alten Bug, weswegen die Geschwindigkeits-Definition bei einer Redefintion hin und wieder verschwindet. Aber so funktioniert es schon.


2.) Man kann bei nur einem Schieberegler die Definition der bewegten Punkte anpassen, so dass sich für bestimmte Werte eben nichts bewegt. Also auch wieder Wenn-Abfrage.


3.) Da hat jemand mal nach eine Aufgabe gefragt, wo vor allem ein Wert eine Rolle spielte, wie der sich veränderte. Dies habe ich in zwei Funktionen stückweise definiert. Über Schieberegler-Wert als x-Wert wurde der Funktionswert bei den beiden Funktionen abgefragt und dadurch die Position bestimmt.

photo
1

Hallo,

ich hätte da im Anhang noch eine ganz einfache Version mit Streckenzügen und Pfadparameter

(keine Scripte, keine Wenn-Abfragen).

Gruß Abakus

https://ggbm.at/563101

photo
1

Hallo


Die Idee von abakus ist für mich wirklich neu und ausserordentlich orginell und für viele Bereiche anwendbar.

Für Deine Anwendung käme sie nur in Frage, wenn Du die Animations-relevanten Teile umbauen würdest.


Vielleicht hast du nun ob der vielen Optionen und skizzierten Ratschlägen die Orientierung verloren.

Nachdem Birgit nun offensichtlich wirklich keine Zeit findet die 4 Anpassungen vorzunehmen resp. zu erläutern (time, o, p und Start), habe ich (eigentlich widerwillig, aber ich hoffe zu Deinem Nutzen) deren Vorschläge sinngemäss in deiner Anwendung umgesetzt und kurz erläutert.

Ich denke solange Du die Ablaufsteuerung nicht wesentlich ausbauen willst/musst, ist das (in der bestehenden Umgebung) der einfachste und sicherste Weg.


Raymond

https://ggbm.at/563113

photo
1

Tsss ... ja, ich habe nicht so viel Zeit ... vor allem das Umsetzen der mir unbekannten Idee kostet Zeit.


... außerdem bin ich im Pfirsisch-Pflück-Stress und noch stressiger ist dafür zu sorgen, dass unser Pfirsich-Vorrat nicht so groß wird ;-)


Hab mal geschaut und tatsächlich die alte Datei gefunden. Es geht um die Simulation einer Abfüllanlage.


Mit der grünen Kurve bestimme ich die Position des zu füllenden Gefäßes. Der Schieberegler bestimmt den x-Wert, bei dem der y-Wert abgelesen wird. Dadurch wird die Bewegung nach rechts gesteuert. Im waagrechten Abschnitt ist keine Bewegung.


Die blaue Kurve bestimmt den Füllstand. D.h. der Funktionswert gibt die Höhe des Rechtecks an.


Allgemein ... die Funktionen dienen als "Speicher" für alle möglichen Werte, die sich auch kontinuierlich verändern lassen. Ob es nun Positionen sind oder vielleicht auch sogar die Geschwindigkeit eines Schiebereglers.


Grüße, Birgit

https://ggbm.at/542097

photo
1

Hallo Allerseits,

Hallo Birgit,

Ich sehe keinen wesentlichen Unterschied zwischen meinem Alternativ-Vorschlag im vorvorletzten Post Version "Forum_32741_A_TimingRegie.ggb" einerseits und Deinem Deinem letztes Beispiel (Abfüllanlage_Birgit.ggb besten Dank dafür).

Der Unterschied liegt im Wesentlichen darin, dass Du eine Funktion verwendest und ich einen Streckenzug. Wobei vermutlich im Zeitpunkt, als Du Dein Beispiel erstelltest der Streckenzug (und noch vieles mehr) noch nicht verfügbar war.

Ich habe Dein Beispiel zum Anlass genommen den aufgeführten Nachteil der Streckenzüge zu beheben ohne an Flexibilität einzubüssen. Ich denke das ist mir weitgehend gelungen indem die Definitionen der Streckenzug-Stützpunkte nicht mehr absolut sondern relativ zum vorangehenden Stützpunkt deklariert werden. Die Eingabe über die Tabellen-Ansicht erhöht zusätzlich die Uebersichtlichkeit. Die Tabelle ist so angelegt, dass alle Punkte der beiden (oder mehrere) Streckenzüge pro Zeile einen gemeinsamen x-Wert haben. Das erhöht die Wartbarkeit der Streckenzüge ergibt aber mehr Stützpunkte, was jedoch durch die Kopierfunktion der Tabelle unerheblich erscheint. Zusätzlich ermöglicht dies, dass jedem Streckenabschnitt ein Status (in den Objekten abfagbar) zugeordnet werden kann.


Im folgenden einige technische Erläuterungen zu diesen Streckenzügen, die das Verständnis erhöhen sollen. Die verwendeten Namen beziehen sich auf das Beispiel im Anhang

Spalten in der Tabelle (ab Zeile 3):

A : der Wert um den der X-Wert der Stützpunkte (der beiden Streckenzüge) relativ zu den vorangegangen erhöht werden soll.

C: Die absolute Koordinate für einen Stützpunkt des Position-Streckenzuges. Die Werte dieser Punkte ergeben sich aus den andern Spalten und dürfen nicht überschrieben werden.

D: Analog A jedoch für den Y-Wert (satt X))jedoch nur für die Spalte C wirksam

F und G: Analog zu C und D jedoch für die Pegel-Stützpunkte.


Speziell ist noch A1, der die Anzahl relevanter Zeilen festhält.


Die Definitionen in C und F sind so aufgebaut, dass jederzeit eine Zeile gelöscht ode eingefügt werden kann.

Die letzte Spalte (I), der Status dient nicht nur einer gewissen Dokumentation. Im Algebrateil wird laufend der aktuelle Status ermittelt und kann zB in "Bedingung um Objekt Anzuzeigen" verwendet werden (im Beispiel sind das die Texte (Beispiel "Zuführung aktiv"), die je nach Status erscheinen)


Der höchste X-Wert der Streckenzug-Stützpunkte kann ein belieber, sich ergebender Wert sein. Er hat auf das Timing und die Geometrie keinen Einfluss. Dieser Wert wird im Algebrateil ebenfalls ermittelt (Time') und ist für die Definition einer Strecke, auf der der Punkt Time' läuft relevant. Der Schnittpunkt zwischen der Senkrechten auf Time' und den beiden Streckenzügen ergibt den Y-Wert, der sinngemäss einem Schieberegler (angetrieben vom Streckenzug) entspricht (TimePegelY und TimePosY). Hier wird auch die Multiplikation für die geometrischen Dimensionen vorgenommen.

Zu erwähnen ist noch, dass sich nicht das Orginal-Objekt(e) bewegt. Vielmehr wird das (verborgene Orginal) per Translation und als Kopie zum zeitbedingten Ort bewegt.

Alle Punkte, die für die Definition der Objekte notwendig sind (Fülldüse, Füllung, Behälter) sind freie Objekte in einer Liste (erzeugt mit KopiereFreiesObjekt mit anschliessendem Löschen der Orginale). Damit entfällt auch die Generierung der Objekt Kanten. Dies entschlackt den Algebrateil ganz wesentlich von Hilfsobjekten, die die Uebersichtlichkeit reduzieren.

Es mag vielleicht der Eindruck entstehen, dass in meinem Beipiel mit Kanonen auf Spatzen geschossen wird. Sicher kann man dieses Beispiel, mit seinen relativ simplen Kurvenverläufen möglicherweise einfacher definieren. Aber wie gesagt, es ist ein Beispiel, das eine bestimmte Technik vermitteln soll, die eventuell in andern Anwendungen die Arbeit vereinfacht. Insbesondere dann, wenn in der Schlussphase des Designs das Timing der Animation noch fein getunt werden soll. Oder im laufe der Entwicklung gar zusätzlich Animationsphasen berücksichtigt werden müssen.


Raymond

https://ggbm.at/563117

© 2019 International GeoGebra Institute