none
Winkelberechnung fehlerhaft RRS feed

  • Frage

  • Ich benötige den Sinuswinkel eines gleichschenkligen Dreiecks.

    Zu Testzwecken benutze ich die länge 10 (Kathete und Ankathete).
    Dies ergiebt mit der Formel Sqrt(Pow(10,2)+Pow(10,2)) eine Hypotenuse von (double) 14.142135623730951
    Der Winkel mit der Formel Sin(10/ Sqrt(Pow(10,2)+Pow(10,2))) ergibt (double) 0.64963693908006237, was umgerechnet Asin(0.64963693908006237) / PI * 180 ein Winkel von 40.514234227069771° ergiebt.
    Um jedoch ein Winkel von 45° zu erreichen sollte Sin(10/ Sqrt(Pow(10,2)+Pow(10,2))) jedoch (double) 0.70710678118654749 ergeben.

    private static double GetAngle(double a, double b) { // a und b entsprechen jeweils 10D return Asin(Sin(Pow(a, 1) + Pow(b, 2))) / PI * 180; // Resultat = 40.514234227069771° an Stelle von 45° }

    Kann mir jemand sagen, wo der Fehler liegt. Liebe grüsse Alex

    Freitag, 17. Januar 2020 04:58

Antworten

  • Moregen Peter

    Ich glaube wir sprechen an einander vorbei. Wenn ich ein Dreieck mit den Kantenlängen von 10 habe und der Gammawinkel immer 90° ist müssen der Alpa- sowie der Betawinkel doch je 45° ergeben. Das von dir vorgezeigte Rechenmodel kommt jedoch auf 53,130102354156°

    Nun habe ich die Lösung selbst gefunden:

    double angle = (180 / PI) * Atan2(a, b); = 45°

    Ich Danke euch beiden um die Mühe die ihr euch genommen habt.

    Liebe Grüsse Alex

    • Als Antwort markiert Alex Feuz Samstag, 18. Januar 2020 08:06
    Samstag, 18. Januar 2020 08:05

Alle Antworten

  • Hi,
    entweder ist Deine Beschreibung falsch oder Dein Algorithmus. Hier mal die Berechnung des Winkels zwischen den Schenkeln eines gleichschenkligen Dreiecks:

        /// <summary>
        /// Berechnen des Winkels eines gleichschenkligen Dreiecks
        /// </summary>
        /// <param name="a">Schenkellänge</param>
        /// <param name="b">Länge der Basis</param>
        /// <returns>Winkel zwischen den Schenkeln in Grad (360 Grad Kreis)</returns>
        private static double GetAngle(double a, double b)
        {
          // a und b entsprechen jeweils 10D
          // return Asin(Sin(Pow(a, 1) + Pow(b, 2))) / PI * 180;
          // Resultat = 40.514234227069771° an Stelle von 45° - falsch
    
          return (360 / Math.PI) * Math.Asin(b / (2 * a));
    
          // Ergebnis muss sein 60 DEG bei a=10 und b=10
        }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    • Bearbeitet Peter Fleischer Sonntag, 19. Januar 2020 10:59 Code korrigiert.
    Freitag, 17. Januar 2020 08:29
  • // a und b entsprechen jeweils 10D 
    return Asin(Sin(Pow(a, 1) + Pow(b, 2))) / PI * 180; 

    Pow(a, 1) = Power 1? Sollte das nicht eher 2 sein?

    Olaf Helper

    [ Blog] [ Xing] [ MVP]

    Freitag, 17. Januar 2020 10:56
  • Moregen Peter

    Ich glaube wir sprechen an einander vorbei. Wenn ich ein Dreieck mit den Kantenlängen von 10 habe und der Gammawinkel immer 90° ist müssen der Alpa- sowie der Betawinkel doch je 45° ergeben. Das von dir vorgezeigte Rechenmodel kommt jedoch auf 53,130102354156°

    Nun habe ich die Lösung selbst gefunden:

    double angle = (180 / PI) * Atan2(a, b); = 45°

    Ich Danke euch beiden um die Mühe die ihr euch genommen habt.

    Liebe Grüsse Alex

    • Als Antwort markiert Alex Feuz Samstag, 18. Januar 2020 08:06
    Samstag, 18. Januar 2020 08:05
  • Hi Alex,
    ein Dreieck mit gleich langen Kantenlängen kann keinen Winkel 90° haben. Da sind alle Winkel gleich 60 Grad. Bei einem gleichschenkligen Dreieck mit einem Winkel von 90 ° zwischen den Schenkeln ist die Länge der Basisseite (gegenüber dem 90°-Winkel) gleich Schenkellänge mal Wurzel aus zwei (1,414).

    Ich habe meinen Code korrigiert, da er falsch war.


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    • Bearbeitet Peter Fleischer Sonntag, 19. Januar 2020 11:14 Info zu Codekorrektur
    Sonntag, 19. Januar 2020 07:38