Вычисление тригонометрических функций в Python (sin, cos, tan, arcsin, arccos, arctan)

Бизнес

Используя math, стандартный модуль Python для математических функций, вы можете вычислять тригонометрические функции (sin, cos, tan) и обратные тригонометрические функции (arcsin, arccos, arctan).

Следующее содержание объясняется здесь с примерами кодов.

  • Pi (3.1415926…):math.pi
  • Преобразование углов (радианы, градусы):math.degrees(),math.radians()
  • Синус, обратный синус:math.sin(),math.asin()
  • косинус, обратный косинус:math.cos(),math.acos()
  • Тангенс, обратный тангенс:math.tan(),math.atan(),math.atan2()
  • Различия ниже:math.atan(),math.atan2()

Pi (3.1415926…): math.pi

Pi предоставляется в качестве константы в математическом модуле. Она выражается следующим образом.
math.pi

import math

print(math.pi)
# 3.141592653589793

Преобразование углов (радианы, градусы): math.degrees(), math.radians()

Тригонометрические и обратные тригонометрические функции в математическом модуле используют радиан в качестве единицы измерения угла.

Используйте math.degrees() и math.radians() для преобразования между радианами (метод градуса дуги) и градусами (метод градуса).

Math.degrees() преобразует радианы в градусы, а math.radians() преобразует градусы в радианы.

print(math.degrees(math.pi))
# 180.0

print(math.radians(180))
# 3.141592653589793

Синус, обратный синус: math.sin(), math.asin()

Функция для нахождения синуса (sin) — math.sin(), а функция для нахождения обратного синуса (arcsin) — math.asin().

Вот пример нахождения синуса 30 градусов с использованием функции math.radians() для преобразования градусов в радианы.

sin30 = math.sin(math.radians(30))
print(sin30)
# 0.49999999999999994

Синус 30 градусов равен 0,5, но здесь есть ошибка, потому что пи, иррациональное число, не может быть вычислено точно.

Если вы хотите округлить до соответствующего количества цифр, используйте функцию round() или метод format() или функцию format().

Обратите внимание, что возвращаемое значение round() — это число (int или float), а возвращаемое значение format() — это строка. Если вы хотите использовать его для последующих вычислений, используйте round().

print(round(sin30, 3))
print(type(round(sin30, 3)))
# 0.5
# <class 'float'>

print('{:.3}'.format(sin30))
print(type('{:.3}'.format(sin30)))
# 0.5
# <class 'str'>

print(format(sin30, '.3'))
print(type(format(sin30, '.3')))
# 0.5
# <class 'str'>

Функция round() указывает количество десятичных знаков в качестве второго аргумента. Обратите внимание, что это не совсем округление. Подробнее см. в следующей статье.

Метод format() и функция format() задают количество десятичных знаков в строке спецификации форматирования. Подробнее см. в следующей статье.

Если вы хотите сравнить, вы также можете использовать math.isclose().

print(math.isclose(sin30, 0.5))
# True

Аналогично, вот пример нахождения обратного синуса 0,5. math.asin() возвращает радианы, которые преобразуются в градусы с помощью math.degrees().

asin05 = math.degrees(math.asin(0.5))
print(asin05)
# 29.999999999999996

print(round(asin05, 3))
# 30.0

косинус, обратный косинус: math.cos(), math.acos()

Функция для нахождения косинуса (cos) — math.cos(), а функция для нахождения обратного косинуса (arc cosine, arccos) — math.acos().

Вот пример нахождения косинуса 60 градусов и обратного косинуса 0,5.

print(math.cos(math.radians(60)))
# 0.5000000000000001

print(math.degrees(math.acos(0.5)))
# 59.99999999999999

Если вы хотите округлить до соответствующего разряда, вы можете использовать round() или format(), как в случае с синусом.

Тангенс, обратный тангенс: math.tan(), math.atan(), math.atan2()

Функция для нахождения тангенса (tan) — math.tan(), а функция для нахождения обратного тангенса (arctan) — math.atan() или math.atan2().
Math.atan2() будет описана позже.

