将X、Y旋转坐标从弧度转换为度数
我有两个值,它们是以弧度为单位的,分别是 c[1]
和 c[3]
。我需要把这些弧度转换成度数,但我完全不知道该怎么做才能得到度数。我在网上搜索了很久,但找不到任何我能理解的内容。我试着自己想办法,但我觉得我根本没有接近正确的方向。我尝试了以下方法:
z = (((c[1] * 180) + 180) + ((c[3] * 180) + 180))
z = (((c[1] * math.pi) / 180) + ((c[3] * math.pi) / 180) / 2)
z = (c[1] * (90/math.pi) - (c[3] * (90/math.pi)))
z = math.atan2(c[3], c[1])
z = (math.degrees(c[1]) + math.degrees(c[3])) * 2
z = c[1]
z = (math.asin(c[3]) / math.acos(c[1]))
我该如何从两个弧度值中得到度数?
3 个回答
把角度转换成弧度可以用这个公式:(n度) * (π/180度)。
z = (c[1]*(math.pi/180.0) + (c[1]*(math.pi/180)
如果你经常需要做这个转换,可以写一个函数来简化操作。
def DegtoRad(deg):
return (deg)*(math.pi/180)
或者可以用一个简单的lambda表达式来实现。
DegtoRad = lambda x: x*(math.pi/180)
不过要记得,如果你没有导入math库或者没有使用math.pi,这些都无法正常工作。其实,定义一个具体的π值会更好,这样可以根据你需要的精度来调整。
这个在网上找起来并不难吧?对吧?
http://www.mathwarehouse.com/trigonometry/radians/convert-degee-to-radians.php
这个公式其实是跟@user2913685的公式相反的:num*180/pi(这很容易搞错)
这里有一个Python的例子:
pi = 3.14159265
rad_val = 7
deg_val = rad_val*180/pi
print(deg_val)
这个例子的输出是:
401.07045704986604
这里用的π是3.14159265,而且没有使用math模块。显然,你可以像其他答案那样做,只不过要把公式改一下。
根据你的评论,我觉得你得到的不是c[1]和c[3]的两个弧度角,而是方向余弦。如果你得到的是弧度角,值应该在-pi到pi之间。而实际上,值的范围是从-1到1(也就是cos(-pi)到cos(pi))。
如果你想要角度,可以先把值转换成弧度角,然后再转换成度数。需要注意的是,角度的余弦是对称的……所以对于:
In [12]: zip(angles, (cos(angles)))
Out[12]:
[(-3.1415926535897931, -1.0),
(-2.8108986900540254, -0.94581724170063464),
(-2.4802047265182576, -0.78914050939639346),
(-2.1495107629824899, -0.5469481581224267),
(-1.8188167994467224, -0.24548548714079912),
(-1.4881228359109546, 0.082579345472332394),
(-1.1574288723751871, 0.40169542465296937),
(-0.82673490883941936, 0.67728157162574099),
(-0.49604094530365161, 0.87947375120648907),
(-0.16534698176788387, 0.98636130340272232),
(0.16534698176788387, 0.98636130340272232),
(0.49604094530365161, 0.87947375120648907),
(0.82673490883941891, 0.67728157162574132),
(1.1574288723751867, 0.40169542465296976),
(1.4881228359109544, 0.082579345472332616),
(1.8188167994467221, -0.2454854871407989),
(2.1495107629824899, -0.5469481581224267),
(2.4802047265182576, -0.78914050939639346),
(2.8108986900540254, -0.94581724170063464),
(3.1415926535897931, -1.0)]
但是,
In [11]: zip(angles, arccos(cos(angles)))
Out[11]:
[(-3.1415926535897931, 3.1415926535897931),
(-2.8108986900540254, 2.8108986900540254),
(-2.4802047265182576, 2.4802047265182576),
(-2.1495107629824899, 2.1495107629824899),
(-1.8188167994467224, 1.8188167994467224),
(-1.4881228359109546, 1.4881228359109546),
(-1.1574288723751871, 1.1574288723751871),
(-0.82673490883941936, 0.82673490883941936),
(-0.49604094530365161, 0.49604094530365156),
(-0.16534698176788387, 0.16534698176788418),
(0.16534698176788387, 0.16534698176788418),
(0.49604094530365161, 0.49604094530365156),
(0.82673490883941891, 0.82673490883941891),
(1.1574288723751867, 1.1574288723751867),
(1.4881228359109544, 1.4881228359109544),
(1.8188167994467221, 1.8188167994467221),
(2.1495107629824899, 2.1495107629824899),
(2.4802047265182576, 2.4802047265182576),
(2.8108986900540254, 2.8108986900540254),
(3.1415926535897931, 3.1415926535897931)]
这意味着如果你想从方向余弦得到角度,你需要这样做:
In [13]: def toAng(a): return sign(a)*arccos(a)
这样就能得到正确的角度:
In [19]: zip(angles, toAng(cos(angles)))
Out[19]:
[(-3.1415926535897931, -3.1415926535897931),
(-2.8108986900540254, -2.8108986900540254),
(-2.4802047265182576, -2.4802047265182576),
(-2.1495107629824899, -2.1495107629824899),
(-1.8188167994467224, -1.8188167994467224),
(-1.4881228359109546, 1.4881228359109546),
(-1.1574288723751871, 1.1574288723751871),
(-0.82673490883941936, 0.82673490883941936),
(-0.49604094530365161, 0.49604094530365156),
(-0.16534698176788387, 0.16534698176788418),
(0.16534698176788387, 0.16534698176788418),
(0.49604094530365161, 0.49604094530365156),
(0.82673490883941891, 0.82673490883941891),
(1.1574288723751867, 1.1574288723751867),
(1.4881228359109544, 1.4881228359109544),
(1.8188167994467221, -1.8188167994467221),
(2.1495107629824899, -2.1495107629824899),
(2.4802047265182576, -2.4802047265182576),
(2.8108986900540254, -2.8108986900540254),
(3.1415926535897931, -3.1415926535897931)]
最后,如果你需要把它转换成度数,可以这样做:
在 [20]: def toAng(a): return 180*sign(a)*arccos(a)/pi
In [21]: zip(angles, toAng(cos(angles)))
Out[21]:
[(-3.1415926535897931, -180.0),
(-2.8108986900540254, -161.05263157894737),
(-2.4802047265182576, -142.10526315789474),
(-2.1495107629824899, -123.1578947368421),
(-1.8188167994467224, -104.21052631578948),
(-1.4881228359109546, 85.263157894736835),
(-1.1574288723751871, 66.31578947368422),
(-0.82673490883941936, 47.368421052631582),
(-0.49604094530365161, 28.421052631578949),
(-0.16534698176788387, 9.4736842105263346),
(0.16534698176788387, 9.4736842105263346),
(0.49604094530365161, 28.421052631578949),
(0.82673490883941891, 47.368421052631554),
(1.1574288723751867, 66.315789473684191),
(1.4881228359109544, 85.263157894736835),
(1.8188167994467221, -104.21052631578947),
(2.1495107629824899, -123.1578947368421),
(2.4802047265182576, -142.10526315789474),
(2.8108986900540254, -161.05263157894737),
(3.1415926535897931, -180.0)]
这会给你正确的度数角……
注意,我使用的环境中sign
、pi
等是numpy库的对象。在你的程序中,可能需要单独导入它们。