Модуль math . Тригонометрические функции
Все тригонометрические функции оперируют радианами. Зависимость между радианами и градусами определяется по формуле:
Если известен угол в градусах, то для корректной работы тригонометрических функций, этот угол нужно преобразовать в радианы.
Например. Задан угол, имеющий 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
Связанные темы
Python: Find the degree of the Angle [0:360] from cos(a) and sin(a) values
I would like to find the degree between 0 to 360 of my angle. I have a DataFrame with 2 columns: cos and sin values.
df['cos'] = vector values between 0 and 1 df['sin'] = vector values between 0 and 1
4 Answers 4
I gues you mean something like:
import math angle = math.degrees(math.acos(df['cos']))
To really stay in [0, 360] you will have to check for negative cos and adapt the code like:
import math a_acos = math.acos(df['cos']) if df['sin'] < 0: angle = math.degrees(-a_acos) % 360 else: angle = math.degrees(a_acos)
Don't mess with sign check. You need both cos and sin
import math for i in range(360): angle = i * math.pi / 180 cs = math.cos(angle) sn = math.sin(angle) angle2 = math.atan2(sn, cs) # ALWAYS USE THIS angle2 *= 180 / math.pi if angle2 < 0: angle2 += 360 print(angle2)
The best way of doing this is by using the np.angle function which returns the 'angle' associated to a complex number. For a bit of theory, any complex number z has a magnitude r and an angle theta , and is given by
z = r*cos(theta) + 1j * r*sin(theta)
np.angle takes a complex number as input and returns the angle in radians from $-pi$ to $pi$ (corresponding to -180 to 180 in degrees). Which means that what you're looking for is essentially this
angle_negpi_to_pi = np.angle(df['cos'] + 1j*df['sin']) angle = ((angle_negpi_to_pi + 2*np.pi) % (2*np.pi)) * 180/np.pi