Berechnung vom Steigungswinkel

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

  • Berechnung vom Steigungswinkel

    Moin,

    mit folgendem Code versuche ich denk Winkel (Steigungswinkel) einer Geraden zu ermitteln. winkel ist ein Calculated-Property, die Methode also der Getter.

    Quellcode

    1. - (double)winkel {
    2. double accuracy = 0.25;
    3. if (self.y >= _nextY - accuracy && self.y <= _nextY + accuracy) {
    4. return 0.0;
    5. }
    6. if (self.x >= _nextX - accuracy && self.x <= _nextX + accuracy) {
    7. return 90.0;
    8. }
    9. double ankathete = _nextX - self.x;
    10. double gegenkathete = _nextY - self.y;
    11. NSLog(@"%@ von (%.2f|%.2f) nach (%.2f|%.2f)", self.titel, self.x, self.y, _nextX, _nextY);
    12. if (ankathete != 0.0 && gegenkathete != 0.0) {
    13. double a = atan(gegenkathete / ankathete);
    14. NSLog(@" -> Winkel = %.2f°", a);
    15. return a;
    16. }
    17. else {
    18. return 90.0;
    19. }
    20. }
    Alles anzeigen

    Als Ausgabe erhalte ich für schräge gerade leider absolut fehlerhafte Werte wie:

    Quellcode

    1. Wand 2 von (0.00|37.74) nach (117.70|0.00)
    2. -> Winkel = -0.31°
    Wo liegt mein Denkfehler in der Rechnung?
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io
  • hns schrieb:

    1. atan liefert Winkel im Bogenmaß und nicht in Grad
    2. nehme atan2 - das schließt auch die Sonderfälle 0 und 90 Grad besser ein und vermeidet eine evtl. Divison durch 0
    Danke, so läufts :)

    Quellcode

    1. double a = atan2(gegenkathete, ankathete);
    2. a = (360.0 / (2 * M_PI)) * a;
    3. if (a < 0.0) {
    4. a = 360.0 - fabs(a);
    5. }
    6. NSLog(@" -> Winkel = %.2f°", a);
    7. return a;
    Alles anzeigen
    Man kann alles schaffen. Man muss es nur wollen ;)
    www.regetskcob.github.io