2017-06-16 18 views
0

の内角を探す私は3つの頂点(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

整数型の問題です。 .0をintに追加してみてください。 – Dan

+0

最初の角度はangle_between(v1-v2、v3-v2)ではなくangle_between(v2-v1、v3-v2)でなければなりません。ベクトルの方向は重要です。 –

答えて

2

あなたのベクトルの方向が権利を取得する必要があります:

angle_between(vec1,-vec2) # note the sign here 

ベクトルの符号が間違っている場合、あなたは内側のこのコーナーであなたの三角形の角度(ただし、「PI得ることはありません - 角度')。スケッチを描くことは確実にこれを明らかにするでしょう。

関連する問題