2016-11-24 107 views
1

我正在构建一个小型物理引擎,因为我只需要一个以度为单位输出的角度,所以我无法使用atan将我的弧度值转换为度。从弧度转换为度

首先,我有一个xy价值,我需要找到使用atan的角度,所以我把Ÿ用x像这样:

angleDivide = yN/xN; 

然后,把这个值转换成tan之前,我试图将其转换为度这样的:

angleToDegrees = angleDivide * (3.14/180); 

然后我把angleToDegrees到atan

angle = atan(angleToDegrees); 

但是当我显示angle时,我仍然得到弧度值。

请你能告诉我我的代码有什么问题,以及如何解决这个问题?

+3

这对于pi来说是一个很糟糕的近似值。 **首先**,如果定义了请使用'M_PI',否则请将其定义为'LDBL_DIG_10'的数字精度。 ** Second **,你应该将'atan()'的_output_从rads转换为度数,而不是输入(这只是一个斜率)。 **第三**,你应该使用'atan2(y,x)'而不是'atan(y/x)'。 –

+1

嗯......首先,你的文本说你想把值放到'tan'中,但是代码然后在'atan'中使用它。那么,对于'tan'还是'atan'?下定决心。其次,如果这是'atan',那么你为什么要转换它? “阿坦”的论点不是一个角度。它是切线值。切线既不是“弧度”也不是“度”。切线是无价值的。将“弧度转换为度数”表示某个非角度的东西毫无意义。这是'atan'的*结果*,您可能想转换为度数。结果,而不是论证。 – AnT

回答

1

您要先计算radians=tan(y/x)

然后你就可以将其转换为度:

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

reference here为ATAN:

在一个侧面说明,你还必须考虑到什么象限你在得到正确的回答(因为-y/xy/-x相同)

+3

关于你的附注:这就是'atan2(y,x)'的存在。 –

+0

这很好用,谢谢!只有一个问题,我的价值观是'38 .7464',这当然是一个度数值,但是有什么办法可以缩小小数位吗? –

+0

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