web-dev-qa-db-ja.com

Pythonの逆余弦

これが簡単な場合はおApびしますが、pythonマニュアルまたはgoogle。

私はPythonを使用して値の逆余弦を見つけようとしています。

つまり、cos-1(x)

誰もこれを行う方法を知っていますか?

ありがとう

36
Sheik Yerbouti

acos function があり、角度をラジアンで返します。

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

math.acosを使用するための正しい答えを増やすには、cmathの複素数に適した数学関数があることも知っておく価値があります。

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

実数のみに関心がある場合は、math.acosを使用してください。

8

math.acos()関数を探しています。

3
neil

逆余弦を使用してmath.acosを介して戻り角度を見つけることに応答して、角度が<= 90 *である限り、それはすべて正常であり、それを超えた後はpythonは方法がありませんあなたが望む角度を区別することの。

観察する。

>>> math.cos(5)
0.28366218546322625

上記で、python 5ラジアン角のコサインを取得するように要求し、それは私に0.28〜を与えました。以下、python余弦が.28〜のラジアンを教えてください、5である必要がありますか?.

>>> math.acos(0.28366218546322625)
1.2831853071795865

違う! Pythonは1.28〜ラジアンを返します。視覚的にプロットすると、理由は明らかです。1.28radは5radと同じ余弦を持ち、逆の角度です。すべての角度は別の角度と同じ正弦を共有します。つまり、5/175 *は同等のサインを共有します。それらはそれぞれ逆比例コサイン.99〜/-。99を共有します。-サインいとこは185と355になります。同じangular水平軸からのたわみ。5*。

理由pythonは5ではなく1.28を返します。すべてのコンピューター/計算機は、角度/ラジアン、そのサイン、cos、tanなどのそろばんのようなデータテーブルに基づいているためです。 math.acos(x)、pythonは、カーネルがxのコサインを持つ角度についてデータテーブルを調べるように要求し、見つかった場合、最初に表示されるエントリを返します。そして、pythonは私にその角度を与えます。

この共有された比例対称により、sin/cos比は頻繁に繰り返されます。そして、同じ数字が何度も表示される可能性があります。角度のサインの-/ +値を考慮する追加のロジックを実行せずに、実際に必要な2つの角度の違いをPythonやOSが判断する方法はありません。または、角度のタンジェント。

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ロジックを実行する必要があります接線。

3
Matt McCarthy

モジュールarccosnumpyを使用することもできます

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

[〜#〜] warning [〜#〜]:スカラーの場合、numpy.arccos()関数はmath.acosよりもはるかに遅い(〜10x) 。 こちらの投稿を参照

それでも、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
0
loved.by.Jesus

math.acos()の結果はラジアン単位です。したがって、それを度に変換する必要があります。

方法は次のとおりです。

import math
res = math.degrees (math.acos (value))
0
N SAMPATH KUMAR