Bogenmaß Einheitsquadrat - variabler Polygonzug

ckoch shared this question 4 months ago
Answered

Ich würde gerne das Bogenmaß eines Punkts auf einem "Einheitsquadrat" erzeugen / anzeigen lassen - so wie man das Bogenmaß am Einheitskreis anzeigt.

Das klappt bei mir nicht:


https://www.geogebra.org/cl...


Wenn P auf der rechten vertikalen Seite des Quadrats liegt, soll

Polygonzug((1,0), P) eingezeichnet werden.

Wenn man P dann auf die obere horizontale Seite zieht, soll

Polygonzug((1,0), (1,1), P) eingezeichnet werden.

Sowohl in der Eingabe der Algebra als auch in CAS klappt das aber mit dem "Wenn" nicht. Wird die Bedingung x(P) = 1 nur bei der Erstellung der Liste PListe abgefragt und dann statisch gelassen?


Hat jemand eine Idee, wie man das lösen könnte?

Comments (10)

photo
1

Ich versteh Dein Anliegen nicht ganz:

Grundsätzlich, die Abfrage auf Gleichheit lautet == und wird mit einem Fagezeichen über dem Gleichheitszeichen angezeigt ===> Sonderzeichen - ich geh mal davon aus, dass die Abfrage trotzdem funktioniert - die liste ändert sich jedenfalls....


Warum das CAS?

die x,y,z-Funktionen im CAS zu verwenden ist gewagt - ich ersetze sie durchs Skalarprodukt.

photo
1

Try this with ==

Pliste :=If( xp == 1, {E,P}, {E,D,P})
Also I don't think you need the CAS for this

photo
1

Thanks a lot, that helped! The double equality sign did the trick.

The CAS isn't needed:

https://www.geogebra.org/cl...

The wrapping is now shown on all four sides, the length is shown correctly from 0° to 315°, it should be negative für angles fom -45° to =0° ...

But it is illustrating something :)

photo
1

Hm,

wenn es um den Umlauf geht? Würde ich anlegen als


PL = {(1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0), (-1, -1), (0, -1), (1, -1)}

poly=Polygon(PL)

t=slider 0...1 step 0.01

P=Point(poly, t)

s=Polyline(Join({Take(PL, 1, floor(8t + 1)), {P}}))

Richtung wäre ggf. anzupassen...

photo
1

Meine Lösung war deutlich komplizierter, ich habe dann mit Mod gearbeitet:

https://www.geogebra.org/cl...

Deine Lösung ist deutlich eleganter, das werde ich gleich einmal versuchen umzusetzen.


Ich benötige aber noch Hilfe bei einem weiteren Fehlerchen. Wenn ich in

https://www.geogebra.org/cl...

den Punkt P einmal rundherum bis (1, 0) ziehe, verschwindet der Punkt P und ist nach dem Loslassen anschließend nicht mehr greif- und bewegbar. Das passiert auch in der oben angegebenen Datei für das nicht gekippte Quadrat.

photo
1

Das mit dem Verschwinden ist mir auch schon aufgefallen - sieht nach einem Bug aus?


Ich hab mal Deine Version in den Grundzügen eingebaut und da funktoniert alles.


Mein Versuch enthält einen grünen Läufer Q mit einem Slider t als Treiber. Während der Läufer P freibeweglich bleibt - also mit der Maus verschiebar und mit Animation als Treiber.

Ich hängs mal dran...


Zum Fehler:

Es ist sicher kontraprodiktiv PListe immer wieder zu verändern. Besser die Liste statisch halten und mit Take() die Liste für den Gebrauch in Polyline zurecht zu schneiden - siehe mein Beispiel. P wird auch in allen Grafikansichten geführt und lässt sich nicht aus der 3D-Ansicht rausschalten - popt immer wieder dort auf - merkwürdig - da müsste man ansetzen, denke ich....

Wenn man die Ansicht im Grafikfenster an/aus/an schaltet, dann kommt er auch wieder?

