Punkt auf einem zusammengesetzten Streckenzug animieren

ich shared this question 9 months ago
Answered

Auf der deutschen Seite

https://wiki.geogebra.org/d... gibt es aktuell am Ende den Eintrag:

Punkt auf einem zusammengesetzten Streckzug animieren
Übrigens, hier sollte es wohl "Streckenzug" heißen.

Aber nähere Informationen dazu finde ich dort nicht und sonst hier im Forum bisher auch nicht.

Ich möchte eine Punkt (Körper) entlang eines Weges (lineare Strecke, Kreisbogen und andere Bahnkurven) mit konstanter Geschwindigkeit oder mit konstanter Beschleunigung bewegen von Anfang bis Ende des Pfades (von 0% bis 100%) - und das dann auch animieren können.

Wo finde ich Hinweise, wie das am besten geht?

Best Answer
photo

Vielleicht helfen die beiden Anhänge weiter.

.


Anhang "ErläuterungZuPfadparameter01" ist das notwendige Basis-Verständnis um den folgenden Anhang zu verstehen.

.

Anhang "constant speed" zeigt eine der Möglichkeiten für eine gleichmässige Geschwindigkeit auf einem Streckenzug.

Comments (17)

photo
1

Vielleicht helfen die beiden Anhänge weiter.

.


Anhang "ErläuterungZuPfadparameter01" ist das notwendige Basis-Verständnis um den folgenden Anhang zu verstehen.

.

Anhang "constant speed" zeigt eine der Möglichkeiten für eine gleichmässige Geschwindigkeit auf einem Streckenzug.

photo
1

rami - vielen Dank für die beiden wunderbaren Anhänge!!! Das erklärt das Konzept sehr gut.

Schön, dass es dynamische ggb Dateien mit Erklärung sind und nicht nur PDF docs.

Es bleiben noch diese Punkte:

  • Kann man dies Polygonzug Konzept auf beliebige Kurven erweitern - also auch nicht nur lineare Strecken, sondern auch Kreisbögen und andere Bahnkurven (Funktionen)?
  • Kann man das Konzept auf gleichmäßige Beschleunigung - statt gleichmäßiger Geschwindigkeit - anpassen. Sollte gehen, wenn man die Geschwindigkeit dynamisch errechnet. Allgemein könnte man Beschleunigung oder Geschwindigkeit auch als Funktionswerte vorgeben. Oder gleich ein physikalisches Model hinterlegen, so dass ein Punkt auf einer Schräge beschleunigt bewegt wird, wie es auch ein Ball auf einer Schräge tun würde. (Das wäre wohl ein extra Thema wert.)
  • Wie kann man (ich?) den Wiki Eintrag https://wiki.geogebra.org/d... ergänzen um obige Informationen/Beispiele?

Danach wäre diese Frage für mich vollständig beantwortet.

photo
2

Punkt 1) Ja, wenn alle Streckenzüge in Teilstrecken aufgelöst sind, alle (Teil-) strecken dieselbe Richtung aufweisen, conics und ähnliches ebenfalls dieselbe Richtung aufweisen alle Elemente lückenlos aneinander hängen.

Punkt 2 erster Teil) Ja, Du könntest den AniSpeedFaktor in Abhängigkeit von b in einem onUpdate Script in b mit einer bliebigen Funktion verändern (nicht getestet)

Punkt 2 Allgemein) mit dieser Variante eher nicht, Wäre tatsächlich ein separates, recht komplexes (simulations) Thema (zB. welches ist die schnellste Rollbahn-Kurve zwischen zwei Punkten)

Punkt 3) Soweit ich weiss nicht direkt.

photo
1

rami - wieder vielen Dank für die hilfreichen Antworten !

Ja - eigentlich will ich ein physikalisches Model in Geogebra um Bewegungsabläufe zu simulieren. (=> neues Thema)

Ok, die Wiki Update Frage kann ich auch mal als neues Thema stellen. (Vieles ist mir hier noch unbekannt oder ich habe die Doku trotz Suche nicht gefunden.)

=> Frage hier komplett beantwortet. Danke!

photo
1

Suchen über Google ist oft erfolgreicher zum Beispiel: Geogebra constant speed

photo
1

Punkt 1) Ja, wenn alle Streckenzüge in Teilstrecken aufgelöst sind, alle (Teil-) strecken dieselbe Richtung aufweisen, conics und ähnliches ebenfalls dieselbe Richtung aufweisen alle Elemente lückenlos aneinander hängen.
Doch noch eine Verständnisfrage dazu. Ein Polygonzug akzeptiert nur Punkte (keine Objekte wie Strecke, Kreisbogen, etc.). Also müsste ich erst alle Strecken, Kreisbögen, etc. in Streckenzüge verwandelen (annähern) und die dann in einen gemeinsamen Polygonzug aneinanderreihen.

