#python #алгоритм #математика #инспекция_кода #векторы
Дано направление вектора в таком формате: Направление ветра: проекция единичного вектора на ось X Направление ветра: проекция единичного вектора на ось Y Как мне получить направление в градусах? Получается что направление ветра это вектор (x, y) и необходимо найти угол между системой координат, т.е. вектором (0, 0)? def __projection2angle(self, x,y): delta_x = x - 0 delta_y = y - 0 rad = math.atan2(delta_y, delta_x) deg = rad * (180 / math.pi) if deg<=0: deg+=360 elif deg>=360: deg-=360 return deg Что то я сомневаюсь.
Ответы
Ответ 1
В целом вроде верно, но я бы сократил: def angle(self, x, y): deg = math.degrees(math.atan2(y, x)) return deg if deg >= 0 else deg + 360 или ещё более красивый вариант: def angle(x, y): deg = math.degrees(math.atan2(y, x)) return deg % 360 Код полностью: https://ideone.com/c9MQJa и https://ideone.com/sGXhgr import math def angle(x, y): deg = math.degrees(math.atan2(y, x)) return deg if deg >= 0 else deg + 360 print(angle( 1, 0)) # 0 print(angle( 1, 1)) # 45 print(angle( 0, 1)) # 90 print(angle(-1, 1)) # 135 print(angle(-1, 0)) # 180 print(angle(-1, -1)) # 225 print(angle( 0, -1)) # 270 print(angle( 1, -1)) # 315Ответ 2
Найти угол между двумя векторами можно через dot product: fi = arccos(dot(vec1,vec2)); тот же вариант : fi = arccos(vec1*vec2/|vec1|*|vec2|), где |val| это длина вектора. То есть, если у вас есть вектора A и нужно найти угол между ним и осью x, тогда: fi = arccos(dot(A,x));
Комментариев нет:
Отправить комментарий