Градусы Python по умолчанию в радианах
Я пытаюсь распечатать значение x,y для линии с определенной степенью, которая пересекает круг с указанным радиусом.
Скажем, например, что линия направлена прямо вверх на 90 градусов.
import math
degree = 90
radius = 10
x = radius * math.cos(degree)
y = radius * math.sin(degree)
print(x,y)
Это печатает -4.480736161291701 8.939966636005579, но, согласно моему калькулятору, должно печатать 0 10 град.
Я уже пытался добавить math.radians и math.degrees до степени var в x = и y =, но это не получалось правильно, когда я пытался. Ссылка, которую я нашел на точку, где линия со степенью пересекает окружность, находится здесь, значения sin / cos переворачиваются для значений x и y в решении.
Проще говоря, как бы я сделал 90 градусов в градусах вместо радианов, чтобы получить правильный x,y?
РЕДАКТИРОВАТЬ:
добавив math.radians:
x = radius * math.cos(math.radians(degree))
y = radius * math.sin(math.radians(degree))
вернул 6.123233995736766e-16 10.0
~~~
добавив math.degrees:
x = radius * math.cos(math.degrees(degree))
y = radius * math.sin(math.degrees(degree))
вернул -2.995153947555356 -9.540914674728182
4 ответа
Все углы в большинстве математических библиотек указаны в радианах. Вход в math.cos
должны быть радианы, но вы проходите в градусах.
import math
degree = 90
radius = 10
x = radius * math.cos(math.radians(degree))
y = radius * math.sin(math.radians(degree))
print x,y
>0, 10
math.radians
не более, чем делать (pi * degree / 180 )
В Python вы можете использовать math.radians
конвертировать из градусов в радианы. Обратите внимание, что по умолчанию радианы используются не только в Python, обычно в математике принято говорить об углах в радианах.
Хотя, в общем, вы всегда можете использовать формулу преобразования
radians = pi * degrees / 180
Ты можешь использовать math.radians(degree)
преобразовать в радианы. Все триггерные функции Python по умолчанию работают в радианах. Итак, ваш код становится:
import math
degree = 90
radius = 10
x = radius * math.cos(math.radians(degree))
y = radius * math.sin(math.radians(degree))
print(x,y)
И это дает правильный результат: 6.123233995736766e-16 10.0, с некоторым странным поведением с плавающей запятой, которое можно исправить с помощью соответствующего округления.
Если вы пишете несколько более длинный код, вы можете заставить его работать в градусах, вставив в начало следующие строки:
from math import sin, cos, tan, asin, acos, atan
def s(x):
return sin(rad(x))
def c(x):
return cos(rad(x))
def t(x):
return tan(rad(x))
def sa(x):
return deg(asin(x))
def ca(x):
return deg(acos(x))
def ta(x):
return deg(atan(x))
Затем во всем коде вместо ввода
sin(90)
вы бы напечатали
s(90)
, или для
arcsin(90)
вы бы напечатали
sa(90)
. (Я не мог подобрать кодовое слово для арксинуса, так как
as
уже является словом Python)
Теперь вы просто набираете свой код, как если бы он был в градусах, и все должно работать нормально.