2016-11-24 6 views
1

Я строю маленький механизм физики, и у меня возникли проблемы с преобразованием моего значения Radian в градусы с использованием atan, так как мне нужен угол для вывода только в градусах.Преобразование из радианов в градусы

Во-первых, у меня есть значение x и y, и мне нужно найти угол, используя atan, поэтому я делю у по х, как так:

angleDivide = yN/xN; 

Затем, прежде чем положить это значение в tan я попытка преобразовать его в градусы так:

angleToDegrees = angleDivide * (3.14/180); 

Затем я помещаю angleToDegrees в atan:

angle = atan(angleToDegrees); 

Но когда я показываю angle, я все еще получаю радианские значения.

Пожалуйста, не могли бы вы рассказать мне, что не так с моим кодом и как это исправить?

+3

Это ужасно плохое приближение к pi. ** Сначала **, используйте 'M_PI', если он определен, пожалуйста, или определите его для точности цифр LDBL_DIG_10'. ** Второе **, вы должны преобразовывать _output_ из 'atan()' из рад в градусы, а не вход (который является только наклоном). ** Третий **, вы должны использовать 'atan2 (y, x)', а не 'atan (y/x)'. –

+1

Um ... Во-первых, ваш текст говорит, что вы хотите поместить значение в 'tan', но код затем использует его в' atan'. Итак, это для 'tan' или для' atan'? Прими решение. Во-вторых, если это для 'atan', то почему вы его конвертируете? Аргумент 'atan' не является углом. Это касательная ценность. Тангенс не является ни «радианами», ни «градусами». Тангенс - бесплотная ценность. Преобразование «радианов в градусы» для чего-то, что не является углом, не имеет никакого смысла. Это * результат * atan', который вы можете преобразовать в градусы. Результат, а не аргумент. – AnT

ответ

1

Сначала вы хотите рассчитать radians=tan(y/x).

Затем вы можете преобразовать его в градусы:

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

Смотрите reference here для Atan:

На стороне записки, вы также должны принять во внимание, что квадранте вы, чтобы получить правильный ответ (с -y/x - тот же номер, что и y/-x)

+3

О вашей стороне примечание: Это то, что 'atan2 (y, x)' существует для. –

+0

Это прекрасно работает, спасибо! Только один вопрос, мои ценности выходят как '38 .7464 ', который, конечно, является значением степени, но есть ли способ сократить десятичные знаки? –

+0

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

Смежные вопросы