Problem mit atan
-
Hi!
Ich habe da ein Problem mit atan und zwar, dass die Werte zum Teil gar nicht stimmen die rauskommen! Ich bin mir bewusst, dass die funktion Werte im Bogenmass ausgibt und ich diese umrechnen muss. Allerdings bekomm ich z.B. bei atan(3/4) = 0. Nach dem Umrechnen bleibt es natürlich 0. Ich müsste aber 36,87° erhalten. Bei 1 kommt 45° raus. Bei 4/3 allerdings auch!Warum macht atan so einen Schrott? Hier der Code:
#include "stdafx.h" #include <math.h> #include <iostream.h> int main(int argc, char* argv[]) { cout << atan(3/4) << "\n"; cout << atan(3/4)/3.1415926535*180; return 0; }
-
Erstens bitte C++ Header (iostream, cmath) benutzen.
Zweitens übergibst du atan hier den ganzzahligen Quotienten von (int) 3 und (int) 4 bzw. 4 und 3 und das ist nunmal 0 bzw. 1. Richtiger wäre
atan (3.0/4.0);
-
oftmals ist es auch sinnvoller atan2 zu verwenden. Ich wollte dich nur darauf hinweisen, falls du es nicht kennen solltest.
-
Dankeschön filmor, das war das Problem.
Ich bin davon ausgegangen, dass er die 3/2 gleich als float interpretiert und nicht als int. Jetzt funktioniert alles so, wie es funktionieren soll. 
@Helium: Von atan2 habe ich schonmal gehört. Was ist daran anders?
-
atan2(y,x) (ja so rum!) gibt dir den Winkel eines zweidimensionalen Vektors mit den Koordinaten (x,y) zurück. Ansonsten müsstest du nämlich atan(y/x) rechnen, und eine Fallunterscheidung bzgl. Division durch Null / Vorzeichenunterscheidung machen. 1/1 ist genau so 1 wie -1/-1, obwohl der Winkel einmal 45° und beim anderen 135° ist.