Пример нахождения тангенса 45 градусов и обратного тангенса 1 градуса показан ниже.

print(math.tan(math.radians(45)))
# 0.9999999999999999

print(math.degrees(math.atan(1)))
# 45.0

Разница между math.atan() и math.atan2()

И math.atan(), и math.atan2() — это функции, возвращающие обратный тангенс, но они отличаются количеством аргументов и диапазоном возвращаемых значений.

math.atan(x) имеет один аргумент и возвращает arctan(x) в радианах. Возвращаемое значение будет находиться между -pi \ 2 и pi \ 2 (от -90 до 90 градусов).

print(math.degrees(math.atan(0)))
# 0.0

print(math.degrees(math.atan(1)))
# 45.0

print(math.degrees(math.atan(-1)))
# -45.0

print(math.degrees(math.atan(math.inf)))
# 90.0

print(math.degrees(math.atan(-math.inf)))
# -90.0

В приведенном выше примере math.inf представляет бесконечность.

math.atan2(y, x) имеет два аргумента и возвращает arctan(y \ x) в радианах. Этот угол — угол (склонение), который вектор от начала координат (x, y) составляет с положительным направлением оси x в полярной координатной плоскости, а возвращаемое значение находится в диапазоне от -pi до pi (от -180 до 180 градусов).

Поскольку углы во втором и третьем квадрантах также могут быть получены правильно, math.atan2() более подходит, чем math.atan() при рассмотрении полярной координатной плоскости.

Обратите внимание, что порядок аргументов — y, x, а не x, y.

print(math.degrees(math.atan2(0, 1)))
# 0.0

print(math.degrees(math.atan2(1, 1)))
# 45.0

print(math.degrees(math.atan2(1, 0)))
# 90.0

print(math.degrees(math.atan2(1, -1)))
# 135.0

print(math.degrees(math.atan2(0, -1)))
# 180.0

print(math.degrees(math.atan2(-1, -1)))
# -135.0

print(math.degrees(math.atan2(-1, 0)))
# -90.0

print(math.degrees(math.atan2(-1, 1)))
# -45.0

Как и в приведенном выше примере, отрицательное направление оси x (y равен нулю и x отрицателен) равно pi (180 градусов), но когда y равен отрицательному нулю, это -pi (-180 градусов). Будьте осторожны, если вы хотите строго обращаться со знаком.

print(math.degrees(math.atan2(-0.0, -1)))
# -180.0

Отрицательные нули являются результатом следующих операций

print(-1 / math.inf)
# -0.0

print(-1.0 * 0.0)
# -0.0

Целые числа не рассматриваются как отрицательные нули.

print(-0.0)
# -0.0

print(-0)
# 0

Даже если x и y равны нулю, результат зависит от знака.

print(math.degrees(math.atan2(0.0, 0.0)))
# 0.0

print(math.degrees(math.atan2(-0.0, 0.0)))
# -0.0

print(math.degrees(math.atan2(-0.0, -0.0)))
# -180.0

print(math.degrees(math.atan2(0.0, -0.0)))
# 180.0

Есть и другие примеры, где знак результата меняется в зависимости от отрицательных нулей, например, math.atan2(), а также math.sin(), math.asin(), math.tan() и math.atan().

print(math.sin(0.0))
# 0.0

print(math.sin(-0.0))
# -0.0

print(math.asin(0.0))
# 0.0

print(math.asin(-0.0))
# -0.0

print(math.tan(0.0))
# 0.0

print(math.tan(-0.0))
# -0.0

print(math.atan(0.0))
# 0.0

print(math.atan(-0.0))
# -0.0

print(math.atan2(0.0, 1.0))
# 0.0

print(math.atan2(-0.0, 1.0))
# -0.0

Обратите внимание, что приведенные примеры — это результаты выполнения программы в CPython. Обратите внимание, что другие реализации или среды могут по-другому обрабатывать отрицательные нули.