2010-04-18 5 views
8

이 코드 스 니펫이 있는데 첫 번째 메서드의 결과가 두 번째 메서드의 결과와 다른 이유는 무엇입니까?두 개의 2D 벡터 사이의 각도, 두 가지 방법 사이의 차이점은 무엇입니까?

public double AngleBetween_1(vector a, vector b) { 
    var dotProd = a.Dot(b); 
    var lenProd = a.Len*b.Len; 
    var divOperation = dotProd/lenProd; 
    return Math.Acos(divOperation) * (180.0/Math.PI); 
} 

public double AngleBetween_2(vector a, vector b) { 
    var dotProd = a.Dot(b); 
    var lenProd = a.Len*b.Len; 
    var divOperation = dotProd/lenProd; 
    return (1/Math.Cos(divOperation)) * (180.0/Math.PI); 
} 

답변

16

첫 번째 방법이 정확하고 두 번째 방법이 올바르지 않기 때문입니다.

arccosine 함수가 "acos"라고 쓰여지고 "cos -1"으로 표시되는 경우가 있습니다. 이것은 수학 표기법의 버릇입니다. "cos -1"은 실제로는 아크 코사인이고 코사인의 역수는 아닙니다 (이는 시컨트입니다). 혹시 "COS 2"를 참조하면

그러나, 그 다음은 코사인의 광장, 그리고 "COS 3"의 코사인의 큐브입니다. 삼각 함수의 표기법은 이런 식으로 이상합니다. 대부분의 연산자는 반복되는 적용을 나타 내기 위해 위 첨자를 사용합니다.

+0

확실히. 감사! 내가 고등학교 때 trig를 택한 이래로 얼마간이 지났다. – bitcycle

5

Math.Acos(divOperation)1/Math.Cos(divOperation)과 동일하지 않습니다. arccos은 cos의 이며 곱셈의 반대는 아닙니다.

3

아마도 acos (x) ≠ 1/cos (x)이기 때문일 수 있습니다.

관련 문제