python Функция вычисления угла между векторами (градусы или радианы) -- пример на базе numpy
Primary tabs
Можно вычислять так:
@staticmethod
def unitVector(vector):
""" Returns the unit vector of the vector. """
return vector / np.linalg.norm(vector)
@staticmethod
def angleBetween(v1, v2, deg = True):
""" Returns the angle in radians between vectors 'v1' and 'v2'::
"""
print('Первый вектор:', v1)
print('Второй вектор:', v2)
v1_u = MathCommon.unitVector(v1)
v2_u = MathCommon.unitVector(v2)
radians = np.arccos(np.clip(np.dot(v1_u, v2_u), -1.0, 1.0))
result = radians
print('радианы:', result)
if deg:
result = np.degrees([radians.real])[0] # переводим в градусы
return result
Источники
- Реализовано на базе: https://stackoverflow.com/a/13849249
- Log in to post comments
- 17892 reads
vedro-compota
Wed, 01/03/2018 - 14:32
Permalink
Почему-то эта функция (выше)
Почему-то эта функция (выше) возвращает далеко не все углы для случайно генерируемых векторов.
Не очень ясно в чем тут смысл строки:
_____________
матфак вгу и остальная классика =)
moberaptor
Fri, 01/12/2018 - 00:56
Permalink
from math import sqrt, acos,
Как вариант, думаю, можно так сделать:
from math import sqrt, acos, degrees x1 = 1 y1 = 0 z1 = 1 x2 = 0 y2 = 1 z2 = 0 def scalar(x1, y1, z1, x2, y2, z2): return x1*x2 + y1*y2 + z1*z2 def module(x, y, z): return sqrt(x ** 2 + y ** 2 + z ** 2) cos = scalar(x1, y1, z1, x2, y2, z2)/(module(x1,y1,z1)*module(x2,y2,z2)) ang = acos(cos) print(degrees(acos(cos)))Тестовые данные