20231127_atan(게임수학)

2023. 11. 27. 23:59IT/TIL

오늘의 TIL은 Unity에서 사용한 atan(아크 탄젠트)의 사용 이유와 원리이다.

 

아크 탄젠트라는 개념은 대학교 일반수학에서 배웠던 것으로 기억되는 개념으로

 

이번 Unity의 게임 개발 과정에서 활을 들고 있는 캐릭터의 조준점에 따라 활을 부드럽게 회전시키는 과정에서 사용했는데,

 

 

이를 사용하여 위의 사진과 같이 부드럽게 활을 회전시킬 수 있었다.

 

처음 강의를 들을 때에는 갑자기 등장한 아크 탄젠트가 왜 등장했는지 이해하지 못했으나,

오늘 튜터님의 강의를 통해서 명확하게 이해할 수 있었다.

 

 

우선 아크 탄젠트를 알아보면

삼각함수 탄젠트의 역함수가 아크 탄젠트인데,

함수라는 개념은 y = f(x) 인 경우, 함수 f에 x를 넣는다면 y가 나오는 장치이다.

역함수는 숫자로 따지면 역수인 개념으로,

x = f^(-1)(y)로 y를 넣었을 때 x가 나오는 함수가 f의 역함수 f^(-1)이다.

 

간단히 숫자로 생각해보면,

함수 f에 1을 넣으면 5값을 얻을 수 있다면

f(1) = 5 -> f(x) = 5x = y 로 구할 수 있다.

역함수는 y(= 5)를 넣었을 때 x(= 1)이 나와야되므로 f^(-1)(x) = (1/5)x이다.

 

 

이를 삼각함수 탄젠트로 생각해보면,

반지름이 1인 원이 2차원좌표에 있는 경우를 생각해보면,

 

위의 그림으로 표현할 수 있는데,

tan(세타)의 값은 y / x 으로 표현할 수 있다.

이 때, 우리가 알 수 있는 값은 x와 y로, 활을 부드럽게 회전시키기 위해서는 세타 값을 알아야한다.

따라서 이 세타 값을 구하기 위해서 아크 탄젠트를 쓰는 것이다.

(탄젠트 함수를 이용하면 각도로 y / x를 구할 수 있는 것이므로,

 역함수인 아크 탄젠트 함수를 이용하면 y / x를 가지고 각도를 구할 수 있는 것이다)

 

따라서 이를 Script에서 표현하면 아래와 같다.

 

우리가 구하는 각도가 rotZ인데, 이는 아크 탄젠트에 y와 x좌표를 입력하면 구할 수 있는데,

여기서 Mathf.Rad2Deg를 곱하는 이유는 Mathf.Atan2로 구해지는 값은 라디안 값이기 때문에

이를 360도로 표시하기 위해서 곱하는 것이다.

 

즉, x와 y좌표를 입력하여 각도를 구할 수 있고,

그 각도를 이용하여 손에 잡고있는 무기를 부드럽게 회전할 수 있는 것이다.

 

또, 이때 회전에 Quaternion.Euler(0, 0, rotZ)를 사용하는데,

이는 간단하게 나머지는 그대로두며, z축을 기준으로 rotZ도 회전시키는 것이다.

추후에 이 정보도 자세히 공부해서 올릴 수 있도록 할 것이다.

'IT > TIL' 카테고리의 다른 글

20231129_유니티 개인과제  (0) 2023.11.29
20231128_TextMeshPro  (0) 2023.11.28
20231124_카드뭉치(프로그래머스)  (1) 2023.11.24
20231123_2016년(프로그래머스)  (1) 2023.11.24
20231122_기록_팀 프로젝트 회고  (2) 2023.11.22