Я пишу игру на pygame и мне нужно найти угол.
sin = y/(math.sqrt(x*x+y*y))
sin – синус этого угла, как с помощью него найти сам угол?
Kromster
13.5k12 золотых знаков43 серебряных знака72 бронзовых знака
задан 6 янв в 16:47
6
Если требуется узнать угол направления на точку (x, y), всегда используйте math.atan2. Она решает задачу точнее и быстрее чем любая другая обратная тригонометрическая функция. Обратите внимание на обратный порядок аргументов:
angle_in_radians = math.atan2(y, x)
Радианы надо будет перевести в градусы:
angle_in_degrees = angle_in_radians * 180 / math.pi
ответ дан 6 янв в 17:21
If you want the angle in degrees, you can use
math.degrees(math.atan(1))
This gives the answer
45.0
in the interactive console.
However, be aware that this returns one angle that gives that trig ratio–there are also infinitely many others that give the same ratio. For that very example, 225° has the same tangent. For the tangent ratio, the other angles differ from the returned angle by a multiple of 180°.
The inverse of sin()
is asin()
and the inverse of cos()
is acos()
. Like tangent, they return one angle that gives that ratio. Angles that differ by a multiple of 360° will also give the same trig ratio. For sine, you can also subtract one of those angles from 180° to get another such angle, and for cosine you can get one by taking its negative.
For sine and cosine, if the supposed ratio is not between -1 and 1 there is no real answer at all, and Python will return an error.
Я хочу найти угол треугольника в Python. Я искал другие темы здесь, но ни одна из них не помогла мне…
Мой код:
from math import hypot, sin
opposite = 5
adjacent = 8.66
hypotenuse= hypot(opposite, adjacent)
# Trigonometry - Find angle
sine = opposite / hypotenuse
print(sin(sine))
Итак, у меня есть калькулятор с функцией Sin-1, и когда я использую его в вычислении «синуса», он возвращает мне угол 30.
Проблема в том, что я не нахожу эту функцию sin-1 на Python. Кто-нибудь может мне помочь?
Выход:
# Whatever this is
0.47943519230195053
Ожидаемый результат (который дает мне мой калькулятор):
# Angle
30
1 ответ
Лучший ответ
Чтобы получить угол, вам нужна функция arcsin
(sin-1
), в Python это math.asin
. Также обратите внимание, что результат в радианах, возможно, вы хотите показать градусы:
from math import hypot, asin, degrees
opposite = 5
adjacent = 8.66
hypotenuse= hypot(opposite, adjacent)
# Trigonometry - Find angle
sine = opposite / hypotenuse
rad_angle = asin(sine)
deg_angle = degrees(rad_angle)
print(rad_angle, deg_angle)
>>>0.5236114777699694 30.000727780827372
Также обратите внимание, что имея два катетиса, вы можете получить угол, используя функцию atan
(арктангенс) без вычисления гипотенузы.
print(degrees(atan(opposite/ adjacent)))
Или atan2
– принимает два аргумента, возвращает результат в диапазоне полного круга (не важно для треугольников, но может помочь в векторных вычислениях)
print(degrees(atan2(opposite, adjacent)))
1
MBo
31 Авг 2022 в 07:24
Содержание
- 1. Особенности применения тригонометрических функций. Преобразование радиан в градусы и наоборот
- 2. Средства языка Python для конвертирования из градусов в радианы и наоборот. Функции math.degrees(x) и math.radians(x)
- 3. Ограничения на использование тригонометрических функций
- 4. Функция math.acos(x). Арккосинус угла
- 5. Функция math.asin(x). Арксинус
- 6. Функция math.atan(x). Арктангенс
- 7. Функция math.atan2(x, y). Арктангенс от x/y
- 8. Функция math.cos(x). Косинус угла
- 9. Функция math.sin(x)
- 10. Функция math.hypot(x, y). Евклидовая норма (Euclidean norm)
- 11. Функция math.tan(x). Тангенс угла x
- Связанные темы
Поиск на других ресурсах:
1. Особенности применения тригонометрических функций. Преобразование радиан в градусы и наоборот
Чтобы использовать тригонометрические функции в программе, нужно подключить модуль math
import math
Все тригонометрические функции оперируют радианами. Зависимость между радианами и градусами определяется по формуле:
1 радиан = 180°/π = 57.2958°
Если известен угол в градусах, то для корректной работы тригонометрических функций, этот угол нужно преобразовать в радианы.
Например. Задан угол, имеющий n градусов. Найти арккосинус этого угла. В этом случае формула вычисления результата будет следующей:
... n_rad = n*3.1415/180 # получить угол в радианах ac = math.acos(n_rad) # вычислить арккосинус ...
Чтобы получить более точное значение результата, в программе можно использовать константу math.pi, которая определяет число π. В этом случае текст программы будет иметь следующий вид
n_rad = n*math.pi/180 # получить угол в радианах ac = math.acos(n_rad) # вычислить арккосинус
⇑
2. Средства языка Python для конвертирования из градусов в радианы и наоборот. Функции math.degrees(x) и math.radians(x)
В языке Python существуют функции преобразования из градусов в радианы и, наоборот, из радиан в градусы.
Функция math.degrees(x) конвертирует значение параметра x из радиан в градусы.
Функция math.radians(x) конвертирует значение параметра x из градусов в радианы.
Пример.
# Функция math.degrees(x) import math x = 1 # x - угол в радианах y = math.degrees(x) # y = 57.29577951308232 - угол в градусах x = math.pi # x = 3.1415... y = math.degrees(x) # y = 180.0 # Функция math.radians(x) x = 180.0/math.pi y = math.radians(x) # y = 1.0 x = 45 # x - угол в градусах y = math.radians(x) # y = 0.7853981633974483
⇑
3. Ограничения на использование тригонометрических функций
При использовании тригонометрических функций следует учитывать соответствующие ограничения, которые следуют из самой сущности этих функций. Например, не существует арксинуса из числа, которое больше 1.
Если при вызове функции задать неправильный аргумент, то интерпретатор выдаст соответствующее сообщение об ошибке
ValueError: math domain error
⇑
4. Функция math.acos(x). Арккосинус угла
Функция acos(x) возвращает арккосинус угла x. Аргумент x задается в радианах и может быть как целым числом, так и вещественным числом.
Пример.
# Функция math.acos(x) import math n = float(input('n = ')) # ввести n n_rad = n*math.pi/180 # получить угол в радианах ac = math.acos(n_rad) # вычислить арккосинус print('n_rad = ', n_rad) print('ac = ', ac)
Результат работы программы
n = 35 n_rad = 0.6108652381980153 ac = 0.913643357298706
⇑
5. Функция math.asin(x). Арксинус
Функция math.asin(x) вычисляет арксинус угла от аргумента x. Значение аргумента x задается в радианах.
Пример.
# Функция math.asin(x) import math n = 10 # n - угол в градусах # конвертировать из градусов в радианы n_rad = n*math.pi/180 # n_rad = 0.17453292519943295 # вычислить арксинус asn = math.asin(n_rad) # asn = 0.17543139267904395
⇑
6. Функция math.atan(x). Арктангенс
Функция math.atan(x) возвращает арктангенс аргумента x, значение которого задается в радианах. При использовании функции важно помнить допустимые значения x, которые можно задавать при вычислении арктангенса.
Пример.
# Функция math.atan(x) import math n = 60 # n - угол в градусах # конвертировать из градусов в радианы n_rad = n*math.pi/180 # n_rad = 1.0471975511965976 # вычислить арктангенс atn = math.atan(n_rad) # atn = 0.808448792630022
⇑
7. Функция math.atan2(x, y). Арктангенс от x/y
Функция math.atan2(x, y) вычисляет арктангенс угла от деления x на y. Функция возвращает результат от —π до π. Аргументы x, y определяют координаты точки, через которую проходит отрезок от начала координат. В отличие от функции atan(x), данная функция правильно вычисляет квадрант, влияющий на знак результата.
Пример.
# Функция math.atan2(x,y) import math x = -2 y = -1 res = math.atan2(x, y) # res = -2.0344439357957027
⇑
8. Функция math.cos(x). Косинус угла
Функция math.cos(x) вычисляет косинус угла для аргумента x. Значение аргумента x задается в радианах.
Пример.
# Функция math.cos(x) import math x = 0 y = math.cos(x) # y = 1.0 x = math.pi y = math.cos(x) # y = -1.0 x = 2 # 2 радианы y = math.cos(x) # y = -0.4161468365471424
⇑
9. Функция math.sin(x)
Функция math.sin(x) возвращает синус угла от аргумента x, заданного в радианах.
Пример.
# Функция math.sin(x) import math x = math.pi y = math.sin(x) # y = 1.2246467991473532e-16 x = 0 y = math.sin(x) # y = 0.0 x = 2 # 2 радиана y = math.sin(x)
⇑
10. Функция math.hypot(x, y). Евклидовая норма (Euclidean norm)
Функция возвращает Евклидовую норму, которая равна длине вектора от начала координат до точки x, y и определяется по формуле
Пример.
# Функция math.hypot(x, y) import math x = 1.0 y = 1.0 z = math.hypot(x, y) # z = 1.4142135623730951 x = 3.0 y = 4.0 z = math.hypot(x, y) # z = 5.0
⇑
11. Функция math.tan(x). Тангенс угла x
Функция math.tan(x) возвращает тангенс от аргумента x. Аргумент x задается в радианах.
Пример.
# Функция math.tan(x, y) import math x = 1.0 y = math.tan(x) # y = 1.5574077246549023 x = 0.0 y = math.tan(x) # y = 0.0
⇑
Связанные темы
- Теоретико-числовые функции и функции представления
- Степенные и логарифмические функции
- Гиперболические функции
- Специальные функции и константы
⇑
В этом разделе представлены тригонометрические функции модуля math
.
Содержание:
- Функция
math.sin()
; - Функция
math.cos()
; - Функция
math.tan()
; - Функция
math.asin()
; - Функция
math.acos()
; - Функция
math.atan()
; - Функция
math.atan2()
; - Функция
math.hypot()
.
math.sin(x)
:
Функция math.sin()
возвращает синус угла x
значение которого задано в радианах.
>>> from math import * >>> sin(pi/2) # 1.0 >>> sin(pi/4) # 0.7071067811865475)
math.cos(x)
:
Функция math.cos()
возвращает косинус угла x
значение которого задано в радианах.
>>> from math import * >>> cos(pi/3) # 0.5000000000000001 >>> cos(pi) # -1.0
math.tan(x)
:
Функция math.tan()
возвращает тангенс угла x
значение которого задано в радианах.
>>>from math import * >>> tan(pi/3) # 1.7320508075688767 >>> tan(pi/4) # 0.9999999999999999
При определенных значениях углов тангенс должен быть равен либо −∞
либо +∞
, скажем tan(3π/2)=+∞
, a tan(−π/2)=−∞
, но вместо этого мы получаем либо очень большие либо очень маленькие значения типа float
:
>>> tan(-pi/2) # -1.633123935319537e+16 >>> tan(3*pi/2) # должно быть Inf, но # 5443746451065123.0
math.asin(x)
:
Функция math.asin()
возвращает арксинус значения x
, т. е. такое значение угла y
, выраженного в радианах при котором sin(y) = x
.
>>> from math import * >>> asin(sin(pi/6)) # 0.5235987755982988 >>> pi/6 # 0.5235987755982988
math.acos(x)
:
Функция math.acos()
возвращает арккосинус значения x
, т. е. возвращает такое значение угла y
, выраженного в радианах, при котором cos(y) = x
.
>>> from math import * >>> acos(cos(pi/6)) 0.5235987755982987 >>> pi/6 0.5235987755982988
math.atan(x)
:
Функция math.atan()
возвращает арктангенс значения x
, т. е. возвращает такое значение угла y
, выраженного в радианах, при котором tan(y) = x
.
>>> from math import * >>> atan(tan(pi/6)) # 0.5235987755982988 >>> pi/6 # 0.5235987755982988
math.atan2(y, x)
:
Функция math.atan2()
возвращает арктангенс значения y/x
, т. е. возвращает такое значение угла z
, выраженного в радианах, при котором tan(z) = x
. Результат находится между -pi
и pi
.
>>> from math import * >>> y = 1 >>> x = 2 >>> atan2(y, x) # 0.4636476090008061 >>> atan(y/x) # 0.4636476090008061 >>> tan(0.4636476090008061) # 0.49999999999999994
Данная функция, в отличие от функции math.atan()
, способна вычислить правильный квадрант в котором должно находиться значение результата. Это возможно благодаря тому, что функция принимает два аргумента (x, y)
координаты точки, которая является концом отрезка начатого в начале координат. Сам по себе, угол между этим отрезком и положительным направлением оси X не несет информации о том где располагается конец этого отрезка, что приводит к одинаковому значению арктангенса, для разных отрезков, но функция math.atan2()
позволяет избежать этого, что бывает очень важно в целом ряде задач. Например, atan(1)
и atan2(1, 1)
оба имеют значение pi/4, но atan2(-1, -1)
равно -3 * pi / 4
.
math.hypot(*coordinates)
:
Функция math.hypot()
возвращает евклидову норму, sqrt(sum(x**2 for x in coordinates))
. Это длина вектора от начала координат до точки, заданной координатами.
Для двумерной точки (x, y)
это эквивалентно вычислению гипотенузы прямоугольного треугольника с использованием теоремы Пифагора sqrt(x*x + y*y)
.
Изменено в Python 3.8: Добавлена поддержка n-мерных точек. Раньше поддерживался только двумерный случай.