사이각 구하기
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 |