Подтвердить что ты не робот

Обратный косинус в Python

Извините, если это прямо, но я не нашел никакой помощи в руководстве python или Google.

Я пытаюсь найти обратный косинус для значения с помощью python.

то есть. COS-1 (х)

Кто-нибудь знает, как это сделать?

Спасибо

4b9b3361

Ответ 1

У нас есть функция acos, которая возвращает угол в радианах.

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

Ответ 2

Чтобы увеличить правильные ответы на использование math.acos, также стоит знать, что существуют математические функции, подходящие для сложных чисел в cmath:

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

Придерживайтесь math.acos, если вас интересуют только реальные числа,

Ответ 3

Вы ищете функцию math.acos().

Ответ 4

В ответ на использование обратного косинуса, чтобы найти обратные углы через math.acos, все это прекрасно и денди, пока угол равен <= 90 *, как только вы пройдете мимо этого, python не будет иметь никакого способа дифференцировать, какой угол вы хотел.

Обратите внимание.

>>> math.cos(5)
0.28366218546322625

Выше, я попросил питона принести мне косинус 5 радианского угла, и он дал мне .28 ~ Великий, ниже я попрошу python дать мне радиан с косинусом .28 ~. Должно быть 5, верно? Это буквально просто сказал мне, что это было.

>>> math.acos(0.28366218546322625)
1.2831853071795865

Неправильно! Python возвращает 1,28 ~ радиан. Причина очевидна при визуальной визуализации, 1.28rad имеет тот же косинус, что и 5rad, они являются обратными углами. Каждый угол имеет один и тот же синус с другим углом (и -sine с двумя другими). т.е. 5/175 * совместно используют эквивалентный синус. Они разделяют обратно пропорциональные косинусы 0,99 ~/- 99 соответственно. Их двоюродные братья были бы равны 185 и 355. Здесь соотношение meme состоит в том, что все эти углы имеют одинаковое отклонение angular от горизонтальной оси. 5 *.

Причина, по которой python возвращает 1.28, а не 5, состоит в том, что все компьютеры/калькуляторы основаны на табличной таблице данных в виде абака угла/радиана, его синуса, cos, tan и т.д. Поэтому, когда я math.acos(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 logic синусы/касательные.

Ответ 5

Вы также можете использовать arccos из модуля numpy

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

ПРЕДУПРЕЖДЕНИЕ: Для скаляров функция numpy.arccos() намного медленнее (~ 10x), чем math.acos. Смотрите пост здесь

Тем не менее, 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

Ответ 6

Результат math.acos() в радианах. Поэтому вам нужно перевести это в градусы.

Вот как вы можете это сделать:

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

Ответ 7

или просто напишите собственную функцию для расширения taylor cos ^ {- 1}

это будет более трудоемким (и, возможно, более медленным для запуска), но является более общим подходом