habe Vektor , suche Rotation

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • habe Vektor , suche Rotation

    Ich kann einfach nicht glauben daß es unmöglich ist, ein 3D-Model per Transformation an einem Vektor auszurichten (so daß es in Richtung des Vektors zeigt).
    Aber dieses Problem hält mich schon wieder wochenlang auf. Ich sehe ja ein, daß das keine einfache Aufgabe ist, aber möglich sollte es doch sein?

    Ich verspreche auch, nie wieder eine Frage zu diesem Thema zu posten.

    Um genau zu sein: Es geht um eine Art Ellenbogen-Gelenk. Bekannt sind die Ausrichtungen von Oberarm und Unterarm. Dieses Gelenk (model) muß jetzt so gedreht werden, daß es genau senkrecht zu der Ebene steht, auf der die beiden Arm-Teile liegen.
    Ich habe den Normalvektor berechnet, aber ich kann daraus keine (korrekte) Drehung machen.
  • Verdammt - ich dachte mir fast, daß Du das sagen würdest. Danke sehr, Rootnode. Weißt Du was, spar Dir doch solche Antworten einfach, denn wie Du schon bemerkt hast: Helfen tust Du mir damit nicht. "Sorry."

    Ich habe mich wochenlang mit dem Zeug auseinandergesetzt, ich hab auch jede Menge Erklärungen etc gelesen. Zum Beispile diese hier
    Ich erlaube mir mal anzunehmen, dass du mit (+1,0,0) meinst, dass x=1,y=0,z=0, also koordinatenanordnung in den vektorangaben ist (x,y,z). In diesem Fall ist mir schleierhaft, wieso du fwd_standard (=(+1,0,0)) um die x-Achse rotierst (xRot = asin( fwd.z ) ), was ja keinen Effekt hat. Ich wusste auch nicht, dass er arcus-tangens 2 argumente hat.

    vielleicht zur veranschaulichung vorab: xRot gibt an, wie die kamera gekippt ist, yRot ist der hoehenneigungswinkel (elevation) und zRot die horizontale blickrichtung (azimuth).

    also, du willst eine standard-kamera erst um x, dann um y und dann um z rotieren. dass du mit x anfaengst, ist nett, weil fwd_standard eh schon in x-richtung zeigt, die rotation um x hat also auf den 'vorne'-vektor keinen einfluss. ist ja auch einleuchtend, der kippwinkel der kamera hat ja nichts mit der blickrichtung zu tun. bleibt noch eine rotation um y, dann z. zunaechst die um z: die bekommst du indem du fwd (also die gegebene, irgenwie rotierte kamera) in die xy-ebene projezierst, d.h. fwd.z ignorierst. dann wird das ein 2-dimensionales problem.

    2d-winkelberechnung: nicht einfach mit phi=atan(y/x), sondern hier brauchst du wohl 4 fallunterscheidungen: fuer winkel zwischen -45° und 45° also mit x > |y| nehmen wir phi=atan(y/x). auf der anderen seite des kreises, also zwischen -135° und 135° erkennbar an x < -|y| nehmen wir phi=180°+atan(y/x). fuer die restlichen winkel empfiehlt es sich x und y zu vertauschen und dan entsprechend 90° dazuzaehlen, oder abziehen, das fuehre ich aber jetzt nicht mehr aus. ziel letzterer aktion ist es, nicht zu kleine zahlen im nenner zu haben, und gleichzeitig das problem mit x=0 zu erschlagen. diese methode kommt sehr gut klar mit x nahe 0 oder y nahe 0, aber nicht mit x und y beide nahe 0 ("gimbal lock"), dazu spaeter.

    nun hast du zRot, dann kannst du die letzte rotation rueckgaengig machen: rotiere fwd um -zRot um die z-achse. dann nach demselben schema in die xz ebene projezieren und winkel ausrechnen, du erhaelst yRot. hier ist es allerdings unmoeglich, dass x nahe 0 und gleichzeitig z nahe 0 ist, daher kein problem bei der winkelberechnung.

    zusammenfassung: wir haben zRot, yRot und suchen noch xRot. klar dass wir xRot (kippwinkel) jetzt mit dem rwd-vektor berechnen. rwd-vektor um zRot zurueckdrehen, dann um yRot zurueckdrehen. jetzt ist er nur noch um xRot verdreht, also wieder ein 2-dimensionales problem diesmal in der yz-ebene. auch hier: unmoeglich dass y nahe 0 und gleichzeitig z nahe 0, also ein gutes gewissen bei der winkelberechnung.

    bleibt noch der fall, dass ganz am anfang x nahe 0 und y nahe 0 ist. in diesem fall fangen wir einfach mit rwd statt mit fwd an. dazu wird man fast alle variablen umdeuten muessen => das ist fehleranfaellig, weshalb ich es hier ausspare :). aber im endeffekt selbe vorgehensweise.

    diesen fall kannst du uebrigens groszuegig ab hoehenwinkel >45° und <-45° ansetzen, also fuer z>sqrt(3)/3 und z<-sqrt(3)/3.

    oder diese hier

    Das ist für mich so, als wenn ich eine Steuererklärung für eine Bäckerei machen sollte.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Melancor ()

  • Ja, klar. Aber sie es mal so:

    Dein Problem ist ein, für den 3D-Bereich, recht "simples" Problem. Und du kannst nicht bei jeder klitzekleinen Frage erwarten dass man dir alles vorkaut.
    Außerdem kann ich deiner Beschreibung dein Problem nicht ganz entnehmen. Weil deine Angaben sind ein wenig wirr!
    Oberarm und Unterarm bilden eine Ebene, is ja auch richtig so, sonst würde ichmir um meinen Arm auch Sorgen machen. Aber wie bitte soll mein Ellenbogengelenk SENKRECHT dazu stehen?
    Gib mir detailierte Informationen, dann kann ich vielleicht helfen.

  • Ok... auf diesem Bild kann man sehr gut das besagte Teil erkennen, weil es etwas dunkler ist als der Rest. Dieses Teil richtig zu drawen, ist was mir solche Probleme bereitet. Viel genauer kann ich nicht werden, und ich finde das weder simpel (kaum jemand in der GMC fällt was dazu ein) und Du dürftest mich eigtl. auch nicht als jemand kennen, dem man jede Kleinigkeit vorkauen muß, oder? Naja egal.
    Bilder
    • hexagelenk.jpg

      14,92 kB, 430×200, 244 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Melancor ()

  • Naja, wenn das (hier etwas dunklere) Teil falsch gedreht wird, sieht's so aus wie in dem Bild:

    Eigentlich würde ich am liebsten die Transformation vom Oberarm übernehmen, dann fehlt mir im Grunde nur noch ein Winkel (logisch, das Teil wird ja eigentlich nur um eine Achse gedreht)
    Dann habe ich versucht das Problem zu isolieren, indem ich die Rotation des einen Teils komplett selbst berechne mithilfe des besagten Vektors. Dieser ist zwar jetzt bekannt, hilft mir aber nicht weiter... im Bild übrigens als schwarze Linie zu sehen, der rot markierte Zylinder sollte parallel dazu liegen. Das ist allerdings mangels Perspektive schlecht zu erkennen.
    Bilder
    • Neu Bitmap.png

      31,21 kB, 420×348, 211 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Melancor ()

  • Du musst halt ne Transformationsmatrix für den Zylinder erstellen und den dunkleren Teil entsprechend dieser Transformationsmatrix berechnen.

    Ich empfehle dir folgendes:
    Besorge dir ein Buch über Lineare Algebra. Empfehlen kann ich nur das hier


    Also, have fun.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von rootnode ()