Gesucht: runder Schieberegler

abakus shared this question 10 years ago
Answered

Hallo Community,

für das Themengebiet Einheitskreis/trigonometrische Funktionen wäre ein runder (und damit Endlos-) Schieberegler praktisch.

Ich bin mitr bewusst, dass es viele Sonderwünsche für erweiterte Funktionalitäten gibt, die sicher nicht alle in der nächsten Version realisiert werden können.

Es würde ja schon ausreichen, wenn man einen Gleiter mehrmals um einen Kreis herum bewegt und dabei den überstrichenen Winkel (auch über 360°, auch unter 0°) ablesen und für weitere Berechnungen verwenden könnte.


Hat jemand eine Idee, wie man das mathematisch realisieren könnte?

Viele Grüße

Abakus

Comments (9)

photo
1

Hallo Abakus ...


irgendwie finde ich deine Wünsche widersprüchlich.


Du willst einen runden Endlosschieberegler. Im Prinzip kein Problem. Man nehme eine Kreis, fixiere ihn und lasse darauf eine Gleiter laufen. Man bestimmt den Winkel und legt den in einer Variable ab. So oder auch direkter kann man einen Punkt etwa auf einem Einheitskreis "kreisen" lassen.


Auf der anderen Seite willst, aber, dass es weiter geht, hinter dem Winkel 360°. D.h. dann aber doch auch, das es nicht endlos geht. Wenn man von etwa 1000° wieder zurück will, kann man nicht weitermachen, bis man wieder bei 0° landet. Außer man gibt es entsprechend vor, dass es nach 1000° mit 0° weiter geht.


Wie dem auch sei ... ich habe eben mal was zur zweiten Variante probiert, denn das ist ein typisches GeoGebra-Problem:

Neben dem Winkel zu dem Gleiter auf dem Kreis, könnte man eine Variable verwenden, die mir die Runde zählt, auf der ich bin. Daraus könnte ich dann, mit dem aktuell gemessenen Winkel, die Gesamt-Winkel bestimmen.

Soweit die Theorie!

1.) Das Problem ist, dass ich in Geogebra nicht hochzählen kann. Also so was wie Runde = Runde +1 geht nicht (das nennt man hier Zirkelbezug)

2.) Wie merke ich, in welche Richtung ich den Schieberegler bewege? Muss ich also hoch- oder runterzählen bei der Rundenanzahl?


:bulb: Ha ... mir kam eben noch eine Idee, wie ich einen Schieberegler, bis 720° bekomme. Evtl. kann man diese Idee auch auf andere Winkelbereich anwenden.


Und zwar habe ich zu meinem Bewege-Punkt, also den, den ich Schiebe, eine weiteren konstruiert, der auf der Winkelhalbierenden zwischen Gerade[Kreismittelpunkt,Schiebe-Punkt] und Gerade [Kreismittelpunkt,Startpunkt] liegt. Wichtig jetzt: Unter Einstellung muss man die Kontinuität einschalten, da sonst die Winkelhalbierende springt. So einfach geht das :wink:. Schon fertig!

Wenn man jetzt nicht die Winkelhalbierende sondern die Winkeldrittelnde oder -viertelnde nimmt, kann man noch einen größeren Winkelbereich bekommen. Negative-Winkel-Werte bekommt man, indem man einfach etwas subtrahiert.


Vermutlich werde ich diese Idee mal im Wiki eintragen!


Grüße, Birgit.

photo
1

Tsss ... :flushed: ... hab die Datei vergessen

https://ggbm.at/533479

photo
1

Hallo Birgit,

das waren meine Hoffnungen, dass sowas wie Runde=Runde+1 geht (und auch meine Befürchtungen, dass es nicht geht).


Tolle Idee, wie du das Problem trotzdem gelöst hast.

Viele Grüße

Abakus

photo
1

Hallo ...


hab mal probiert ... mit 4 mal 360° geht es auch ohne Probleme. Nur wenn man den Bereich verschieben will, gibt es ein Problem. Sobald ich 360° abziehe verhält sich der Zähler etwas merkwürdig. Teilweise zeigt sich das typische Winkelverhalten (d.h. mod 360). Dann aber wieder nicht.


Das Problem ist sicher, das vorgegeben ist, wie mit einem Winkelwert, mit Gradangabe, umgegangen wird. Hier muss man vermutlich umrechnen ins Bogenmaß und erst für die Ausgabe in Winkel umrechnen.


Grüße, Birgit

photo
1

