Math.h Funktion cos() rechnet nur in rad?



  • Ich habe die Aufgabe einen Vektor mit polaren Koordinaten in karthesischen Koordinaten auszudrücken.
    Die Angabe des Winkels soll dabei allerdings in Grad Erfolgen.

    #include <stdio.h>
    #include <math.h>
    
    void main() 
    {
      float b,w,x,y;
    
      scanf("%f %f", &b, &w);
    
      b = fabs(b);
    
      x = cos(w)*b;
      y = sin(w)*b;
    
      printf("Polar: [%.2f | %.2f Grad]\n", b, w);
      printf("Karth: [%.2f | %.2f]\n\n", x ,y);
    
      system("PAUSE");	
    }
    

    Soweit mein Code, bloß rechnet cos() und sin() anscheinend immer mit RAD (Bogenmaß) und nicht mit Grad, wie es in der Aufgabe gefordert ist.

    Gibt es einen weg die 2 Funktionen mit DEG rechnen zu lassen oder muss ich die Werte vorher umwandeln?



  • http://www.cplusplus.com/reference/clibrary/cmath/sin/

    Du wirst umwandeln müssen, was aber auch gar nicht so schlimm ist.



  • Und nimm bitte double statt float . Das ist genauer und der sin rechnet sowieso in double.

    double b,w,x,y;
    
      scanf("%lf %lf", &b, &w);
    


  • Babbsagg schrieb:

    Gibt es einen weg die 2 Funktionen mit DEG rechnen zu lassen

    Ja.

    #define cos(x) cos((x)*(M*PI/180))
    #define sin(x) sin((x)*(M*PI/180))
    

    Babbsagg schrieb:

    oder muss ich die Werte vorher umwandeln?

    Ja, du mußt sie vorher selber umwandeln. Denn meine wunderbaren Makros werden nicht gern gesehen. Manche Leute werden regelrecht aggressiv davon.



  • Ok dank euch. Nu klappts.

    #include <stdio.h>
    #include <math.h>
    #define PI 3.1415926535897932384626433832795
    
    void main()
    {
      double b,w,x,y,wr;
    
      scanf("%lf %lf", &b, &w);
    
      b = fabs(b);
      wr = (2*PI*w)/360;
    
      x = cos(wr)*b;
      y = sin(wr)*b;
    
      printf("Polar: [%.2f | %.2f Grad]\n", b, w);
      printf("Karth: [%.2f | %.2f]\n\n", x ,y);
    
      system("PAUSE");	
    }
    

    Gibt es sicher keinen anderen Weg?
    Weil mit dem Stand der Vorlesung hätte ich das bisher nicht lösen können ^^

    #define cos(x) cos((x)*(M*PI/180))
    #define sin(x) sin((x)*(M*PI/180))
    

    Auch das hätte ich theoretisch noch net gekonnt, Makros hatten wir noch nicht 🙂



  • Das heißt nicht M*PI sondern M_PI und ist auf einigen Systemen in der math.h definiert.
    Da stehen dann auch noch ein paar andere Konstanten drin wie M_SQRT2 oder M_E oder ... (schau selber nach)

    Und ein

    #define cosdeg(x) cos((x)*(M_PI/180))
    

    macht weniger Leute aggresiv. 🙂


  • Mod

    Ihr habt in der Vorlesung nicht gelernt, zu multiplizieren? 😮



  • Sicher aber #define gabs no net.



  • Babbsagg schrieb:

    Weil mit dem Stand der Vorlesung hätte ich das bisher nicht lösen können ^^

    Das einzige Unterschied zwischen dem ^^ und deinem ersten Post ist die Multiplikation mit (PI/180).

    Man darf/sollte/muss Informationen aus anderen Bereichen/Fächern mit in die Programmierung nehmen.
    Und die Umrechnung von rad in Grad ist Mathematik.
    Dazu brauchst du kein #define .



  • Darum gings mir nicht... wie man die Koordinaten umwandelt weiß ich.
    Aber ohne dir vorher PI zu definieren geht dat net!

    edit: naja gut man könnte PI auch direkt als Variable nutzen.


  • Mod

    Babbsagg schrieb:

    Darum gings mir nicht... wie man die Koordinaten umwandelt weiß ich.
    Aber ohne dir vorher PI zu definieren geht dat net!

    Du darfst das Pi auch ohne define benutzen.



  • const double PI = 3.1415926; // als globale Variable äh Konstante.
    

Anmelden zum Antworten