# 두 벡터사이의 사잇각 구하기. └→Unity3D/2D

두 벡테사이의 사잇각은 방향에 따라 각이 다르게 측정된다.

자세한 내용은 참고 문서를 보도록하자.

# ref 1 : http://bowbowbow.tistory.com/14
# ref 2 : http://darkpgmr.tistory.com/121

1
2
3
4
5
6
7
8
9
public float GetAngleBetween3DVector(Vector3 vec1, Vector3 vec2)
{
float theta = Vector3.Dot(vec1, vec2) / (vec1.magnitude * vec2.magnitude);
Vector3 dirAngle = Vector3.Cross(vec1, vec2);
float angle = Mathf.Acos(theta) * Mathf.Rad2Deg;
if (dirAngle.z < 0.0f) angle = 360 - angle;
Debug.Log("사잇각 : " + angle);
return angle;
}

Acos() 함수의 경우, 0 ~ 180' 의 해당하는 radian 값을 돌려준다. 0~360' 의 범위로 계산하고 싶다면 두 벡터사이의 수직인
벡터를 구해 이 벡터의 z 값을 이용하면된다. 3차원 좌표의 x,z평면은 2차원 에서의 x,y 좌표계로 볼 수 있다. 따라서, z의 값이
2차원 좌표계의 y값으로 볼 수 있고 이는 결국 z의값이 사잇각을 구하는 벡터가 1~4사 분면에서 어디에 위치한지를 알 수 있다.
( = 사잇각의 방향성을 알 수 있다. )
결국 z값(=2차원에서의 y값)이 음수라면 3, 4 분면에, 양수라면 1, 2 분면에 위치함을 알 수 있다. 만약 z값이 0 이라면 두 벡터의
사잇각은 180' -> 평행임을 의미한다.