если я правильно угадываю, вы имеете в виду следующее:
сначала ваша матрица не является матрицей вращения ;знак не в том месте ...
тогда я буду игнорировать коэффициент 4
;вы можете сами это вставить.
import numpy as np
from numpy.linalg import norm
from numpy import dot, cos, sin, arccos
x = np.array((1, -1, 0, 0))
y = np.array((1, 0.5, 0.8660254, 0))
# just considering indices 1 and 2
cos_a = dot(x[1:3], y[1:3])/(norm(x[1:3]) * norm(y[1:3]))
a_rad = arccos(cos_a)
a_deg = np.rad2deg(a_rad)
print(a_deg) # 120
и проверить, что (правильный) бротинг действительно воспроизводит y
:
rot = np.array((
(1, 0, 0 , 0),
(0, cos(a_rad), -sin(a_rad), 0),
(0, sin(a_rad), cos(a_rad), 0),
(0, 0, 0, 1))
)
print(dot(rot, x)) # [ 1. 0.5 -0.8660254 0. ]