cmath auf Grad umstellen
-
hallo, in meinem Projekt verwende ich viel OpenGL, und da OpenGL immer winkel in Grad verlangt würde ich gerne wissen, wie die cmath bibliothek so umstelle, dass sie auch Grad ausspuckt, das würde mir viel arbeit abnehmen, und noch eine Fehlerquelle weniger.
-
Rad kannst du wie folgt in Grad umwandeln:
double RadToDeg( double Rad ) {
return (180 / PI) * Rad;
}//EDIT:
kurz mal korrigieren
-
Checker&Murckser schrieb:
Rad kannst du wie folgt in Grad umwandeln:
double RadToDeg( double Rad ) {
return (PI / 180) * Rad;
}Genau umgekehrt.
return 180 / PI * Rad;
-
nen inline wäre doch was ...
-
Konrad Rudolph schrieb:
Checker&Murckser schrieb:
Rad kannst du wie folgt in Grad umwandeln:
double RadToDeg( double Rad ) {
return (PI / 180) * Rad;
}Genau umgekehrt.
return 180 / PI * Rad;
au ja, meinte ich, sorry
-
Vielleicht auch anders ordnen. Keine Ahnung wie wichtig das bei Fließkommazahlen ist, bei Ganzzahlen ist es aber sehr wichtig.
return Rad * 180 / PI;
-
Ben04 schrieb:
Vielleicht auch anders ordnen. Keine Ahnung wie wichtig das bei Fließkommazahlen ist, bei Ganzzahlen ist es aber sehr wichtig.
return Rad * 180 / PI;
Na gut, aber Trigonometrie mit Ganzzahlen ergibt nunmal einfach keinen Sinn. Dann sind nämlich die einzigen möglichen Ergebnisse 0 und 1 und ich kenne kein einziges Anwendungsgebiet dafür.
-
=>
inline double rad_to_deg(double rad) { return (rad * 180 / 3.1415926535 89793); }
-
es ging mir genau darum das nicht hinschreiben zu müssen, wie man rad nach degree umrechnet, bekomme ich auch noch hin, aber meine Frage war, wie baue ich cmath so um, dass es mir direkt, ohne weiteren funktionsballast rad ausspuckt. Alternativ wäre ich auch damit zufrieden, wenn ich OpenGL so umstellen könnte, dass berspielsweise glRotatatef(float,float,float,float) winkel im Bogenmaß akzeptiert, ichwill nur nicht immer beides vermischen, das ist grauhenhaft.
-
Krux schrieb:
es ging mir genau darum das nicht hinschreiben zu müssen, wie man rad nach degree umrechnet, bekomme ich auch noch hin, aber meine Frage war, wie baue ich cmath so um, dass es mir direkt, ohne weiteren funktionsballast rad ausspuckt.
Standardheader werden nicht umgebaut. Schreib Dir Deine eigenen Funktionen, wenn Dir die aus dem Standard nicht gefallen.
-
Konrad Rudolph schrieb:
Krux schrieb:
es ging mir genau darum das nicht hinschreiben zu müssen, wie man rad nach degree umrechnet, bekomme ich auch noch hin, aber meine Frage war, wie baue ich cmath so um, dass es mir direkt, ohne weiteren funktionsballast rad ausspuckt.
Standardheader werden nicht umgebaut. Schreib Dir Deine eigenen Funktionen, wenn Dir die aus dem Standard nicht gefallen.
aber es kann doch sein, dass man den wie ein Taschenrechner einfach umschalten kann, nur ich weiß den knopf nicht.
-
Es gibt keinen entsprechenden Knopf.
-
Konrad Rudolph schrieb:
Es gibt keinen entsprechenden Knopf.
gut zu wissen, wäre aber schön.
-
Oder mach dir einen Header wo du dann eine namespace "wrapper" anlegst und da dann die funktion deg_to_rad reinpackst. Zusätzlich gibst du noch alle Funktion von OGL hinzu(declerationen) die rad haben wollen ... und als definition rufst du dann die OGL-Funktionen mit deg_to_rad umrechnung als param auf. => Nur einmal alles tippen und danach einfach mit degree rechnen ^^
-
oder suche nochmal, denn ich kann mir nicht vorstellen, dass ich der einzige bin, der dieses Problem kennt.
-
Krux schrieb:
oder suche nochmal, denn ich kann mir nicht vorstellen, dass ich der einzige bin, der dieses Problem kennt.
Das Problem kennen viele aber normalerweise rechnet man dann einfach entsprechend um. Ich sehe das Problem auch gar nicht.
-
das problem ist, dass ich nicht immer weiß, welchen typ meine variable denn jetzt hat, manchmal ist es rad, manchmal degree, und genau das ist das Problem, das behindert das konzentrieren auf das wesentliche Problem, weil man sich immer mit solchen kleinkram abgeben muss, und genau deshalb will ich da auch was ändern.
gibt es vieleicht eine fertige cmath library, die die gleichen funktionen, wie cmath hat, nur auf Grad-Basis? Das fände ich auch sehr hilfreich.
-
Krux schrieb:
das problem ist, dass ich nicht immer weiß, welchen typ meine variable denn jetzt hat, manchmal ist es rad, manchmal degree, und genau das ist das Problem, das behindert das konzentrieren auf das wesentliche Problem, weil man sich immer mit solchen kleinkram abgeben muss, und genau deshalb will ich da auch was ändern.
Deine Herangehensweise ist falsch. Du musst *in Deinem Code* für Einheitlichkeit sorgen, nicht in der Bibliothek. Wenn Du in Deinem Code durcheinanderkommst, dann ist genau dort das Problem. Wieso verwendest Du verschiedenen Einheiten? Führ lieber eine Konvention ein, dass Du nur eine Einheit verwendest und kapsel alle Aufrufe, die eine andere Einheit verlangen. Das ist doch vollkommen unproblematisch.
Oder Du machst es wie von Joel Spolski empfohlen und verwendest Präfixe vor Deinen Bezeichnern um zu signalisieren, welche Einheit diese Bezeichner verwenden. Davon rate ich aber ab, das versteckt das Problem nur.
Die Kür ist natürlich, wenn Du Dir eine eigene Klasse anlegst, um die Zahlen in Deinem Code zu repräsentieren und innerhalb dieser Klasse sicherstellst, dass nur eine Einheit verwendet wird. Hier muss man natürlich aufpassen, dass das nicht auf Kosten der Performance geht.
-
wenn man opengl verwendet, gibt es nur eine stelle, an der man bogenmaß statt gradzahlen benötigt; nämlich, wenn man die eingebauten trigonometrischen funktionen aus cmath verwendet. kapsel dir die aufrufe, bau dir cos, sin, tan etc. funktionen, die nach außen mit gradzahlen arbeiten und alles ist super.