게임 프로그래밍에서의 삼각함수
듣다가 기절해버리긴 했지만, 삼각함수 속성 강의를 듣고는, 예전 기억이 새록새록 날랑말랑 하더라!!
다만 삼각함수의 수학적인 개념을 완벽히 익히는 건 시간 상 경제적이지 않다는 생각이 들어서,
게임 프로그래밍에서 주로 활용하게 되는 삼각함수 개념을 서치해보기로 했다!!
그 전에 기본 개념은 다지고 들어가는 걸로!!
삼각함수 활용의 기본 원리
좌표평면 상에서 (0,0) 좌표를 중심으로 둔 반지름이 1인 원이 있다고 해보자!!
이때 원의 중심에서 원주로 직선을 긋고, 그 직선과 원의 교점에서 수선의 발을 내리면
무조건 직각 삼각형이 나온다!! 그리고 이 직각 삼각형의 빗변의 길이는 반지름, 즉 1이고
삼각함수에 따라 교점의 x좌표는 cosθ, y좌표는 sinθ, 그 직선의 기울기는 tanθ가 된다!!
주의할 점으론, 단위원일 때만 바로 x좌표 y좌표가 되는 거고, 반지름이 1이 아닌 경우엔
아래 사진 처럼 x좌표는 r* sinθ, y좌표 r* cosθ로 계산해야함!!
기울기가 tanθ가 되는 이유
좌표평면에서 직선 함수의 기울기는 y를 x로 나눈 값이다!!
정말 우연의 일치로 sinθ를 cosθ로 나눈 값이 tanθ와 동일한디,
전자가 y 좌표고, 후자가 x 좌표기 때문에 기울기가 tanθ가 되는 것!!
이 원리 덕분에 게임에서 sin은 물체의 높이(=y)에 대한 연산에, cos은 가로 위치(=x)에 대한 연산에 활용할 수 있게 된다!!
세타 θ, 즉 각도가 변화함에 따라 sin, cos, tan, 즉 물체의 위치 및 이동 기울기가 변하게 되니,
캐릭터가 제자리에서 회전하거나, 대각선으로 이동하거나 하는 등의 상황에서 이 세 값들을 활용해 구현할 수 있는 것!!
예를 들어 sin은 캐릭터가 점프할 때나, 오르막길을 오를 때라든지에 활용할 수 있게되고,
cos은 캐릭터가 앞서 말한 캐릭터가 제자리에서 회전한다거나 할 때 활용할 수 있게 된다!!
또 기울기를 알 수 있게 되므로, 뭐 tan는 중력의 영향을 받는 투사체의 궤적 등에 활용할 수 있게 되는 것!!
열심히 학습 중인 자바스크립트에선 고맙게도 Math 객체의 메서드로 이 연산들을 도와준다!!
// 각도를 알면 이에 해당하는 세 가지 값을 알 수 있다!!
Math.cos(angle)
Math.sin(angle)
Math.tan(angle)
역삼각함수
얘는 반대로, sin(=높이), cos(=가로위치), tan(=기울기)를 바탕으로 각도를 알아내는 방법이다!!
역시 Math 객체에 관련된 메서드들이 있다!!
// 반대로 알아낼 수 있다!!
Math.arccos(width)
Math.arcsin(height)
Math.arctan(slope)
Math.arctan2(x,y)
기울기 값을 바로 인자로 받는 arctan()과 달리, x좌표와 y좌표를 인자로 받는다!!
기울기 정보만 있어 방향 설정에 어려움이 있는 전자와 달리,
360도 기준 정확한 방향각을 알 수 있다는 장점이 있어 게임 프로그래밍에서 특히 많이 사용되는 메서드다!!
주의사항
삼각함수와 관련된 메서드들은 연산 복잡도가 높기 때문에, 필요한 특정 값들을 미리 계산해놓고,
배열이나 객체 등에 저장해두면 좋다!! db작업할 때 쿼리를 미리 해두고 꺼내쓰는 것과 유사함!!
'TIL&WIL' 카테고리의 다른 글
250114 TIL - 꼬리재귀? (0) | 2025.01.14 |
---|---|
250110 TIL - 오늘은 짜잘한 팁 (0) | 2025.01.10 |
250109 TIL- Docker (0) | 2025.01.08 |
250106 TIL - trim() (0) | 2025.01.06 |
250103 TIL - Buffer 메서드 (1) | 2025.01.03 |