photo
2

Nein:

Streckenzüge eliminieren oder erst gar nicht verwenden

Das Eliminieren könnte auch mit dem Befehl Folge() geschehen (SZ=Streckenzug)

SZP={Scheitel(SZ)}

SCS= Folge(Strecke(SZP(n), SZP(n+1)),n,1,Länge(SZP)-1 ) (nicht getestet)

(n) und (n+1) abhängig von Bewegungsrichtung allfällig vertauschen und/oder den Befehl Umkehren( <liste> ) verwenden.


Siehe Anhang mit manueller Streckenzug-Auflösung

photo
1

rami - wieder super mit dem Beispiel - Danke !

Die Pfade müssen nicht mal kontinuierliche geschlossene Wege sein - sondern können auch Sprünge machen. Prima! Für zusammengesetzte Pfade gilt wohl wieder das Gleiche, dass bei N Stücken jedes Stück 1/N des Parameters bekommt, egal wie lang das jeweilige Stück ist. Man kann also wieder mit der Pfadlänge normieren, um z.B. eine konstante Geschwindigkeit zu erreichen. Alles klar !

photo
1

13febf3f6e754989fae092991488ed9e

rami - Ich habe Deine Pfadliste mal etwas abgewandelt zu diesem "komischen Vogel". Pfad1 und Pfad2 sind weiterhin etwas unterschiedlich definiert (gegen und mit Uhrzeigersinn). Gemeinsamer Start- / End-punkt ist A.

Von dort laufen G und H gleichzeitig gegen den Uhrzeigersinn in die gleiche Richtung um den "Vogelpfad" herum. Zum Schluss und auch nach 50% sind die Punkte gleichauf. Aber zwischendurch schafft Punkt G immer einen Vorsprung, der von H wieder aufgeholt wird.

Ich habe den Fortschritt von G und H oberhalb animiert. Die Fortschritte der Parameterwerte scheinen gleichauf zu liegen; aber die Geschwindigkeit muss unterschiedlich sein. So richtig kann ich mir das unterschiedlichen Geschwindigkeitsverhalten von G und H nicht erklären.

Vielleicht kann hier jemand einen gute Erklärung geben?

photo
1

Ich denke fL und gL müssen in beiden Varianten Verwendet werden. Wenn dann beide genau auf 0 resp. 1 gesetzt werden und für beide der Start gleichzeitig erfolgt, dass laufen sie bei mir synchron.

photo
1

rami - Danke für den Hinweis.

Also obwohl gleiche Strecken zurückgelegt werden, ist es ein Unterschied, ob gL = {Strecke(D, F), Strecke(F, A)} oder g = Polygonzug(A, F, D) für den Pfad definiert wird. Interessant - aber die Logik verstehe ich noch nicht.

Auch die Kreisbögen (Halbkreise c und d) werden unterschiedlich schnell durchlaufen, obwohl sie im Pfad2 eigentlich nur gespiegelt eingesetzt wurden. Irgendwie doch komisch.

photo
1

Deine Fragen haben mich veranlasst den Unterschied von Streckenzug und Segment-Liste genau zu untersuchen.

Entgegen meiner bisherigen Annahmen haben bezüglich Animation beide dasselbe Verhalten. Nur wenn man die Animations-Geschwindigkeit (in Abhängigkeit des aktuellen Segmentes und dessen Länge) modifizieren will und/oder dieRichtung umstellen will, dann muss der Streckenzug in eine Element-Liste aufgelöst werden. (Im Vogel-Beispiel wird die Animations-Geschwindigkeit nicht modifiziert, deshalb spielt es keine Rolle ob die beiden Streckenzüge aufgelöst sind oder nicht, dies solange die Richtung stimmt)

.

Für alle Elemente eines Pfades (kreisbögen, Teil-Streckenzüge, Segmente usw) gilt:

Je länger um so langsamer läuft dort die Animation. Dies weil allen Pfad-Elementen genau dieselbe Zeit zugemessen wird (1/Anzahl Pfad-Elemente). Zitat vonDirSelbst: "...dass bei N Stücken jedes Stück 1/N des Parameters bekommt..."

.

In Deinem Vogel-Beispiel ist die Geschwindigkeit der Animations-Punkte nicht in Abhängigkeit des aktuellen Segmentes modifiziert, darum gilt obige Regel.!!!! Vielleicht schaust Du noch einmal hier rein.

photo
1

