Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Как из проекции единичного вектора на оси x и y получить направление в градусах 0..360?

#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));

Комментариев нет:

Отправить комментарий