sin() und cos() aus cmath liefern falsche Ergebnisse



  • Hi,

    ich bin hier langsam am verzweifeln und frage mich woran es noch liegen könnte, dass bei mir die sin() und cos() Funktionen aus cmath falsche Werte liefern. Hier der Codeauszug:

    unsigned short slices = 3;		
    double angle = 360.0 / (double)slices;
    double cx=0, cy=0;
    
    cx = sin(angle) * 10000.0;
    cy = cos(angle) * 10000.0;
    

    angle hat hier den Wert 120.0 und der entsprechende Sinus müsste eigentlich lt. Taschenrechner ca. 0,866 sein. cx sollte demnach 8.660 sein. Der Cosinus von 120 ist -0,5 und cy sollte eigentlich -5.000 sein.

    Im VC++ Debugger bekomme ich folgende Werte:

    cx 5806.1118421231431 double
    cy 8141.8097052656176 double

    Was mache ich bloß falsch?



  • Die trigonometrischen Funktionen basieren auf Radien und nicht auf Grad. Ersetze mal 360 durch 2*M_PI
    -Gunnar



  • Die Winkelfunktionen aus <cmath> wollen ihr Argument im Bogenmaß, nicht in Grad. Wenn du also die eine Zeile so abänderst:

    double angle = 2*PI / slices; // PI vorher irgendwo definieren ...
    

    müsste es gehen.



  • Vielen Dank!

    Hätte ich in der Schule besser aufgepasst und hätte ich mir die Referenz angeschaut, dann hätte ich es vielleicht selbst gemerkt *kopfschüttel*

    Viele Grüße
    Prog



  • M_PI steht übrigens nicht im Standard (nur gcc hat das, AFAIK).



  • Unter VC++ .net ist M_PI auch nutzbar:

    #define _USE_MATH_DEFINES
    #include <cmath> // oder math.h
    

Anmelden zum Antworten