게임수학

[게임수학]삼각함수

자가라o 2021. 7. 24. 23:01

 

게임을 만들다 보면 이런저런 이유로 삼각함수가 필요할때가 생긴다.

각도가 필요하든.. 벡터가 필요하든..

 


 

1) 삼각함수 Sin, Cos, Tan 기본정의

$$sinθ =\frac{c}{a}$$

$$cosθ =\frac{b}{a}$$

$$tanθ =\frac{c}{b}$$

 

 

 

2) 라디안r

반지름이 r인 원에서 길이가 r인 호의 중심각의 크기를 1라디안이라고 하며

반지름의 길이와 상관없이 (180/π)º로 일정하다.

 

wikipedia

 

$$1라디안 = \frac{180º}{π}$$

$$1º = \frac{π}{180}라디안$$

$$π라디안 = 180º$$

 

 

1라디안은 약 57도이며 유니티에서 Mathf.Rad2Deg로 정확한 값을 사용할 수 있다.

 

 

3) 삼각함수의 역수와 역함수

삼각함수에는 sin, cos, tan와 그의 역수, 역함수가 존재한다.

역수란 sin, cos, tan의 동일한 정의역에 대해 치역의 역수를 대응시키는 함수csc(코시컨트), sec(시컨트), cot(코탄젠트)로 표현한다.

 

$$csc = \frac{1}{sin}$$

$$sec = \frac{1}{cos}$$

$$cot = \frac{1}{tan}$$

 

역함수란 1대1 대응이 되는 함수에서 정의역과 치역이 뒤바뀐 함수이다.

하지만 삼각함수는 사실 1대1 대응 함수가 아니기 때문에 1대1 대응이 가능한 부분을 제한하여 사용한다.

제한한다고 했지만 삼각함수는 반복적이기 때문에 크게 상관없을 듯하다.

역함수arc-sin(아크사인), arc-cos(아크코사인), arc-tan(아크탄젠트)로 표현한다.

 

$$arcsin = sin^{-1}$$

$$arccos = cos^{-1}$$

$$arctan = tan^{-1}$$

 


 

In Unity_

 

1) 벡터 각 구하기

서로의 위치만 알고 θ를 구해야 할때

 

 

  1. 타겟 position에서 θ의 position을 빼서 벡터를 구한다.
  2. 이 벡터에는 x, y의 정보가 들어있고 거리를 구하고자 한다면 피타고라스 정리로 구할 수 있다.
  3. 해당 값과 Mathf에 구현되어 있는 Asin, Acos, Atan의 아크함수를 사용해 θ를 구한다.
  4. 여기서 θ는 라디안값이므로 Mathf.Rad2Deg를 곱해서 정확한 각도를 얻는다.

 

Mathf의 역함수 중 Asin, Acos는 사용시 거리를 따로 계산해야하기 때문에

그냥 x, y만 사용하는 Atan를 사용하는 편이 좋다. 매개변수는 tan와 똑같이 사용한다.

 

또 Atan말고도 Atan2라는 같은 용도의 함수가 존재 하는데

Atan의 경우 y/x를 계산할때 x가 0인경우 divide by zero 오류가 날수도 있지만

Atan2는 매개변수로 y, x값 두가지를 따로 받기 때문에 위험이 적다.

 


 

관련해 사용할 때마다 추가 예정