Извините, если это прямо, но я не нашел никакой помощи в руководстве python или Google.
Я пытаюсь найти обратный косинус для значения с помощью python.
то есть. COS-1 (х)
Кто-нибудь знает, как это сделать?
Спасибо
Извините, если это прямо, но я не нашел никакой помощи в руководстве python или Google.
Я пытаюсь найти обратный косинус для значения с помощью python.
то есть. COS-1 (х)
Кто-нибудь знает, как это сделать?
Спасибо
У нас есть функция acos
, которая возвращает угол в радианах.
>>> import math
>>> math.acos(0)
1.5707963267948966
>>> _ * 2 - math.pi
0.0
Чтобы увеличить правильные ответы на использование math.acos
, также стоит знать, что существуют математические функции, подходящие для сложных чисел в cmath
:
>>> import cmath
>>> cmath.acos(1j)
(1.5707963267948966-0.88137358701954294j)
Придерживайтесь math.acos
, если вас интересуют только реальные числа,
Вы ищете функцию math.acos()
.
В ответ на использование обратного косинуса, чтобы найти обратные углы через 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 синусы/касательные.
Вы также можете использовать 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
Результат math.acos()
в радианах. Поэтому вам нужно перевести это в градусы.
Вот как вы можете это сделать:
import math
res = math.degrees (math.acos (value))
или просто напишите собственную функцию для расширения taylor cos ^ {- 1}
это будет более трудоемким (и, возможно, более медленным для запуска), но является более общим подходом