Python中的逆余弦

时间:2011-07-19 10:05:28

标签: python math trigonometry

如果这是直截了当的道歉,但我没有在python手册或google中找到任何帮助。

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

即。 COS-1(x)的

有谁知道怎么做?

由于

7 个答案:

答案 0 :(得分:45)

我们有acos function,它以弧度为单位返回角度。

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

答案 1 :(得分:8)

为了增加使用math.acos的正确答案,还值得知道cmath中有适用于复数的数学函数:

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

如果您只对实数感兴趣,请坚持math.acos

答案 2 :(得分:3)

您正在寻找math.acos()功能。

答案 3 :(得分:2)

为了回应使用反余弦来通过math.acos找到返回角度,只要角度<= 90 *,一旦你超过它,python就没有办法了区分你想要的角度。

观察。

>>> math.cos(5)
0.28366218546322625

上面,我让python给我取了5弧度角的余弦,它给了我.28~很棒,下面我会问python给我一个有.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的原因是所有的计算机/计算器都是基于类似算盘的角度/弧度数据表,它的正弦,余弦,棕褐色等等。所以当我的数学时,我就算了.xos(x) ,python要求内核通过该数据表查看具有x的余弦的任何角度,并且当它找到它时,它返回它出现的第一个条目。然后python给了我这个角度。

由于这种共享的比例对称性,sin / cos比率经常重复。你可能会多次看到相同的数字。 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*)

或者,笛卡尔式地看,

                       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逻辑比较正弦/切线。

答案 4 :(得分:0)

您也可以使用模块arccos

中的numpy
>>> import numpy
>>> numpy.arccos(0.5)
1.0471975511965979

警告:对于标量,numpy.arccos()功能比math.acos慢得多(~10x)。 See post here

尽管如此,numpy.arccos()适用于序列,而math.acos则不适用。 :)

>>> numpy.arccos([0.5, 0.3])
array([ 1.04719755,  1.26610367])

>>> math.acos([0.5, 0.3])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: a float is required

答案 5 :(得分:0)

math.acos()的结果以弧度为单位。因此,您需要将其转换为度。

这是您的操作方式:

import math
res = math.degrees (math.acos (value))

答案 6 :(得分:-4)

或者只为cos {{1}

taylor expansion编写自己的函数

这会花费更多时间(并且运行起来可能更慢),但这是更通用的方法