擅长:python、mysql、java
<p>单独使用<code>arccos</code>方法只能给出向量之间的绝对角度,而不是顺时针还是逆时针。您可以通过检查<code>a</code>与<code>b</code>的垂线的点积是否为负来增强这一点,表示逆时针角度。你知道吗</p>
<pre><code>import numpy as np
def dot(a, b):
return np.sum(a * b, axis=-1)
def mag(a):
return np.sqrt(np.sum(a*a, axis=-1))
def angle(a, b):
cosab = dot(a, b) / (mag(a) * mag(b)) # cosine of angle between vectors
angle = np.arccos(cosab) # what you currently have (absolute angle)
b_t = b[:,[1,0]] * [1, -1] # perpendicular of b
is_cc = dot(a, b_t) < 0
# invert the angles for counter-clockwise rotations
angle[is_cc] = 2*np.pi - angle[is_cc]
return angle
print(angle(
np.array([[1, 0], [1, 0]]),
np.array([[0, 1], [0, -1]])
))
</code></pre>
<p>将打印<code>[pi/2, 3pi/2]</code>的浮点值。你知道吗</p>
<p>此函数的输出范围为<code>[0, 2*pi]</code>。你知道吗</p>