Python中的逆余弦

She*_*uti 37 python math trigonometry

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

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

即cos-1(x)

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

谢谢

Tug*_*tes 50

我们有acos函数,它以弧度返回角度.

>>> import math
>>> math.acos(0)
1.5707963267948966
>>> _ * 2 - math.pi
0.0
Run Code Online (Sandbox Code Playgroud)

  • @DorianDore是的!您可以使用[`math.degrees`](https://docs.python.org/2/library/math.html#angular-conversion)函数.例如,`math.degrees(math.acos(0))`将返回`90.0`. (17认同)
  • 啊,arccos和反cos是一样的吗?多年来我没有做过任何触发! (5认同)

Mic*_*ber 8

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

>>> import cmath
>>> cmath.acos(1j)
(1.5707963267948966-0.88137358701954294j)
Run Code Online (Sandbox Code Playgroud)

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


Mat*_*thy 6

为了响应通过 math.acos 使用反余弦找到返回角,只要角度 <=90* 就可以了,一旦超过这个角度,Python 将无法区分你想要哪个角度。

观察。

>>> math.cos(5)
0.28366218546322625
Run Code Online (Sandbox Code Playgroud)

上面,我要求 python 获取 5 弧度角的余弦,它给了我 0.28~ 太好了,下面我将要求 python 给我 0.28~ 余弦的弧度。应该是5吧?它只是告诉我确实如此。

>>> math.acos(0.28366218546322625)
1.2831853071795865
Run Code Online (Sandbox Code Playgroud)

错误的!Python 返回 1.28~ 弧度。从直观上看,原因很明显,1.28rad 与 5rad 具有相同的余弦,它们是反角。每个角度与另一个角度共享相同的正弦(并且与另外两个角度共享相同的正弦)。即 5/175* 具有等效的正弦值。它们分别具有反比余弦 0.99~/-.99。它们的正弦表兄弟是 185 和 355。这里的关系模因是所有这些角度都具有相同的相对于水平轴的角度偏转。5*。

python 返回 1.28 而不是 5 的原因是所有计算机/计算器都基于类似算盘的角度/弧度数据表,其正弦、余弦、正切等。所以当我 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*)
Run Code Online (Sandbox Code Playgroud)

或者,从笛卡尔角度来看,

                       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)
Run Code Online (Sandbox Code Playgroud)

因此,如果出于某种原因,我需要选择 5 弧度(例如,对于矢量绘图或游戏来确定敌人来自玩家的各种矢量),我将必须执行某种类型的 if/then 逻辑来比较正弦/切线。

  • 如果您需要根据正弦和余弦确定角度,则需要使用 [atan2(y, x)](https://en.wikipedia.org/wiki/Atan2) 函数(存在于任何语言中;` Python 中的 math.atan2`)。它准确地为您处理了象限选择逻辑,可能比大多数人更快更好。 (6认同)

小智 5

结果math.acos()是弧度。所以你需要把它转换成度数。

您可以这样做:

import math
res = math.degrees (math.acos (value))
Run Code Online (Sandbox Code Playgroud)