사이각 구하기

Programing/수학 2012. 5. 16. 18:42 |

1 ) A · B = Ax * Bx + Ay * By + Az * Bz

2 ) A · B = ( A.Length * B.Length ) * cos(각도)

 

A와 B 벡터 내적을 표현 할 수 있는 식 두가지

 

즉 Ax * Bx + Ay * By + Az * Bz  =  ( A.Length * B.Length ) * cos(각도)

이렇게 표현 할수 있다.

 

내가 알고 싶은 것은 사이각 이므로

 

오른쪽에 있는 각도만 빼고 다 왼쪽으로 넘겨 버리면 된다.

 

Ax * Bx + Ay * By + Az * Bz  = A · B 이므로

acos( A · B /  ( A.Length * B.Length ) ) = 사이각

 

acos( A · B /  ( A.Length * B.Length ) ) 이 식을 이용하면 사이각을 구할 수 있다.

 

그리고 두 벡터가 노말라이즈가 된 벡터들이라면 acos( A · B ) 이렇게만 해도 된다.

 

하지만 이 식은 0 ~ 180 도 사이각만 알 수 있다.

 

0 ~ 360 도나 0 ~ 180, 0 ~ -180을 알고 싶을 때는 어떻게 하면 될까라는 궁금증이 생기게 되는데

 

 

 

 

 

A,B,C 벡터가 있다.

 

A와 B 의 사이각

A와 C 의 사이각

acos( A · B /  ( A.Length * B.Length ) ) 이 식에 대입하면 둘다 라디안 1.57값이 나오게 된다.

왜냐하면 cos에서  90도나 270도나 0이 나오기 때문이다. acos(0)을 넣으면 뱉아 내는 값이 1.57이다.

R = acos( A · B /  ( A.Length * B.Length ) )

Ax * By - Ay * Bx >= 0 ? R : -R

이렇게 z축 투영시키고 이차원 외적으로 구하면 0보다 크면 그냥 90도 0보다 작으면 - 90도 값이 나오게된다.

아니면

Ax * By - Ay * Bx >= 0 ? R : 360 - R

이러게하면 90도 270도가 나온다.

 

'Programing > 수학' 카테고리의 다른 글

벡터의 길이, 단위 벡터  (0) 2012.05.17
cos  (0) 2012.05.16
반사벡터, 굴절 벡터, 미끄름 벡터  (0) 2012.05.16
Posted by 부우산사나이
: