Home Vektor berechnen

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hi


    Hab malwieder nen Problem mit dem Verrechnen von Koordinaten :/
    Es hakt bei mir irgendwie immer an Mathe :rolleyes:


    Unzwar möchte ich den Home-Vektor zwichen 2 Koordinaten berechnen.
    Stellt euch ein Pfeil im Koordinatensystem vor, dieser soll immer in richtung des 2. Puntes im Koordinatensystem zeigen.


    Die Anwendung der Winkelfunktionen fällt mir immer ziemlich schwer.


    Die Werte sollen natürlich zwichen 0 und 360 liegen.


    Wäre über schnelle Hilfe sehr erfreut :)


    MFG, Robdeflop®

  • Hi


    Nja ich nenn das so^^ Halt der Vektor zum Heimatspunkt, oder halt zum Punkt X.


    Bräuchte das 3-Dimensional, muss also auch für die Höhe berechnet werden.


    Dein Beispiel wäre dann umgesetzt so?


    public Float:HomeVektor(Float:p1X, Float:p1Y, Float:p2X, Float:p2Y)
    {
    return floattan((p1X-p2X)/(p1Y-p2Y),degrees);
    }


    Wenn das stimmt, dann wärs ja auch nur für eine Achse, die 2. fehlt ja noch. Da der "Pfeil" ja auch noch in die Höhe zeigen sollte^^ Da hakts dann wieder :/


    Aber schonmal vielen Dank für deine Antwort :)


    MFG, Robdeflop®

  • Weißt du, was ein Vektor ist? Ein Vektor hat nicht viel mit dem Winkel zu tun, Vektoren funktionireren allgemein ohne Winkel.


    floattan ist glaub ich die falsche Funktion (ich weiß nicht was sie macht), atan2() solltest du benutzen, wenn du den Winkel haben möchtest.

  • Hi


    Nja, hast eig recht, ein Vektor hat nicht unbedingt was mit Winkeln zu tun.


    Zitat

    Ein Vektor kann durch einen Pfeil, der einen Urbildpunkt mit seinem Bildpunkt verbindet, dargestellt werden. Dabei beschreiben Pfeile, die gleichlang, parallel und gleichorientiert sind, denselben Vektor.


    Ausm Wiki^^ Deswegen nenn ich das halt Vektor.


    atan2 ist soweit ich weiß eine Funktion aus dem C/C++ bereich (in der math inc?).
    Da wird doch der Winkel vom Punkt 0/0 und Punkt X / Y zurückgegeben?


    floattan ist einfach nur die Tangenzfunktion^^


    MFG, Robdeflop®

  • Du benötigst aber atan(normal oder 2, je nachdem wie du die parameter angeben willst), also die Umkehrfunktion vom Tangens, um von den Längen der Strecken auf den Winkel zu schließen. ;)


    Bei atan2 bekommst du den Winkel wenn du die Länge der X-Strecke und die Länge der Y-Strecke angibst, kannst auch beide Teilen und das Ergebnis davon in atan() einsetzen. ;)

  • Hi


    new X1 = 0;
    new Y1 = 0;
    new X2 = 3;
    new Y2 = 3;

    printf("Ergebnis: %f", atan2(X2-X1, Y2-Y1));


    Da kommt 45° raus. Stimmt also.
    Das Ganze muss ich jetzt allerdings noch mit der Z-Achse hinbekommen.


    Da brauche ich doch normalerweise nur die Entfernung in der 2-Dimensionalen sicht (X und Y) und die Z achse?


    new X1 = 0;
    new Y1 = 0;
    new Z1 = 0;
    new X2 = 3;
    new Y2 = 3;
    new Z2 = 3;

    new Float:entfernungxy = floatsqroot(floatpower(floatabs(floatsub(X2,X1)),2) +
    floatpower(floatabs(floatsub(Y2,Y1)),2));

    printf("Drehrate 1: %f", atan2(X2-X1, Y2-Y1));
    printf("Drehrate 2: %f", atan2(entfernungxy, Z2-Z1));


    Drehrate 2 müsste ja auch 45° sein, raus kommt aber 55.
    Was mache ich falsch?


    CAPO, nein es ist nicht für ein Navi.


    MFG, Robdeflop®