게임에서의 Vector - 내적 / 외적
내적
내적은 A*B = |A| * |B| * cosX 이다.
A벡터와 B벡터의 크기에 코사인 값을 곱한 것이다.
유니티에서 ,
A 내적 B 는 Vector3.Dot(A,B)
벡터 A의 길이는 Vector3.Magnitude(A)
벡터 B의 길이는 Vector3.Magnitude(B)
로 구할 수 있다.
1. 두 벡터 사이의 각도
|A| 와 |B|를 반대쪽으로 이항한 후 코사인의 역함수를 구해주면 된다.
특히 정규화된 단위벡터의 경우 크기가 1이므로 더 간단하게 구할 수 있다.
오브젝트 위치벡터 사이의 각도는 항상 유용하게 쓰일 수 있다.
2. 물체가 앞에 있는지 , 뒤에 있는지 판별
내적을 이용하여 물체가 앞에 있는지 , 뒤에 있는지 판별할 수 있다.
플레이어의 시선 (forward)를 중심으로 좌, 우 90도가 넘어가는 순간 코사인 값은 음수를 갖기 때문에,
플레이어 시선의 벡터와 target의 위치 벡터를 내적하여 양수값이면 플레이어의 정면,
음수값이면 플레이어의 후면에 존재한다는 뜻이다.
3. 시야각 내에 물체 판별
내적을 이용해서 특정 오브젝트가 플레이어의 시야각 내에 위치하는지 여부를 판별할 수 있다.
플레이어의 시야각을 X라고 했을 때, 플레이어의 시선과 오브젝트의 위치 벡터를 내적해서 얻는
각도가 X / 2 보다 크다면 시야 내부에 위치한다는 뜻이고, 그 반대에 경우는 시야에 없다는 뜻이다.
외적
외적은 보통 좌, 우를 판별할 때 많이 사용된다.
아까 내적을 살펴봤을 때 눈치챈 사람도 있겠지만, 내적은 좌,우를 구분하지 않는다.
왼쪽이던 오른쪽이던 같은 각도라면 같은 값을 반환해낸다.
같은 의미로 인자의 순서에 관계가 없어 교환 법칙이 성립한다.
A*B 나 B*A나 같은 값을 반환한다는 뜻이다.
하지만 외적은 다르다.
외적은 우선 내적과 다르게 스칼라 값이 아닌 벡터 값이므로 방향성을 갖고,
인자의 순서가 반대일 경우, 같은 절대값의 반대 부호를 가진 값을 반환하게 된다.
1. 좌 우 판별
외적은 보통 오브젝트가 왼쪽에 있는지, 오른쪽에 있는지 판별하는데 사용된다.
플레이어의 시선과 Up 벡터를 중심으로 외적을 구한다면 플레이어 왼쪽에 있는 오브젝트는 양수,
플레이어의 오른쪽에 있는 오브젝트는 음수를 반환할 것이다.
참고한 블로그
https://gnaseel.tistory.com/18
[유니티] 게임에서 Vector의 내적, 외적이 갖는 의의
보통 고등학교 때 기하와 벡터를 다루며 기본적으로 내적과 외적을 배우는데, 다들 전문적인 물리 엔진 제작과 같은 전문적인 업무가 아니면 쓸모없다고 생각하지만, 의외로 단순한 작업에서도
gnaseel.tistory.com
[유니티] 벡터 사이의 각도 측정, Vector3.Dot
float Vector3.Dot(Vector3 lhs, Vector3 rhs);(위 영상의 내용중 각도 측정에 관한 내용을 서술하였고...
blog.naver.com