Wäre es nicht einfacher, einen Punkt auf der x-Achse (oder auf beliebiger Gerade) als Schieberegler zu verwenden, welcher seinerseits (evtl. unter anderem) den Punkt auf dem Einheitskreis bewegt?


Ich habe ähnliche Ideen für Winkel ausserhalb des Intervalls [0,2π] realisiert z.B. auf

http://www.kst.ch/mathemati...

http://www.kst.ch/mathemati...

und

http://www.kst.ch/mathemati...


Beste Grüsse

André

photo
1

Hallo Birgit und Abakus


inzwischen habe ich mir überlegt, wie ich den runden Schieberegler (softwaremässig) programmieren würde. Wenn man den Software-Algorithmus hat, bleibt bloss das Problem, wie man die sequenzielle Programmierung in eine statische Programmierung (= ggb-Benutzeroberfläche) übersetzen kann.

Hier meine Lösung für beliebig viele Umdrehungen, die ich aber bloss im Kopf ''ausgeführt' habe:


Kernidee:


(Die folgende Idee gilt für eine Bewegung des kreisrunden Schiebereglers in positiver Richtung; für negative Richtung muss man analog denken).

Für die Realisierung muss man mit verschachtelten wenn-Befehlen arbeiten.


Damit man die Runden zählen kann, muss man die Vergangenheit des (zu ziehenden Regler-) Punktes kennen. Diese Vergangenheit kann man mit einem zweiten (unsichtbaren) Punkt speichern, welcher diesem ein wenig hinterher hinkt. Sobald der Reglerpunkt einen positiven Winkel hat und sein Vergangenheitspunkt einen negativen Winkel hat, hat der Reglerpunkt eine (neue) Runde vollbracht und die Anzahl der Runden muss um 1 erhöht werden.

Bei statischer Programmierung ist jetzt aber das Problem, dass diese Situation eine Weile bestehen bleibt, so lange, bis der Vergangenheitspunkt die Nullposition auch überquert hat. Dem würde ich so abhelfen:


Am Anfang ist der Reglerpunkt bei 0°. Der Vergangenheitspunkt ist am gleichen Ort wie der Reglerpunkt. Erst wenn der Reglerpunkt einen Polarwinkel >90° (z.B.) hat, wird der Vergangenheitspunkt um (z.B.) 10° zurück gesetzt. Das ist mit if bzw. wenn realisierbar.

Der Zähler für die Anzahl der Runden wird um 1 erhöht, sobald der Reglerpunkt einen positiven und der Vergangenheitspunkt einen negativen Polarwinkel hat. In diesem Moment muss aber der Vergangenheitspunkt wieder auf den Reglerpunkt gesetzt werden, damit die Anzahl der Runden nicht mehrmals erhöht wird für eine kleine Winkeländerung.

Wie erkennt man, wann das nötig ist?

Man muss auch für die Anzahl der Runden die Vergangenheit kennen (zwei Variablen verwenden)! Sobald die neue Anzahl der Runden grösser als die alte Anzahl der Runden ist, muss der Vergangenheitspunkt wieder auf den Reglerpunkt gesetzt werden. Anschliessend muss man die alte Anzahl der Runden gleich der neuen Anzahl der Runden setzten.


So weit so schön, aber leider nur bei sequenzieller Programmierung!

Muss man das vorherige ''anschliessend'' mit GeoGebra statisch umsetzen (alles passiert bei ggb ''gleichzeitig'' statt nacheinander), bekommt man einen ''Zirkelschluss'': Der Vergangenheitspunkt ist abhängig von der alten Anzahl Runden und diese ist abhängig vom Vergangenheitspunkt. GeoGebra würde vermutlich eine Fehlermeldung liefern.

Abhilfe:

Die alte Anzahl der Runden wird erst gleich der neuen Anzahl der Runden gesetzt, wenn der Reglerpunkt einen Polarwinkel von >90° hat.


Ich denke, so müsste sich der exotische Wunsch nach einem runden Schieberegler für beliebig grosse Winkel erfüllen lassen.

Fürs selbst Ausprobieren fehlt mir die Zeit.

Fürs Aufschreiben im Forum habe ich mir die Zeit genommen, damit viele Besucher etwas lernen können.


Viel Spass, Abakus!


(vielleicht schickst du mir dein Endprodukt, falls du erfolgreich warst)

photo
1

Ich hab wieder einmal in meinem Fundus gestöbert. Dabei bin ich auf einen Kreis-Regler gestossen, halb fertig und nicht so richtig funktionierend.


