개발성문

Unity 수학 - 사인, 코사인, 탄젠트, Degree, Radian 활용 본문

공부 좀 하자/Unity 수학(Math)

Unity 수학 - 사인, 코사인, 탄젠트, Degree, Radian 활용

개발성문 2018. 3. 28. 17:13

앞선 포스팅에서 사인, 코사인, 탄젠트와 파이, Degree, Radian에 대해 알아보았는데요.


이번에는 두가지 공부했던 것을 활용하는 내용을 다루어 보려고 합니다. 


먼저 소스를 확인 해보시죠.


 Transform tran;
    Vector3 retVector;
    
    public int speed = 1;
    private int degree = 0; 

    void Start () {
           tran = GetComponent();
    }
	
    void Update () {
          if (Input.GetKey(KeyCode.UpArrow))
          {
              degree += speed;
              float radian = degree * Mathf.PI / 180; //라디안값

             retVector.x += 3.5f * Mathf.Cos(radian);
             retVector.y += 3.5f * Mathf.Sin(radian);

              tran.position = retVector;
          }
    }

클릭 하시면 움직임을 보실 수 있어요.


위 소스에서 중요한 부분은, 


1. degree * Mathf.PI / 180


2. 3.5f * Mathf.Cos(radian)

   3.5f * Mathf.Sin(radian)


이 두가지 입니다. 


1번은 바로 전 포스팅에서 다루었던 부분으로


Degree 값을 Radian  값으로 변환하는 공식이죠.


1º = (π / 180º) rad 


2번은 Unity에서 사인, 코사인의 사용법입니다.


Mathf.Cos( radian or degree )


Mathf.Sin( radian or degree )


Mathf.Tan( radian or degree )


Mathf 는 Unity 에서 제공하는 일반적인 수학 함수의 모음입니다.


그 안에  sin, cos, tan 그 밖에 많은 수학적 함수들이 들어있죠.


매개 변수로 radian or degree 값이 들어가며,


sin, cos 은  -1 ~ 1 까지의 값을  return 해줍니다.


tan 의 경우는 반환되는 값의 범위는 설명이 없네요. 아무튼 이렇게 사용하시면 되겠습니다.



그리고 Mathf 함수에 곱해준 3.5라는 숫자는 중심 점으로부터 얼마나 떨어뜨려 놓을것인지 제가 정해놓은 것입니다.




그림을 보시면 x = cosθ, y = sinθ 이라고 되어 있는데요.


반지름을 1이라고 할 때, 


sinθ =  Opposite(높이) / Hypotenuse(빗변) => 빗변 분의 높이


빗변이 1 이기 때문에 sinθ =  Opposite(높이) 가 되겠죠.


cosθ =  Adjacent(밑변) / Hypotenuse(빗변) => 빗변 분의 밑변


이렇게 해서 그림과 같이 되겠습니다.



3.5에 sin 과 cos의 리턴값이 곱해져서 x좌표, y좌표를 가르키게 됩니다.


sin 과 cos 의 리턴값이 -1 에서 1 사이로 달라지는데, unity 의 transform position 에 값을 할당해주면


그림의 (-x, y) 와 같이 위치가 이동하게 됩니다.


그렇게 이동하면 좌표에서는 (x, y), (-x, y), (-x, -y), (x,-y) 같이 변하게 되겠죠.


이 동작이 반복되면서 원을 그리며 이동하게 되는 것입니다. 


이를 이용하면 좀더 다양한 것들을 구현할 수 있다고 하네요. 


미사일을 쏘는 것도 이것을 이용한다고 합니다. 



많이 부족하지만, 이렇게 마무리 하도록 할께요. 


추후에 수정 또는 다른 포스팅으로 업데이트 하도록 하겠습니다. 


저도 공부를 하면서 그때그때 글을 쓰는 것이기 때문에 당연히 부족하고 잘못된 정보를 올렸을 수 있습니다. 


보시는 분들 께서는 참고해 주시구요.


많은 지적과 가르침도 부탁드리겠습니다. ㅎ


Comments