photo
1

Schick!

Die Tricks mit der Listenverarbeitung und Floor helfen wirklich!

Aber bei Dir verschwinden doch keine Punkte, auch nicht in der 3D-Ansicht!

Ein/Ausschalten der Ansicht in der Grafik (klicken auf das Kreissymbol in der Algebraansicht) macht ihn bei mir nicht sichtbar, nur ein Neuaufruf der GeoGebra-Datei.

photo
1

Das Verhalten des P-Punktes in Deiner Version - wie gesagt, sieht nach einem Bug aus ==> mach mal einen Problembericht draus damit Michael drauf schaut.


Die Zuordnung View-Location meinte ich (advanced property)


/o8JquGzGnXUbWyq0qNwWAwmh4tfqBxlCllZXH6RZ1SI4SQNiCVGtGXdaRGCCFt4f8D+clvt+WjHmYAAAAASUVORK5CYII=

zum an/aus/an schalten - und da drängt sich der Punkt immer wieder in die 3D Ansicht - kaum klickt man die wech - schon taucht er wieder auf. Ist da irgendwo ein 3D Objekt in deiner Befehlskette? Oder es wird etwas 3D interpretiert und durch die Flatterliste immer wieder zurückgesetzt?/xI5tc5kWTsjBIHLBjmT4e8b2ICf84pcfTMUW1iCvuL8pTZPceQqgt2C6FD4cHvLuWvwQNdb47h6YuEqh20zv+HjLk7sOZBwBrDbnpugecnOgN4UfAW95wNFy85AkS4JFP1XOtQHbgGtDG7el+UNrznGorwof9nAHc+0R87YZnUZ8i6Dbzg6RgAAAOw==

photo
1

Das mit dem verschwindenden Punkt P hängt mit PListe zusammen. Das scheint eine Variante dieses Anzeige-Bugs (2. beschriebenes Phänomen) zu sein. Wenn sich der Inhalt von PListe an so einem Übergang ändert (aber anscheinend nur beim Übergang zu einer der früheren IF-Bedingungen, also von Quadrant 4 zu 3 oder 1, von Quadrant 3 zu 2, von Quadrant 2 zu 1), dann wird P nicht mehr gezeichnet. (Auch B und C nicht mehr beim Übergang vom Quadrant 4 zu 1.)


Einfachste Möglichkeit zur Umgehung des Problems: Anzeige von PListe abschalten. Punkte in der Liste werden ja eh nicht angezeigt wegen des vermutlich gleichen (oder ähnlichen) Bugs (erstes beschriebenes Phämonen in dem Link). Ansonsten kann man das Problem auch umgehen, indem man in der Liste immer P z.B. durch P+(0,0) ersetzt.


Im Übrigen kann man auch ohne Neustart den Punkt wieder anzeigen lassen. Einfach bei den Anzeige-Optionen, das Häkchen bei Grafik kurz entfernen und wieder setzen.

photo
1

Hm,

könnte das irgendwie mit dem Single-Object-Typ Listen-Paradigma zusammen hängen? Ich hab den Eindruck, dass Point/vector nicht sauber unterschieden werden?


In ckoch's version hab ich den PListe inhalt Vector erzwungen, was auch das Problem löst - interessanter weise fehlt dann auch die Eigenschaft Show Object.

Wenn(x(P) ≟ 1, {Vektor(E), Vektor(P)}, Wenn(y(P) ≟ 1, {Vektor(E), Vektor(D), Vektor(P)}, Wenn(x(P) ≟ -1, {Vektor(E), Vektor(D), Vektor(A), Vektor(P)}, {Vektor(E), Vektor(D), Vektor(A), Vektor(B), Vektor(P)})))

/52Ed5GAAAAABJRU5ErkJggg==


Grundsätzlich würd ich aber Listen nach Möglichkeit immer statisch anlegen - Änderungen an Listenstrukturen sind alles andere als stabiler Code.

photo
© 2021 International GeoGebra Institute