Game Development, 게임개발/게임 수학,물리

게임 물리 - 라디안의 이용

게임이 더 좋아 2021. 8. 19. 17:57
반응형
728x170

 

이전의 글에서는

각 축 이동만 배웠다.

 

미적분학에서 직교좌표계를 배운 다음 바로 배우는 것

극좌표계

 

 

 

우리는 직교좌표계보다 극좌표계를 많이 쓸 수 도 있다.

고등학교에서 한정되어 있던 생각이 대학생이 되어 넓혀지는 느낌이다.

 

아무튼

 

우리는 이전 글에서 축으로의 이동만 배웠다.

하지만 30도, 60도 이동을 하고 싶다면 어떻게 해야할까???

키보드가 아니라 조이스틱의 입력을 받는 것은 어떨까?

 

**사실 직교좌표계도 언제든지 극좌표계로 변환이 가능하기 때문에

둘이 같다고 봐도 무방하다. 그냥 표현의 차이다.

 


 

원하는 방향이 축으로 설명하기 힘들다면..?

각으로 표현한다. 

이게 수학이다. 수학은 표현을 다르게 해서 더 쉽게 만든다.

 

수학이란 자신의 아는 것을 전달하기 위한 수단이며

수학을 잘한다는 것은 남을 잘 이해시킨다는 것을 의미한다.

 

다시 본론으로 돌아와서 

30도 이동은 어떻게 할까??

 

생각해보자 sin 30을

1/2의 결과가 나온다.

즉, 밑변과 높이의 비가 1:2이다.

수평이동 2만큼 하고 수직이동 1만큼 한다면

각각의 이동은 축 이동이었지만

처음 변위와 비교해본다면 30도 방향으로의 이동이다.

 

이해가 가는가??

 

우리가 45도 이동을 1:1로 했다면 

30도 이동은 1:2로 가능하게 하는 것이다.

원하는 각도를 계속 계산해서 밑변과 삼각형의 비를 구하는 것이 너무 어려워 

대체할 수 있는 수단이 있었으니

 

그것이 호도법, 라디안이다.

**호도법이 없었다면 삼각함수의 미분,적분은 나오지 않았을 것이다.

 

호도법은 단위원에서 각도와 호의 길이의 비를 나타내는 것을 의미한다.

**사실 이해하기 쉽게하기 위해서 단위원이라 한거지 일반적인 설명은 각과 호의 길이의 관계다.

 

 

Pi 라면 180도에서의 호의 길이를 뜻한다.

 

결국 삼각함수라는 것을 이용하게 된다.

 

 


 

우선 

0<= theta <= 2 * Pi 의 범위를 가지고

이 세타를 이용하여 방향을 결정할 수 있다.

 

위에서  직교좌표계와 극좌표계의 변환을 말한 것은

 

(2,1)인 경우 (0,0)을 기준으로

r = root 5, theta = Pi / 6 으로 바꿀 수 있어서 그렇다.

해당 r을 1로 만들어서 정규화를 해도 되고 해당 크기 그대로 이동 속력으로 적용해도 된다.

 

** 다만 파이가 무한소수임을 알고 정확도를 얼만큼 해야하는 가는 프로그래머에게 달렸겠다.

 

 

코드를 짜본다면

대충 이런 식으로 짜면 된다.

 

뭐 내가 어떠한 특정 언어나 틀에 맞춰버리면 그냥 이해없이 베끼게 되는 것을 경계했다.

 

# 마우스로 클릭한 곳으로 간다.

Position MouseInput(void){

~~~
}

#마우스의 위치를 x,y 로 받고
#극좌표계 변환을 통해 라디안을 구하면 될 것이다.

double r = sqrt(x^2 + y^2);
double theta = arcos(x/r);

#뭐 이런식으로 theta를 구해서

character.x += sin(theta) * vel;
character.y += cos(theta) * vel;

 

 

 

 

 

728x90
반응형
그리드형