Vektor in richtung von deinem anderen drehen



  • nuclearspider schrieb:

    kannst du mir das ein bisschen genauer erklären? (so vonwegen kreutprodukt etc)

    Googlen oder Mathe-Forum.



  • TGGC schrieb:

    Es gibt unendlich viele Lösungen.

    Nicht im R2.



  • sag ich ja.

    @nuclearspider:

    du solltest dich mit vektorrechnung vertraut machen bevor du anfängst (3d) spiele zu programmieren. ohne dem gehts nicht 😉

    keine angst, is nicht so kompliziert, im prinzip brauchst du nur die 4 grundrechnungsarten.



  • sag ich ja.

    @nuclearspider:

    du solltest dich mit vektorrechnung vertraut machen bevor du anfängst (3d) spiele zu programmieren. ohne dem gehts nicht 😉

    keine angst, is nicht so kompliziert, im prinzip brauchst du nur die 4 grundrechnungsarten.



  • sag ich ja.

    @nuclearspider:

    du solltest dich mit vektorrechnung vertraut machen bevor du anfängst (3d) spiele zu programmieren. ohne dem gehts nicht 😉

    keine angst, is nicht so kompliziert, im prinzip brauchst du nur die 4 grundrechnungsarten.



  • oops, sorry, ka wie das jetzt ging, mein internet hatte nen hänger 😉

    2x löschen bitte...



  • Sgt. Nukem schrieb:

    TGGC schrieb:

    Es gibt unendlich viele Lösungen.

    Nicht im R2.

    Doch.

    Bye, TGGC (Pipe my World.)



  • dann klär uns unwissende mal auf, ich bin gespannt 😉



  • dot schrieb:

    oops, sorry, ka wie das jetzt ging, mein internet hatte nen hänger 😉

    Meins auch. Trotzdem hab' ICH nur einen Post derweil erstellt... :p

    TGGC schrieb:

    Sgt. Nukem schrieb:

    TGGC schrieb:

    Es gibt unendlich viele Lösungen.

    Nicht im R2.

    Doch.

    Ach, leck' mich doch am Arsch, Du hast gewonnen... tschüss!! :p 😉



  • Ihr dreht Euch im Kreis.

    Bye, TGGC (Pipe my World.)



  • Wenns 3D ist:
    -normalize(Playerposition - Gegnerposition) ist Vektor v1 zum Spieler
    -v2 ist vektor des Gegners
    -du willst v2 drehen dass er auf v1 liegt
    entweder:
    -v2 x v1 ist die Rotationsachse
    -arccos(v2 dot v1) ist der Winkel
    -Rotationsmatrix aus Achse und Winkel bauen (google)
    -gegner_kopf_vertex = matrix * gegner_vertex
    oder wenn du das mit den 3 Winkeln um x, y und z-Achse speichern willst(nicht getestet, sollte Probleme bereiten können, könnte aber funktionieren, vorallem wenn du nur um eine Achse drehen willst):
    -v1.drehachse = v2.drehachse = 0; // für drehachse = y werden beide Vektoren auf den Boden projiziert
    -arccos(v1 dot v2) = Drehwinkel um drehachse



  • TGGC schrieb:

    Ihr dreht Euch im Kreis.

    Bye, TGGC (Pipe my World.)

    nein nur der Spieler ist periodisch mit x+2Pi am drehn.



  • @ spl@t:

    danke,
    aber was ist eigentlich "dot" ?



  • äh ja, hier...

    homo sapiens sapiens, männlich, 19 jahre alt... 😉

    ok, im ernst

    er meint das punktprodukt, auch dot product oder skalarprodukt genannt.



  • b7f7 schrieb:

    TGGC schrieb:

    Ihr dreht Euch im Kreis.

    Bye, TGGC (Pipe my World.)

    nein nur der Spieler ist periodisch mit x+2Pi am drehn.

    Wenigstens einer.

    Bye, TGGC (Pipe my World.)



  • TGGC schrieb:
    Ihr dreht Euch im Kreis.

    Bye, TGGC (Pipe my World.)

    nein nur der Spieler ist periodisch mit x+2Pi am drehn.

    schon klar, aber es gibt trozdem nur 2 möglichkeiten...

    es gibt zwar unendlich viele möglichkeiten für den winkel den die vektoren einschließen, aber es gibt nur 2 möglichkeiten für die "seite" von v1 auf der v2 liegt, was ja die ursprüngliche frage war.

    wir haben 4 quadranten und je 2 quadranten sind von je einer seite abgedeckt...



  • ihr verkompliziert das hier.
    das problem ist ja nur im $$R^2$$
    der Gegner G soll zu P schaun.
    wie TGGC sagt ist der sichtvektor einfach rx=(P-G)/|P-G|.
    wenn man dem Gegner ein lokales koordinatensystem verpasst, mit Sichtachse in X richtung und Y senkrecht dazu, den Nullpunkt packen wir in den Gegner selbst.

    ^
           X |
             |
             |
    Y <------G
    

    Dann muss also der X- vektor nach der Drehung über rx liegen. Y muss aber auch nach der Drehung senkrecht zu rx stehn.
    Es ist also rx nur um 90° weitergedreht.

    \[\cos(90°)=0\] \[\sin(90°)=1\] Ratationsmatrix \[R= \left( \begin{array}{ccc} 0& -1\\ 1& 0\\ \end{array} \right) \] \[ \vec ry=R\vec rx\] \[ \left( \begin{array}{ccc} ry_{x}\\ry_{y} \end{array} \right) =\left( \begin{array}{ccc} 0& -1\\ 1& 0\\ \end{array} \right) \left( \begin{array}{ccc} rx_{x}\\rx_{y}\end{array} \right)= \left( \begin{array}{ccc} -rx_{y}\\rx_{x} \end{array} \right) \] \[ \left( \begin{array}{ccc} rx_{x}& -rx_{y}\\ rx_{y}& rx_{x} \end{array} \right) = T \left( \begin{array}{ccc} 1& 0}\\ 0& 1} \end{array} \right) \]

    Was einem die Rotationsmatrix gibt 🤡
    Es geht natürlich auch einfach über Tangens oder Skalarprodukt aber das ist ja zu einfach.



  • mein 3. beitrag:

    dot schrieb:

    eine matrix baun mit G-P als richtung für die z-achse und z.b. ( 0, 1, 0 ) als richtung für die y-achse.
    x -> krezuprodukt z, y.
    dann y noch einmal neu per kreuzprodukt aus x und z ( damits auch sicher orthognal is )

    nicht vergessen alle vektoren zu normalisieren und die position des gegners auch noch als translation reinzunehem, fertig ist die weltmatrix des gegners.

    so würd ichs spontan machen...

    die matrix würde so etwa aussehen:

    \left( \begin{array} {cccc} x1 & x2 & x3 & 0 \\ y1 & y2 & y3 & 0 \\ z1 & z2 & z3 & 0 \\ t1 & t2 & t3 & 1 \end{matrix} \right)

    x...x-achse
    y...y-achse
    z...z-achse
    t...translationsvektor

    1, 2, 3...vektorkomponenten

    die geschichte mit dem dot product kam daher, dass er zuerst eine sehr unpräzise angabe zu seinem problem machte und ich erst dachte er wollte den winkel zwischen 2 vektoren bestimmen...



  • Ähm, ich glaube er wollte den Winkel haben. Und wenn es wirklich nur 2D ist, wäre meine 2. Lösung wohl am besten. (vielleicht gehts auch nicht, wie gesagt)
    Nochmal:
    y-Komponente von Vektor vom Gegner zum Player (v1) und Vektor des Gegners (v2) auf 0 setzen.
    winkel = acos vom Punktprodukt
    richtung = v2.z * v1.x - v2.x - v1.z
    Fertig.
    Ich nehme an er will keine Matrixrechnungen machen sondern den Winkel so verwenden : glRotatef(winkel, 0, richtung, 0) verwenden.



  • spl@t schrieb:

    ich glaube

    Allein der Glaube nützt nichts.

    Bye, TGGC (Pipe my World.)


Anmelden zum Antworten