使用3D坐标计算三点之间角度的python代码

jax*_*jax 2 python math numpy

我写下了一个代码,用三维坐标计算三点之间的角度.

import  numpy as np

a = np.array([32.49, -39.96,-3.86])

b = np.array([31.39, -39.28, -4.66])

c = np.array([31.14, -38.09,-4.49])

f = a-b # normalization of vectors
e = b-c # normalization of vectors

angle = dot(f, e) # calculates dot product 
print degrees(cos(angle))  # calculated angle in radians to degree 
Run Code Online (Sandbox Code Playgroud)

输出代码:

degree 33.4118214995
Run Code Online (Sandbox Code Playgroud)

但是当我使用其中一个软件来计算相同时,它会使输出位不同120度.请帮忙

参考我以前用来编写程序:

(如何计算蛋白质db文件中的键角?)

Eri*_*ric 14

您的原始代码非常接近.Adomas.m的答案不是非常惯用的numpy:

import numpy as np

a = np.array([32.49, -39.96,-3.86])
b = np.array([31.39, -39.28, -4.66])
c = np.array([31.14, -38.09,-4.49])

ba = a - b
bc = c - b

cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))
angle = np.arccos(cosine_angle)

print np.degrees(angle)
Run Code Online (Sandbox Code Playgroud)