이전의 글에서는
각 축 이동만 배웠다.
미적분학에서 직교좌표계를 배운 다음 바로 배우는 것
극좌표계
우리는 직교좌표계보다 극좌표계를 많이 쓸 수 도 있다.
고등학교에서 한정되어 있던 생각이 대학생이 되어 넓혀지는 느낌이다.
아무튼
우리는 이전 글에서 축으로의 이동만 배웠다.
하지만 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;
'Game Development, 게임개발 > 게임 수학,물리' 카테고리의 다른 글
게임 물리 - 랜덤하게 힘을 적용하기 (0) | 2021.08.20 |
---|---|
게임 물리 - 2가지 이상의 힘이 작용할 때 (0) | 2021.08.19 |
게임 물리 - 등속 직선 운동 (0) | 2021.08.19 |
아핀 변환, Affine Transformation [게임수학] (2) | 2021.04.02 |
아핀 공간, Affine Space - 3 [게임수학] (0) | 2021.04.01 |