0
的内角我有三个顶点(X,Y,Z)找到一个三角形
triangle = [[ 0. 0. 0.], [ 1. 0. 0.], [ 0.5 0.866 0. ]]
一个三角形我使用的答案从link但不知何故,我没有得到正确的角度。
DEF角(三角形):
def unit_vector(vector):
print(vector)
""" Returns the unit vector of the vector. """
return vector/np.linalg.norm(vector)
def angle_between(v1, v2):
""" Returns the angle in radians between vectors 'v1' and 'v2'::
>>> angle_between((1, 0, 0), (0, 1, 0))
1.5707963267948966
>>> angle_between((1, 0, 0), (1, 0, 0))
0.0
>>> angle_between((1, 0, 0), (-1, 0, 0))
3.141592653589793
"""
v1_u = unit_vector(v1)
v2_u = unit_vector(v2)
return np.arccos(np.clip(np.dot(v1_u, v2_u), -1.0, 1.0))
v1, v2, v3 = triangle[0], triangle[1], triangle[2]
vec1, vec2, vec3 = v2-v1, v3-v2, v3-v1
a1, a2, a3 = angle_between(vec1,vec2),angle_between(vec2,vec3),angle_between(vec3,vec1)
print(a1,a2,a3)
2.09440780623 1.04722295888 1.04718484736
的角度的总和高于3.1416rad什么是不可能的。
问题在哪里?
它可能是整型问题。尝试将.0添加到您的整数。 – Dan
对于第一个角度,您需要'angle_between(v1-v2,v3-v2)',而不是'angle_between(v2-v1,v3-v2)'。矢量的方向很重要。 –