2016-09-14 2 views
1

나는 python에 익숙하다. 나는 3 차원 공간에서 두 벡터를 가지고 있고, 나는 노력이두 벡터 사이의 각도 3D? python

사이의 각도를 알고 싶어

vec1=[x1,y1,z1] 

vec2=[x2,y2,z2] 

angle=np.arccos(np.dot(vec1,vec2)/(np.linalg.norm(vec1)*np.linalg.norm(vec2))) 

하지만 변화 순서, VEC2이 같은 각도와 더 이상 얻을 vec1 때. 벡터의 순서가 바뀔 때 더 큰 각도를주고 싶습니다.

+1

당신은 당신이 주변에 회전 할 정상 알아낼 방법을 결정 했습니까? –

답변

0

내적은 교환 가능하므로 다른 측정 항목을 사용해야합니다. 순서에 상관하지 않습니다.

0

내적이 commutative이므로 변수를 순서대로 반대로 바꾸면 작동하지 않습니다.

목표가 급성 (작은) 각도가 아닌 둔각 (더 큰) 각도를 찾는 것이라면 360도에서 함수에서 반환 한 값을 뺍니다. 변수를 전환하려는 기준이있는 것 같기 때문에 동일한 기준을 사용하여 360에서 찾은 값을 뺄 시간을 결정해야합니다. 이렇게하면 이러한 경우에 원하는 값을 얻을 수 있습니다.

+0

그래,하지만 어떻게 파이썬 프로그램에서 그 프로세스를 자동화, 나도 몰라. 이것은 점이 3d 안에있는 꼭지점을 가진 그 poligone 안에 있는지 계산하는 주 프로그램의 한 부분입니다. 그 점과 정점에 대한 벡터 생성 사이의 각을 더하는 것은 = n * 360이다. –

+1

당신은 벡터의 순서를 바꾸고 있다고 말했습니다. 이것의 의도 된 결과는 무엇입니까? 어떤 상황에서 그 벡터를 전환하고 싶습니까? 이 질문에 답하면 내가 당신을 도울 수 있습니다. –

+0

@AlbertoAlarconParedes 어떤 이론을 말하는 겁니까? 다각형의 내부 각은 180 * (n-2)도입니다. – ijustlovemath

1

각도가 포함 된 평면은 두 가지 방향으로 배치 될 수 있으며 입력 데이터에서 아무 것도 그것에 대한 단서를 제공하지 않으므로 사용자가 묻는 것은 불가능합니다.

당신이 할 수있는 것은 벡터들 사이의 가장 작은 각 (또는 그 보완적인 360 °)을 계산하는 것입니다. 그리고 벡터들을 바꾸는 것은 효과가 없습니다.

내적 제품은 유죄가 아니며 기하학적 인 막 다른 곳입니다.

1

원하는 각도를 선택할 수있는 기능을 사용하십시오. 그냥 예각에 대한

angle(vec1, vec2, 'True') 

쓰기 프로그램에서 (라디안) 각도를 계산하고자 할 때, 그리고

def angle(v1, v2, acute): 
# v1 is your firsr vector 
# v2 is your second vector 
    angle = np.arccos(np.dot(v1, v2)/(np.linalg.norm(v1) * np.linalg.norm(v2))) 
    if (acute == True): 
     return angle 
    else: 
     return 2 * np.pi - angle 

을하고

angle(vec2, vec1, 'False') 
: 코드의 beggining에 쓰기

둔각입니다. 예를 들어

는 :

vec1 = [1, -1, 0] 
vec2 = [1, 1, 0] 

#I am explicitly converting from radian to degree 
print(180* angle(vec1, vec2, True)/np.pi) #90 degrees 
print(180* angle(vec2, vec1, False)/np.pi) #270 degrees