wake-up-neo.net

Inverse Cosinus in Python

Entschuldigung, wenn dies einfach ist, aber ich habe keine Hilfe im Python-Handbuch oder in Google gefunden.

Ich versuche den inversen Cosinus für einen Wert mithilfe von Python zu finden.

d.h. cos-1 (x)

Weiß jemand, wie das geht?

Vielen Dank

27
Sheik Yerbouti

Wir haben die acos-Funktion , die den Winkel im Bogenmaß zurückgibt.

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

Um die richtigen Antworten für die Verwendung von math.acos zu erweitern, ist es auch wichtig zu wissen, dass mathematische Funktionen für komplexe Zahlen in cmath vorhanden sind:

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

Bleiben Sie bei math.acos, wenn Sie nur an reellen Zahlen interessiert sind. 

8

Sie suchen nach der Funktion math.acos().

3
neil

Als Antwort auf die Verwendung von inversem Cosinus zum Ermitteln von Rückwinkeln über math.acos ist alles in Ordnung und solange der Winkel <= 90 * ist, wenn Sie einmal vorbeigehen, hat Python keine Möglichkeit, den gewünschten Winkel zu unterscheiden.

Beobachten. 

>>> math.cos(5)
0.28366218546322625

Oben habe ich Python gebeten, mir den Cosinus eines Winkels von 5 Radiant zu holen, und das gab mir .28 ~ Toll, unten werde ich Python bitten, mir den Radiant zu geben, der einen .28 ~ Cosinus hat. Sollte 5 sein, richtig? Es sagte mir buchstäblich nur, dass es war.

>>> math.acos(0.28366218546322625)
1.2831853071795865

Falsch! Python gibt 1,28 Radiant zurück. Der Grund liegt auf der Hand, wenn man ihn visuell zeichnet, 1,28rad hat den gleichen Cosinus wie 5rad, sie sind umgekehrte Winkel. Jeder Winkel hat den gleichen Sinus mit einem anderen Winkel (und -sine mit zwei anderen). 5/175 * teilen sich einen gleichwertigen Sinus. Sie teilen sich umgekehrt proportionale Cosinus-Werte von 99 bzw. 99. Ihre -sine Cousins ​​wären 185 und 355. Die Beziehung hier ist, dass alle diese Winkel die gleiche Winkelabweichung von der horizontalen Achse haben. 5 *.

Der Grund, warum Python 1,28 und nicht 5 zurückgibt, ist, dass alle Computer/Rechner auf einer Abakus-artigen Datentabelle eines Winkels/Radians, dessen Sinus, Cos, Tan usw. basieren. Wenn also math.acos (x), fragt Python Der Kern, der in dieser Datentabelle nach dem Winkel sucht, der einen Kosinus von x hat, und wenn er sie findet, gibt er den ersten Eintrag zurück, mit dem er erscheint. und dann gibt mir Python diesen Winkel.

Aufgrund dieser gemeinsamen proportionalen Symmetrie wiederholen sich die Sin/Cos-Verhältnisse häufig. Und wahrscheinlich sehen Sie dieselbe Figur mehrmals. Es gibt keine Möglichkeit für Python oder das Betriebssystem, den Unterschied zwischen den beiden Winkeln zu bestimmen, die Sie tatsächlich benötigen, ohne eine zusätzliche Logik zu verwenden, die den -/+ - Wert des Sinus des Winkels berücksichtigt. Oder der Winkel des Winkels.

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*)

oder, kartesisch betrachtet,

                       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)

Wenn also aus irgendeinem Grund 5 Radiant ausgewählt werden muss (z. B. für eine Vektorzeichnung oder ein Spiel, um die verschiedenen Vektoren zu bestimmen, die der Gegner von dem Spieler hat), müsste ich eine Art von Wenn/Dann-Logik durchführen, um die Sinus-Signale zu vergleichen. Tangenten.

2
Matt McCarthy

Sie können auch arccos aus dem Modul numpy verwenden.

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

WARNING: Bei Skalaren ist die Funktion numpy.arccos() viel langsamer (~ 10x) als math.acos. Siehe Beitrag hier

Trotzdem ist numpy.arccos() für Sequenzen geeignet, math.acos jedoch nicht. :)

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

aber

>>> 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

Das Ergebnis von math.acos() ist im Bogenmaß. Sie müssen das also in Grad umrechnen.

So können Sie vorgehen:

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