擅长:python、mysql、java
<p>现在使用<strong>角余弦距离</strong>来计算两个向量之间的角度是相当好的,但是在您的例子中,使用<strong>反正切</strong>可能会更好,如注释中所述。在</p>
<p>现在假设您要计算BCD之间的逆时针角度,可以使用numpy的<a href="http://docs.scipy.org/doc/numpy/reference/generated/numpy.arctan2.html" rel="nofollow">atan2</a>函数来完成。<strong>atan2(x,y)</strong>将给出原点<strong>y</strong>到<strong>x</strong>之间的角度。在</p>
<pre><code>import numpy as np
def calculate_angle(point_a, point_b):
""" Calculate angle between two points """
ang_a = np.arctan2(*point_a[::-1])
ang_b = np.arctan2(*point_b[::-1])
return np.rad2deg((ang_a - ang_b) % (2 * np.pi))
a = np.array([14, 140])
b = np.array([13, 120])
c = np.array([12, 130])
d = np.array([11, 110])
# create vectors
ba = a - b
bc = c - b
cd = d - c
# calculate angle
cosine_angle = np.dot(ba, bc) / (np.linalg.norm(ba) * np.linalg.norm(bc))
angle = np.arccos(cosine_angle)
inner_angle = np.degrees(angle)
print inner_angle # 8.57299836361
# see how changing the direction changes the angle
print calculate_angle(bc, cd) # 188.572998364
print calculate_angle(cd, bc) # 171.427001636
</code></pre>