2016-11-24 2 views
1

Je suis en train de construire un petit moteur Physics et j'ai du mal à convertir ma valeur Radian en degrés en utilisant atan, car j'ai besoin d'un angle pour sortir en degrés seulement.Conversion de radians en degrés

Tout d'abord, j'ai une valeur x et y, et je dois trouver un angle à l'aide atan, donc je divise y par x comme ceci:

angleDivide = yN/xN; 

Alors, avant de mettre cette valeur en tan, je tenter de le convertir en degrés comme ceci:

angleToDegrees = angleDivide * (3.14/180); 

Alors je place angleToDegrees dans atan:

angle = atan(angleToDegrees); 

Mais quand j'affiche angle, je reçois toujours des valeurs radian.

S'il vous plaît pourriez-vous me dire ce qui ne va pas avec mon code et comment résoudre ce problème?

+3

C'est une approximation horriblement mauvaise de pi. ** First **, utilisez 'M_PI' s'il est défini, s'il vous plaît, ou bien définissez-le avec la précision des chiffres' LDBL_DIG_10'. ** Deuxième **, vous devriez convertir le _output_ de 'atan()' de rads en degrés, pas l'entrée (qui est juste une pente). ** Troisième **, vous devriez utiliser 'atan2 (y, x)' et non 'atan (y/x)'. –

+1

Um ... Tout d'abord, votre texte dit que vous voulez mettre la valeur dans 'tan', mais le code l'utilise ensuite dans' atan'. Alors, est-ce pour 'tan 'ou pour' atan'? Décide toi. Deuxièmement, si c'est pour atan, alors pourquoi le convertis-tu? L'argument de 'atan' n'est pas un angle. C'est une valeur tangente. La tangente n'est ni "radians" ni "degrés". La tangente est une valeur sans unité. Convertir "radians en degrés" pour quelque chose qui n'est pas un angle n'a aucun sens. C'est le * résultat * de 'atan' que vous pourriez vouloir convertir en degrés. Le résultat, pas l'argument. – AnT

Répondre

1

Vous souhaitez d'abord calculer radians=tan(y/x).

Ensuite, vous pouvez le convertir en degrés:

radians = atan(y/x) 
degrees = radians * (180.0/3.141592653589793238463) 

Voir la reference here pour atan:

Sur une note de côté, il faut aussi tenir compte de ce quadrant que vous êtes pour obtenir le bon réponse (puisque -y/x est le même nombre que y/-x)

+3

À propos de votre note de côté: C'est ce que 'atan2 (y, x)' existe pour. –

+0

Cela fonctionne parfaitement, merci! Juste une question, mes valeurs sortent comme '38.7464 ', qui est bien sûr une valeur de degré, mais est-ce qu'il y a une manière que je peux raccourcir les décimales? –

+0

@LucyLoo 'char buf [64]; sprintf (buf, "% .1f", degrés); degrees = strtod (buf, 0); ' –