我正在尝试编写一个代码,其中我有一个向量列表,我必须找到每个向量与其余向量之间的角度。(我正在研究 mediapipe 的手部地标)。到目前为止,我的代码是这样的:
vectors = [thumb_cmc_vec, thumb_mcp_vec, thumb_ip_vec, thumb_tip_vec, index_mcp_vec, index_pip_vec,
index_dip_vec, index_tip_vec, middle_mcp_vec, middle_pip_vec, middle_dip_vec, middle_tip_vec,
ring_mcp_vec, ring_pip_vec, ring_dip_vec, ring_tip_vec, pinky_mcp_vec, pinky_pip_vec,
pinky_dip_vec, pinky_tip_vec]
for vector in vectors:
next_vector = vector + 1
print(vector)
for next_vector in vectors:
print(next_vector)
M = (np.linalg.norm(vector) * np.linalg.norm(next_vector))
ES = np.dot(vector, next_vector)
th = math.acos(ES / M)
list.append(th)
print(list)
其中 M = 当前向量集范数的乘积,ES = 向量的标量积,th = 向量的角度。我的问题是变量next_vector
总是从列表的第一个向量开始 for 循环,即使我希望它从前一个循环的下一个向量开始,以免产生重复的结果。此外,当两个循环都在第三个向量 (thumb_ip_vec) 上时,我收到此错误
th = math.acos(ES / M) ValueError: math domain error。有没有办法解决这个问题?谢谢!