본문 바로가기

C

unity Vector 수학( 내적 Dot, 외적 Cross )

 

 

유니티를 위해 벡터를 반드시 이해해야합니다.

 

2D 벡터는 X, Y로 이루어져 있씁니다. 평면 도형

3D 벡터는 X,Y,Z 로 이루어져 있습니다. 큐브

 

 

유니티의 XYZ 체계는 아래의 손 사진처럼 왼손 엄지와 검지를 펼치면 알 수 있습니다.

 

 

 

 

 

 

 

내적은 두 벡터를 취하며 그로부터 단일 값인 스칼라를 산출합니다.

두 벡터 A와 B의 내적을 구하기 위해 각 벡터의 X,Y,Z를 각각 곱하여 합산합니다.

이 곱셈을 통해 두 벡터에 대한 정보를 알 수 있습니다.

 

 

지정된 벡터 2개의 내적이 0 이면 두 벡터는 직교합니다.

하지만 위 사진의 벡터 A, B의 내적은6. 0과 같지 않으므로 두 벡터는 직교하지 않습니다.

 

만약 벡터 A가 0,7,0 이였다면? 내적이 0이므로 두 벡터는 서로 직교하겠죠.

 

 

 

 

 

위 사진 속 두 벡터는 지금으로 보기엔 직교가 아닌 것처럼 보이겠지만 내적을 계산해보면 0과 같으므로 서로 직교합니다.   

 

 

 

 

이를 좀더 응용해서 비행기 시뮬레이터를 구현할 때를 예로 들어보겠습니다.

비행기 1

위의 비행기 1 사진처럼 초록 벡터와 파랑 벡터가 서로 직교하여 내적이 0일 때,

비행기가 받는 항력을 가장 작게 세팅합니다.

 

 

 

비행기 2

비행기 2 사진의 초록 벡터와 파랑 벡터를 내적 계산을 했을 때, 내적은 양수로 증가하게 됩니다.

그러면 비행기가 위로 젖혀지므로 항력이 더해지도록 세팅합니다.

 

 

 

비행기 3

비행기 3 사진의 초록 벡터와 파랑 벡터를 내적 계산했을 때, 내적은 음수로 증가하게 됩니다.

그러면 비행기는 하강하게 세팅합니다.

 

 

유니티에 내적 계산을 쉽게 도와주는 헬퍼 함수가 있으니 꼭 참고하시기 바랍니다.

Vector3.Dot(VectorA, VectorB)

 


 

 

외적은 두 벡터를 다른 방식으로 사용합니다. 단일값 스칼라를 구하는 대신 또다른 벡터를 구하게 되는데요.

이 벡터는 원래 있던 두 벡터에 직교합니다.

위의 사진과 함께 A^B=C 로 나타낼 수 있죠.

 

 

 

외적을 수학적으로 구하기 위해선 이렇게 합니다.

유니티에선 이를 대신할 헬퍼함수를 사용하면 됩니다.

Vector3.Cross(VectorA, VectorB)

  

 

 

 

 

 

 

출처 - https://learn.unity.com/tutorial/begteo-suhag?uv=2019.3&projectId=625e4bf5edbc2a03c37c9827