2011-07-19 35 views
20

道歉,如果这是直截了当的,但我还没有在Python手册或谷歌找到任何帮助。Python中的反余弦

我想找到一个使用python的值的反余弦。

即COS-1(x)的

有谁知道如何做到这一点?

感谢

回答

32

我们有acos function,它返回弧度的角度。

>>> import math 
>>> math.acos(0) 
1.5707963267948966 
>>> _ * 2 - math.pi 
0.0 
+4

啊,arccos和逆cos是一样的吗?我多年没有做任何触发! –

+1

@Sheik:是的,它是 – katrielalex

+0

我知道这个问题有点老,但是有没有办法让角度回归? –

3

您正在寻找math.acos()函数。

-4

或只写你自己的COS的taylor expansion功能^ { - 1}

这将消耗更多的时间(可能运行缓慢),但更普遍的做法

+2

我不确定这样做的好处是什么? –

+2

恩,我不得不说,使用完美的预先存在的库函数是更一般的方法。 –

8

要增强的正确答案用math.acos,这也是值得了解的,有适合复数数学函数在cmath

>>> import cmath 
>>> cmath.acos(1j) 
(1.5707963267948966-0.88137358701954294j) 

棒与math.acos如果你只关心实数,

+0

感谢有关复数的信息,了解了'cmath'。我一直在为自己的班级编写复杂的数字和重要的操作符。 – igaurav

2

针对使用反余弦找到通过math.acos回报的角度,这一切都很好,很正常,只要角度< = 90 *一旦你过去认为,蟒蛇就没有区分你想要的角度的方法。

观察。

>>> math.cos(5) 
0.28366218546322625 

上面,我问蟒蛇去给我拿5弧度角度的余弦,它给了我0.28〜太好了,下面我会问蟒蛇给我其中有一个0.28〜余弦的弧度。应该是5吧?它从字面上告诉我这是事实。

>>> math.acos(0.28366218546322625) 
1.2831853071795865 

错! Python返回1.28弧度。当直观地绘制时,原因是显而易见的,1.28rad具有与5rad相同的余弦,它们是相反的角度。每个角度以另一个角度共享相同的正弦(和另外两个正弦)。 即5/175 *具有相同的正弦值。它们分别成反比余弦.99〜/ - 99。他们的正表兄弟是185和355.这里的关系就是所有这些角度都与水平轴具有相同的角偏转。 5 *。

python返回1.28而不是5的原因是所有的计算机/计算器都是基于一个角度/弧度,正弦,余弦,tan等等的算盘类数据表。所以当我math.acos(x ),python要求内核通过该数据表查找哪个角度的余弦为x,并且当它找到它时,它返回它出现的第一个入口。然后python给我这个角度。

由于这种共享,比例对称,正弦/余弦比频繁重复。而且你很可能会多次看到相同的数字。 python或操作系统无法确定实际需要的两个角度中的哪一个角度的差异,而无需考虑角度正弦的 -/+值的额外逻辑。或者,角度的切线。

1.28 Rad has x cosine, y sine, z tan (72*) 
1.88 Rad has -x cosine, y sine, -z tan (108*) 
4.39 Rad has -x cosine, -y sine, z tan (252*) 
    5 Rad has x cosine, -y sine, -z tan (288*) 

,或者观察Cartesianly,

     negX,posY | posX,posY 
          -----+----- 
         negX,negY | posX,negY 

1.88 Rad has -x cosine, y sine (108) | 1.28 Rad has x cosine, y sine (72*) 
           -----+----- 
4.39 Rad has -x cosine, -y sine (252)| 5 Rad has x cosine, -y sine (288) 

因此,如果出于某种原因,我需要选择5个弧度(譬如说矢量绘图或游戏来确定的各种矢量的敌人是从球员),我将不得不做一些类型的if/then逻辑比较正弦/切线。

+3

如果需要根据正弦和余弦确定角度,则需要使用[atan2(y,x)](https://en.wikipedia.org/wiki/Atan2)函数(以任何语言存在; Python中的'math.atan2')。它正好照顾你的象限选择逻辑,可能比大多数人更快,更好。 –