Ich hab mich dem Problem erneut angenommen. Im Anhang die Lösung.

Folgende Probleme mussten gelösst werden:

  • Die Null muss 2 mal gezählt werden. Einmal in negativer Richtung einmal in positiver Richtung (Es gibt also 2 verschiedene Nullen !!). Für alle andern Zahlen gibt es beim Zählen je zwei Werte einen positiven und einen negativen. Für 0 jedoch nur einen. Dies wird relevant, wenn man den Pfadparameter des Punktes auf dem Kreis zum Zähler hinzuzählen will. Ich habs auch mit abs() in Kombination mit sgn() versucht, dabei wurde ich nicht fündig (aber vielleicht gibt es trotzdem eine Lösung mit diesen Funktionen). Schlussendlich habe ich mich für eine Liste mit der Zahlenreihe und den Vorzeichen entschieden (beide mit 2 Nullen mit unterschielichem Vorzeichen). So ganz glücklich bin ich mit dieser Lösung noch nicht, da sie oben und unten limitiert ist (was jedoch auch erwünscht sein kann).


  • In welche Richtung bewegt sich der Punkt beim Null-Durchgang (und nur dort!!). Dabei soll der Nullpunkt ein Punkt und keine Strecke auf dem Kreis sein. Damit ergibt sich das Problem, dass der Script zu träge (oder gar nicht) angesprochen wird. Die Lösung: Die eigentliche Berechnung erfolgt in einem normalen Objekt. Der Script dieses Objektes sorgt dafür, dass die Vergangenheit gemerkt wird und die Addition ausgeführt wird.

    Normalerweise laufen Scripts jedoch vor der Aktualisierung des Objektes.

    Der Befehl AktualisiereKonstruktion[] sorgt dafür, dass zuerst das Objekt berechnet wird bevor die restlichen Script-Zeilen ausgeführt werden.


    Das Erkennen ob die Grenze überschritten wurde (sowie die Richtung) ist mit Ungleichungen und dem Befehl LiegtImBereich[] gelöst.


Es sind verschiedene Erweiterungen denkbar:

  • Einen weiteren äusseren oder inneren Kreis mit einem Schnelldurchgang für die Grob-Einstellung.

    Min und Max-Werte (allenfalls optional)

    positives Zählen wahlweise im und gegen den Uhrzeigersinn.

    Längen oder Winkelmasse.

    Null-Punkt wahlweise oben, unten, links oder rechts

    Umsetzen als Makro, das unter anderem einen Text generiert, der darauf hinweist welcher Script-Befehl bei welchem Objekt eingefügt werden muss.


Das Beispiel habe ich mit 4.2 erstellt. Es müsste aber auch unter 4.0 funktionieren.

Das Tool funktioniert recht gut aber nicht 100% fehlerfrei (Asynchronität (?) der Scripte). Aber man muss sich anstrengen um es aus dem Takt zu bringen.


In irgend einem Tread wurden in diesem Zusammenhang anstellen des Kreises eine Spirale eingesetzt. Ich habe diesen Tread leider nicht mehr gefunden.


Den Einsatz des Kreis-Reglers sehe ich weniger im Zusammenhang mit Winkeln sondern eher bei Reglern mit grossen Wertebereichen, die trotzdem fein justiert werden müssen.


Raymond


Nachtrag:

Ich hab die Liste für die Zahlenreihe durch eine Funktion ersetzt, es gibt somit nach unten und oben keine Limiten mehr.

https://ggbm.at/559339

photo
1


...In irgend einem Tread wurden in diesem Zusammenhang anstellen des Kreises eine Spirale eingesetzt. Ich habe diesen Tread leider nicht mehr gefunden...


Raymond

Hallo Raymond,

schön, dass du dich dieser alten Geschichte noch einmal annimmst. Das Bewegen eines Punktes auf einer Spirale hatte ich damals auch schon probiert und wieder verworfen.

Wenn man den Mauszeiger ein kleines Stück zu weit von der aktuellen Spiralposition entfernt, springt der Punkt auf die benachbarte Windung.

Gruß Abakus

photo
1

Hallo abakus


(Schön, etwas von Dir zu hören :D )


Für, oder besser gesagt, gegen das Hüpfen eines Gleiters auf einem Pfad (Spirale) hätte ich eine Lösung.

Es hat aber noch Bug's im Zusammenhang mit Schneiden[Kurve..] sodass ich daraus (noch) keinen Regler basteln kann.


Raymond

https://ggbm.at/559383

© 2019 International GeoGebra Institute