게임수학

벡터의 내적과 벡터의 외적

잡템 2023. 10. 23. 16:23

벡터 내적

벡터 A와 벡터 B의 내적의 공식

AㆍB = |A| |B| cosθ

A내적B = 벡터A크기 * 벡터B크기 * cosθ

cosθ = A내적B / A크기 / B크기

θ = Arccos(A내적B / A크기 / B크기)

θ는 AB 사이의 각

 

유니티로 표현하면

Vector3.Dot(A,B) = Vector3.Magnitude(A) * Vector3.Magnitude(B) * Mathf.Cos(θ)

Mathf.Cos(θ) = Vector3.Dot(A,B) / Vector3.Magnitude(A) / Vector3.Magnitude(B)

θ = Mathf.Acos(Vector3.Dot(A,B) / Vector3.Magnitude(A) / Vector3.Magnitude(B))

 

내적 > 0 , θ< 90
내적 < 0 , θ> 90
내적 = 0 , θ= 90

Cosθ의 성질은 0<= θ <= 180 범위내에서 θ가 커질수록 cosθ는 작아지고 θ작아질수록 cosθ는 커진다

이 성질을 이용해 

AㆍB > cosθ 인경우 B벡터는 A벡터를 기준으로 양옆으로 θ각도 사이에 들어와있음을 알 수 있다.

 

 

부채꼴의 선(벡터)과 점과의거리
직선을 벡터AB와 점을 P라할때 벡터AB와 벡터AP의 외적 = 선분AB의 길이 * 선분 AB와 점 P의 거리
선분 AB와 점 P의거리 = 벡터 AB와 AP의 외적의크기/선분 AB의 길이

 

벡터 외적

//오른손 좌표계

타겟벡터와 중심벡터의 외적의 y값이 0보다 큼 = 타겟이 중심기준 왼쪽에 위치
타겟벡터와 중심벡터의 외적의 y값이 0보다 작음 = 타겟이 중심기준 오른쪽에 위치

 

//왼손좌표계 (게임엔진은 주로 왼손좌표계따른다, 유니티도 동일)

타겟벡터와 중심벡터의 외적의 y값이 0보다 큼 = 타겟이 중심기준 오른쪽에 위치
타겟벡터와 중심벡터의 외적의 y값이 0보다 작음 = 타겟이 중심기준 왼쪽에 위치

 

유니티로 표현시

Vector3.Cross(중심벡터, 방향벡터) >0 = 오른쪽

Vector3.Cross(중심벡터, 방향벡터) <0 = 왼쪽

 

오른손 좌표계와 동일하게 하고싶으면 중심벡터와 방향벡터의 순서를바꾸면된다.

 

Reference

https://shakddoo.tistory.com/entry/c-%EC%A0%90-%EC%84%A0%EB%B6%84-%EA%B0%84%EC%9D%98-%EA%B1%B0%EB%A6%AC-%EA%B5%AC%ED%95%98%EA%B8%B0

https://geukggom.tistory.com/113