Winkel zwischen zwei Punkten



  • Danke schonmal durito.
    Aber kannst du mir das noch erklären ?

    Winkel = acos ( (v1 . v2)/(v1-Betrag*v2-Betrag) )

    (v1 . v2) ist das Skalaprodukt oder ?
    Was ist dann v1-Betrag und v2-Betrag ?
    Die Länge der beiden Vektoren ? 😕

    Und warum "acos" ? 😕

    (edit)
    Ich bin jetzt mal davon ausgegangen, das "Betrag" die Vektor-Länge darstellt.
    Ist meine Längenberechnung korrekt ?

    double dLaenge1 = sqrt((Punkt1.x * Punkt1.x) + (Punkt1.y * Punkt1.y));
    double dLaenge2 = sqrt((Punkt2.x * Punkt2.x) + (Punkt2.y * Punkt2.y));
    

    Das ganze Konstrukt bringt aber immernoch keine korrekten Werte 😞

    double dWinkel = acos(nSkalar / (nLaenge1 * nLaenge2));
    

    Bringt bei meinem Beispiel einen Wert von 1.5xxxx
    Muss man diesen Wert noch irgendwie weiterverarbeiten damit man einen Winkelwert zwischen 0° und 360° bekommt ?



  • Cpp_Junky schrieb:

    Winkel = acos ( (v1 . v2)/(v1-Betrag*v2-Betrag) )

    (v1 . v2) ist das Skalaprodukt oder ?

    Ja.

    Cpp_Junky schrieb:

    Was ist dann v1-Betrag und v2-Betrag ?
    Die Länge der beiden Vektoren ? 😕

    Ja.

    Cpp_Junky schrieb:

    Und warum "acos" ? 😕

    Weil Du mit cos x/y bei gegebenem Winkel rausbekommst und mit arccos (der Umkehrung von cos) den Winkel bei gegebenem x/y.



  • Ehm, ne, erklären kann ichs nicht *g* War mir nur noch im Kopf weil ich das auch mal brauchte 🙂

    cos(winkel) = Skalarprodukt/Produkt der Beträge.

    Ja mit v1.v2 mein ich das Skalarprodukt. und die Beträge sind die Längen der Vektoren



  • Cpp_Junky schrieb:

    Bringt bei meinem Beispiel einen Wert von 1.5xxxx
    Muss man diesen Wert noch irgendwie weiterverarbeiten damit man einen Winkelwert zwischen 0° und 360° bekommt ?

    *360.0/(2*PI)



  • Ok ich habs verstanden glaube ich. Aber die Werte die meinen Winkel darstellen sollen sehen nicht wirklich korrekt aus 😕
    Was muss ich mit diesem Wert noch anstellen ? Oder ist mein Code irgendwo falsch ?





  • Doch, stimmt schon.

    Skalarprodukt: gibt -100
    Beträge multipliziert: 100

    acos(-1.0) = 3.141 = 180.0°



  • Man das geht ja schnell heute 🙂
    Danke, jetzt hab ichs raus 👍

    (edit)
    Hier nochmal für alle andern die es nicht wissen (oder für die FAQ):

    double dLaenge1 = sqrt(((Punkt1.x * Punkt1.x) + (Punkt1.y * Punkt1.y)));
    	double dLaenge2 = sqrt(((Punkt2.x * Punkt2.x) + (Punkt2.y * Punkt2.y)));
    
    	double dSkalar = (double)(Punkt1.x * Punkt2.x) + (Punkt1.y * Punkt2.y);
    	double PI = 3.14159265;
    	double dWinkel = acos(dSkalar / (dLaenge1 * dLaenge2));
    	dWinkel =  dWinkel * (360.0 / (2 * PI));
    


  • Zwei Punkte definieren keinen Winkel. Dazu brauch man 3.

    Bye, TGGC (Pipe my World.)



  • Hab noch ne Frage zum Schluss:
    Kann man auch nur aus einem Vektor auch einen Winkel errechnen ?
    Also: 180° bei X = 0, Y = 1
    oder 90° bei X = 1, Y = 0

    Geht das dann auch umgekehrt ? Also 180° ergibt Vector(0, 1) ?



  • sin/cos

    Ich empfehl dir mal 'nen Tafelwerk.

    Bye, TGGC (Pipe my World.)



  • Gibts da was zu essen ? 😃
    Ne ne hast schon recht 🙄 Hab mir jetzt dieses "Computergrafik"-Buch bestellt. Ich hoffe das wird meine Fragen diesbezüglich in Zukunft klären 🙂


Anmelden zum Antworten