rami - wunderbar, wie Du der Sache auf den Grund gehst. Vielen Dank!

Ich muss mir dass wohl noch mal in Ruhe anschauen.

Unterschied ist von G und H bei meinem Vogel-Beispiel ist, dass G vom GFortschritt angetrieben wird - und H wandert selber den Pfad lang; HFortschritt ist nur eine Anzeige der relativen Position entlang des Pfades. Dieser Positionswert wird mit PfadParameter(H) zwischen 0 und 1 bestimmt. GFortschritt und HFortschritt bewegen sich sehr synchron (zwischen 0 und 1) während G und H aber mit unterschiedlicher Geschwindigkeit hintereinander herjagen.

Beide Animationen habe ich gleichzeitig an einem Punkt (A) gestartet

photo
1

Deine Beharrlichkeit ist ebenfalls bewunderswert, wenn auch schon fast lästig.

Sie hat aber dazu geführt, dass ich endlich ernsthaft untersuchen wollte, warum die beiden Punkte nicht synchron sind.

Ich habe zwar Vermutungen bin mir aber nicht schlüssig. Irgend was mit der falschen Länge im falschen Zeitpunkt. Insbesondere rund um die absteigende Reihenfolge und die beiden Streckenzüge. Selbst einen GGB-Bug schliesse ich nicht aus.

Mit andern Worten: Ich weiss es auch nach zwei Experimenten immer noch nicht und habe vorerst aufgegeben.

photo
1

rami - danke für die Hinweise, die mich auch ermutigen weiterzuforschen. (Ich bin Informatiker und daher auch fachlich interessiert, dass es eine Erklärung gibt oder ich einen Bug nachweisen kann.)

Ich glaube, dass ich inzwischen die Lösung für dies Rätsel habe: Ein "halber Vogel" besteht aus Strecke, Strecke, Halbbogen (die andere Hälfte genauso wiederholt auch).

Der Unterschied bei der Definition der beiden Pfade ist die "Klammerung": Fall A = einmal ist es (Strecke1, Strecke2, Halbbogen) und Fall B = das andere mal ((Strecke1, Strecke2), Halbbogen)

Im Fall A sind es drei Abschnitte und der Parameterbereich wird gleichmäßig auf die drei Abschnitte verteilt: 1/3 + 1/3 + 1/3

Im Fall B sind es zwei Abschnitte und der Parameterbereich wird auf die beiden Abschnitte verteilt: 1/2 und 1/2

Hier im Fall B bekommt (Strecke1, Strecke2) zusammen 1/2 des Parameterbereichs und den teilen sich die beiden Strecken wieder je zur Hälfte: insgesamt für den Fall B also : Strecke1 = 25% , Strecke2 = 25% und Halbbogen = 50%

Im Fall A jedoch wurde der Parameterraum insgesamt so verteilt: Strecke1 = 1/3 , Strecke2 = 1/3 und Halbbogen = 1/3

=> Das erklärt, dass die gleichen Parameterwerte auf den beiden Pfaden (Fall A und Fall B) unterschiedlich schnell unterwegs sind. Nachvollziehen lässt es sich, wenn man die Animation abschaltet und manuell die Parameter so einstellt, dass die Punkte an den Ende der Teilabschnitte stehen.

Damit wäre das "Vogel" Problem für mich gelöst. Vielleicht lässt sich die Erkenntnis später auch sinnvoll nutzen.Man kann diese Effekte sicher auch allein mit drei oder mehr geraden Strecken (ohne Kreisbogen) nachstellen, indem man Teilabschnitte entsprechend "klammert".

photo
photo
2

Ergänzung zu Punkt 1 von rami. Du musst entweder die volle Parametrisierung kennen (inklusive ds/dt und deren Inverse usw.) oder du musst dir ein Inkrementalschrittverfahren basteln welches je nach Geschick mäßig schnell laufen wird.

photo
1

Man kann den animierten Punkt und dessen Bahnkurve auch unabhängig voneinander definieren, wie zum Beispiel bei der Wurfparabel.

Man richte einen Schieberegler für 0<t<6.02 ein und mache folgende Angaben.

g=9.81

α=80°

v_0=30

v_x=v_0*cos(α)

v_y=v_0*sin(α)

P=(v_x t, v_y t - g t² / 2)

k=Kurve[v_x t, v_y t - g t² / 2, t, 0, 6.02]

Wer noch ein wenig spielen möchte, kann auch eine Schaltfläche (Jump) einrichten und im Skriptingteil eingeben:

SetzeWert[t, 0]

StartAnimation[t]

Und jetzt noch viel Spaß damit im Physikunterricht.

© 2019 International GeoGebra Institute