Announcement

Collapse
No announcement yet.

Algorithmus kürzeste Rotation

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Algorithmus kürzeste Rotation

    Hallo,

    ich habe folgendes Problem. Ich versuche einen Algorithmus zu entwickeln der bei gegebenen Anfangswinkel und Endwinkel die kürzere Rotierung herausfinden soll. Sprich ob er rechts oder links herum drehen soll.

    z.B.
    | Anfangswinkel | Endwinkel | Rotierung
    | 0 Grad | 350 Grad | Links (Gegen den Uhrzeiger)
    | 0 Grad | 20 Grad | Rechts

    Dieses Problem habe ich jetzt wiefolgt gelöst:

    Wenn man nämlich berechnet
    A:=Anfangswinkel
    E:=Endwinkel

    Einmal die benötigten Schritte für die rechts Umdrehung: (0+(E-A))modulo 360
    Einmal die benötigten Schritte für die links Umdrehung: (0-(E-A))modulo 360

    Meine Frage ist nun z.B. habe ich einen Winkel Start 90 Grad und ein Ziel 95 Grad. Hier würde man klar rechts rumdrehen leider kann der Winkel nicht z.B den Wert 92 anehmen also muss man doch links rumdrehen. Nun muss man ja eine kleiner grösser Abfrage machen um zuschauen ob 92 in dem Drehbereich liegt.
    Ab hier habe ich ein Denkfehler und kriege diese Abfrage nicht hin.

    Ich würde mich sehr über Eure Hilfe freuen.

  • #2
    Hallo,

    entweder bin ich schon zu müde od. in
    Winkel Start 90 Grad und ein Ziel 95 Grad. Hier würde man klar rechts rumdrehen leider kann der Winkel nicht z.B den Wert 92 anehmen also muss man doch links rumdrehen
    fehlt etwas. Wie kommen die 92° ins Spiel? Und warum doch links?

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Originally posted by Nickl View Post
      | Anfangswinkel | Endwinkel | Rotierung
      | 0 Grad | 350 Grad | Links (Gegen den Uhrzeiger)
      | 0 Grad | 20 Grad | Rechts
      Ist es nicht genau umgekehrt? Der kürzeste Weg von 0 nach 350° ist MIT dem Uhrzeiger (Math. negativ) ... und umgekehrt. Oder was verstehst du unter "Rotierung/Rotation"?

      Comment


      • #4
        Hallo MeierZwoo,

        an die math. korrekte Drehung hab ich auch gedacht, aber hier geht es wahrscheinlich um sowas wie Roboter und dort ist die Drehrichtung mit der Uhr positiv. Aber eine genauer Auskunft kann uns nur der OT geben.

        mfG Gü
        "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

        Comment


        • #5
          Hallo,

          vielen Dank, dass Sie mir versuchen bei der Lösung zu helfen. Es tut mir leid, dass meine Frage etwas verwirrend ist.
          Also das Szenario ist wie Folgt:
          Ich versuche im 2 Dimensionalen Raum ein Skelett zu simulieren, dabei sollen sich verschieden Joints(Knochen) rotieren.
          z.B Soll ein Knochen von 0 Grad auf 350 Grad rotiert werden. Hier wäre natürlich der kürzere Weg wenn man (nicht mathe. korrekte) -10 Grad dreht. Also Links herum.
          Dass Problem hier wäre, dass der Knochen zu seinem Elternknochen nie den Winkel 355 anhemen kann. Folglich kann man doch nicht den kürzeren Weg nehmen und muss rechts herum drehen. Also ich will einem Knochen einen gültigen Wertebereich geben in dem er sich drehen kann z.B. bei einem Unterarm wäre, dass grob geschätzt min = 20 Grad und max =180 Grad.

          Vielen Dank für Ihre Mühen

          MfG

          Comment


          • #6
            Originally posted by gfoidl View Post
            Hallo MeierZwoo,

            an die math. korrekte Drehung hab ich auch gedacht, aber hier geht es wahrscheinlich um sowas wie Roboter und dort ist die Drehrichtung mit der Uhr positiv. Aber eine genauer Auskunft kann uns nur der OT geben.

            mfG Gü
            Es geht nicht darum, ob man links/rechts rum, oder Uhrzeigersinn oder gegen Uhrzeigersinn oder mathematisch positiv oder negativ sagt - sondern darum, daß dem Beispiel die Drehrichtungen komplett verwechselt sind, wenn immer die kürzeste Winkelbewegung gemeint ist.

            p.s. Drehrichtungen bei Maschinen und in der gesamten Physik, also auch bei Robbies werden IMMER entspr. dem mathematischen Drehsinn bezeichnet - sonst kämen die Vektoren recht schnell durcheinander.

            Originally posted by Nickl View Post
            ... (nicht mathe. korrekte) -10 Grad dreht.
            Es gibt kein mathematisch korrektes oder inkorrektes Drehen - es gibt nur einen mathematischen Drehsinn, und der ist entweder positiv oder negativ (weil ein Vektor), niemals korrekt oder inkorrekt.
            Zuletzt editiert von MeierZwoo; 11.12.2012, 17:09.

            Comment


            • #7
              Vielen Dank, dass Sie mich darauf hingeweiesen haben. Da meine Frage ja ist wie ich einen gültigen Drehbereich herausfinden kann ist es meiner Ansicht nach jetzt trivial ob ich die Beispiele bezgl. des mathematischen Drehsinns verwechselt habe. Im Grunde habe ich ja die Frage wie man per Abfrage erreichen kann, ob alle Wert die durchlaufen werden müssen, um die Endpostion zu erzielen in dem gültigen Wertebereich liegen. Da dies ja ein Ringsystem mit modulo 360 ist muss man hier irgendwie erfahren können ob alle Werte die durchlaufen werden müssen in diesem Bereich liegen z.B muss etwas von 10 auf 15 Grad gedreht werden, hier würde man ja +-5 je nach Definition drehen aufjedenfall würde der Winkel folgende Werte anehmen um dort hinzugelangen {11,12,13,14}. Wie kriege ich nun heraus wenn z.B. die Wert {12,..,14} gesperrt sind, dass man so nicht drehen kann.

              MfG

              Comment


              • #8
                Warum unbedingt so kompliziert?

                Der kürzeste Drehwinkel ist ganz simpel die Differenz zwischen Anfangs- (Wa) und Endwinkel (We), bei positiver Richtung WposDiff = We - Wa,
                in negativer Richtung WnegDiff = Wa+360-We,
                die kleinerere Differernz ergibt die Drehrichtung.
                Zuletzt editiert von MeierZwoo; 11.12.2012, 18:27.

                Comment


                • #9
                  Er will ja wissen, welche Werte in der gewünschten Drehrichtung vorkommen. Stimmen einer der vorkommenden Werte mit einem Wert aus einer "Sperrliste" überein, so kann eben - trotz des kürzeren Weges - nicht in die Richtung gedreht werden. Das sollte sich mit einer Schleife und einer Prüfung auf die Sperrliste realisieren lassen
                  Zuletzt editiert von Christian Marquardt; 11.12.2012, 20:37.
                  Christian

                  Comment


                  • #10
                    Hallo,
                    Originally posted by Christian Marquardt View Post
                    ...Das sollte sich mit einer Schleife und einer Prüfung auf die Sperrliste realisieren lassen
                    Ich denke mal eine Schleife ist dazu nicht notwendig. Solch eine "Sperrliste" ist ja immer nur EIN BEREICH. Sobald hier mehrere Bereiche im Spiel sind, entstehen "tote Bereiche" in die nie hineingedreht werden kann. Diese könnten dann ebensogut zur "Sperrliste" hinzugefügt und somit zu einem "Sperrbereich" vereinigt werden. Es müsste eigentlich nur geprüft werden, ob bei der aktuell ermittelten Drehrichtung die Linke oder Rechte Grenze des Sperrbereiches "überschritten" wird. Dies dürfte dann einfachste Mathematik sein.

                    Gruß Falk
                    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                    Comment

                    Working...
                    X