두 벡터 사이의 각
http://egohim.blog.me/70012169260
vector의 cross product를 사용하면 될 것 같습니다.
먼저 두 벡터 사이의 각도는 사실 0~180밖에 나올수 없지만, 0~360가 나오도록 한다면 기준이 있어야할 것입니다.
기준1. vector a(기준)에서 vector b까지의
기준2. 시계 방향(기준) 혹은 시계 반대방향(기준)
위의 기준은 cross product의 순서로 정할 수 있는 것 같네요.
vector a에서 vector b로의 각도가 [0,180]이면
vector a와 vector b이 cross product의 z값은 0과 같거나 크고
vector a에서 vector b로의 각도가 (180,360) 또는 (-180,0) 이면
vector a와 vector b이 cross product의 z값은 0보다 작을 것입니다.
vector a=(ax, ay, az)
vector b=(bx, by, bz)
일 때 cross product(axb)의 z-component는 -ay bx + ax by이므로
아래와 같이 하면 가능하겠네요.
float cosAng1 = DotProduct(vector1, vector2);
return (vector1.y*vector2.x + vector1.x*vector2.y > 0.0f) ? (float)(acos(cosAng1)) : - (float)(acos(cosAng1));
실제로 곱하기 계산도 한번 줄었네요.(dot product-> 곱하기 3번 ---> 곱하기 2번)
[출처] 두 벡터 사이의 각|작성자 수양버들