Кажется, вы пытаетесь найти угол между двумя точками (x1, y1)
и (x2, y2)
. Для начала, как уже упоминалось в комментариях, у вас неправильные аргументы. Но даже тогда ваше текущее решение на самом деле не работает.
angle1
и angle2
могут находиться в любом месте в диапазоне [-pi, pi]
, поэтому давайте предположим, что они pi
и -pi
(хотя они и представляют одно и то же значение, это возможно из-за 0.0
и -0.0
это разные поплавки).
Это дает «разницу» в 2*pi
, что не совсем то, что вы хотите. Если бы мы поменяли их, это было бы -2*pi
. Таким образом, наши значения теперь находятся в диапазоне [-2*pi, 2*pi]
, что означает, что один и тот же ответ может быть представлен несколькими значениями. Как мы это исправим? Делая
angle_difference = (angle2 - angle1) % np.pi # range == [0, 2*pi)
Вам нужно будет проделать немного больше работы, чтобы попасть в диапазон [-pi, pi].
angle_difference = angle_difference if angle_difference < np.pi else -2*np.pi + angle_difference
Есть еще один способ: https://math.stackexchange.com/questions/227014/find-the-angle-between-two-vectors
import numpy as np
from numpy.linalg import norm
v1 = np.array([x1, y1])
v2 = np.array([x2, y2])
angle_difference = np.arccos((v1 @ v2) / (norm(v1) * norm(v2))) # in range [0, pi]
Однако, поскольку он симметричен, он не будет указывать направление угла.