Kivy: Animation über 360 Grad rotieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
MME1985
User
Beiträge: 1
Registriert: Sonntag 18. September 2022, 15:54

Ich stelle in einer Animation mit Kivy die Windrichtung dar. Es ist eine Windrose mit den jeweiligen Gradangaben und ein Pfeil.

Das funktioniert auch einwandfrei - außer die Windrichtung variert zum Beispiel zwischen 350 Grad und 010 Grad. In diesem Moment dreht sich mein Zeiger gegen den Urzeigersinn auf 010 Grad. Ist der nächste Wert wieder z.B. 355 Grad geht es im Urzeigersinn wieder zurück. Die Anforderung ist, dass die Animation immer den kürzesten Weg zum nächsten Input nimmt. Und das ist nun mal über 360 Grad hinaus und ggf. wieder zurück.

Wer kann mir helfen? Vielleicht gibt es etwas anderes als Kivy? Vielleicht muss man das mathematisch überlisten?
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

kivy kann nur die Anweisungen ausführen, die programmiert werden. Also allgemein würde ich das in diese Richtung schreiben:

Code: Alles auswählen

def main():
    for degree in range(360):
        if 180 > degree > 0:
            degree *= -1
        elif 360 > degree > 180:
            degree = 360 - degree
        print(f'The shortest way is {degree} degrees')


if __name__ == '__main__':
    main()
Entweder gegen den Uhrzeigersinn zurück (-) oder im Uhrzeigersinn (+) die Gradzahl zurück zu 0.

Spezieller könnten die Antworten werden, wenn du uns deinen Code zeigst.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14541
Registriert: Mittwoch 14. Oktober 2015, 14:29

Benutzt du den Animations-Mechanismus von Kivy? Wie genau wird da die Drehung angegeben? Was passiert denn, wenn du Werte größer als 360 angibst? Denn die korrekt auf den gültigen Wertebereich abgebildet werden, dann reicht es ggf, die Drehung einfach immer relativ auf den aktuellen Wert zu addieren. Damit zieht man den Wert quasi auf, aber das stört ja nicht.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Den Winkel kann man mit dem Modulo-Operator beschränken.
Schau zunächst nach, ob Kivy dafür nicht eine eigene Funktion/Methode hat,
Möglicherweise akzeptiert Kivy auch Werte größer als 360° und führt auch die Modulo-Operation durch.

Code: Alles auswählen

def turn(degrees, increment=1):
    current = 0
    while current <= degrees:
        yield current % 360
        current += increment

positions = list(turn(540, 20))
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
__blackjack__
User
Beiträge: 13111
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@DeaD_EyE: Das löst ja gerade nicht das Problem, das der neue Winkel dann irgendwann auch mal kleiner wird als der vorherige und die Animation dann in die falsche Richtung durchgeführt wird.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten