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
stattfloat
. 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
sondernM_PI
und ist auf einigen Systemen in der math.h definiert.
Da stehen dann auch noch ein paar andere Konstanten drin wieM_SQRT2
oderM_E
oder ... (schau selber nach)Und ein
#define cosdeg(x) cos((x)*(M_PI/180))
macht weniger Leute aggresiv.
-
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.
-
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.