2011-07-19 16 views
20

Przepraszam, jeśli jest to proste, ale nie znalazłem żadnej pomocy w instrukcji Pythona lub Google.Cosinus odwrotny w Pythonie

Próbuję znaleźć odwrotny cosinus dla wartości przy użyciu Pythona.

czyli cos-1 (x)

Czy ktoś wie jak to zrobić?

Dzięki

Odpowiedz

32

Mamy acos function, która zwraca kąt w radianach.

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

Ah, czy arccos jest taki sam jak odwrotny cos? Od lat nie robię żadnych trygonów !!! –

+1

@Sheik: tak, to jest – katrielalex

+0

Wiem, że to pytanie jest trochę stare, ale czy istnieje sposób na zwrócenie kąta w degresji? –

3

Szukasz funkcji math.acos().

-4

lub po prostu napisać funkcję własnego dla taylor expansion cos^{- 1}

to byłoby bardziej czasochłonne (i być może wolniej działać), ale jest bardziej ogólne podejście

+2

Nie jestem pewien, jakie byłyby korzyści z tego ??? –

+2

Umm, musiałbym powiedzieć, że używanie doskonale dobrej wcześniejszej funkcji bibliotecznej jest bardziej ogólne. –

8

Aby zwiększenia poprawnych odpowiedzi w użyciu math.acos, warto też wiedzieć, że istnieją odpowiednie funkcje matematyczne dla liczb zespolonych w cmath:

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

stick with math.acos jeśli jesteś tylko zainteresowany liczbami rzeczywistymi,

+0

Dzięki za informacje o liczbach zespolonych, dowiedziałem się o 'cmath'. Piszę własną klasę dla liczb zespolonych i nadrzędnych operatorów. – igaurav

2

W odpowiedzi na użycie odwrotnego cosinusu do znalezienia kątów zwrotnych przez math.acos, wszystko jest w porządku i dandy tak długo, jak długo kąt wynosi < = 90 * po przekroczeniu tego, pyton nie będzie miał sposób rozróżnienia, który kąt chciałeś.

Uwaga.

>>> math.cos(5) 
0.28366218546322625 

Above, poprosiłem pytona sprowadzić mi cosinus kąta 5 radianach, a to dało mi .28 ~ Wielki, poniżej Poproszę pytona dać mi Radian który ma .28 ~ cosinus . Powinno być 5, prawda? Dosłownie właśnie mi to powiedział.

>>> math.acos(0.28366218546322625) 
1.2831853071795865 

Wrong! Python zwraca 1,28 ~ radianów. Powód jest oczywisty, gdy na wykresie wizualnie, 1.28rad ma taki sam cosinus jak 5rad, są to kąty odwrotne. Każdy kąt ma ten sam sinus pod innym kątem (i -sine z dwoma innymi). tj. 5/175 * udostępnić równoważny sinus. Współdzielą one odwrotnie proporcjonalne cosinusy .99 ~/-. 99 odpowiednio. Ich kuzyni mieliby mieć 185 i 355 lat. Memoriałem relacji jest to, że wszystkie te kąty mają takie samo odchylenie kątowe od osi poziomej. 5 *.

Powodem, dla którego python zwraca 1.28, a nie 5, jest to, że wszystkie komputery/kalkulatory są oparte na tabeli danych podobnej do liczydła pod kątem/radianem, jej sinusem, cos, tan itd. Itd. Więc kiedy i math.acos (x), python prosi kernala, aby przejrzał tabelę danych dla dowolnego kąta ma cosinusa x, a gdy go znajdzie, zwraca pierwszy wpis, w którym pojawia się. a następnie pyton daje mi ten kąt.

Z powodu tej współdzielonej, proporcjonalnej symetrii, współczynniki sin/cos często się powtarzają. I prawdopodobnie zobaczysz tę samą liczbę razy. Python lub system operacyjny nie jest w stanie określić różnicy, który z dwóch kątów, których faktycznie potrzebujesz, bez dodatkowej logiki uwzględniającej wartość -/+ sinusa kąta. Albo styczna kąta.

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

lub oglądane 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) 

więc jeśli z jakiegokolwiek powodu, muszę 5 radianów być wybrana (powiedzmy na rysunku wektorowego lub gry do określenia różnych wektorów wrogowie są z odtwarzacz), musiałbym zrobić jakiś rodzaj logiki jeśli/to porównywałbym sinusy/styczne.

+3

Jeśli potrzebujesz określić kąt w oparciu o sinus i cosinus, chcesz użyć funkcji [atan2 (y, x)] (https://en.wikipedia.org/wiki/Atan2) (istnieje w dowolnym języku; 'math.atan2' w języku Python). Dokładnie dba o logikę wyboru kwadrantu, prawdopodobnie szybszą i lepszą niż większość. –

Powiązane problemy