본문 바로가기

게임개발/공부

공부. OZTV_수포자를 위한 게임 수학_피타고라스의 정리

https://youtu.be/d-5pcuWrUEA

 

{요약 : 피타고라스의 정리}
제시된 함수 : iTween.MoveTo(obj, dst, time)
오브젝트가 정해진 거리를 정해진 시간에 걸쳐 이동하는 함수.
(유니티 에셋스토어에 'iTween' 검색)


[이동 길이를 구하려면?]
이동 방향이 직각일 경우 x, y 좌표계를 통해 쉽게 계산할 수 있지만, 대각선일 경우 별도의 계산이 필요하다.
이때 직각삼각형을 모델로 하는 피타고라스의 정리를 이용해 대각선의 길이를 계산할 수 있다.

C * C = A * A + B * B
(C는 x, y축 기준으로 대각선이다.)

C의 시작점(0, 0)과 끝점(1, 1)을 기준으로 하는 직각선 x축 A(1, 0) 선을 긋고 그대로 y축 B(0, 1) 선을 그으면 직각삼각형이 만들어진다((0~1, 0~1)은 단순 예시다.).
위 공식대로 A, B의 길이의 제곱 값을 더하고 나서 그 결과값을 제곱근으로 나누면 C의 길이를 구할 수 있다.

이해가 어렵다면 직각삼각형(A, B, C)이 서로 모서리를 맞댄 3개의 정사각형으로 인해 생긴 것이라 생각하면 쉬워진다.
정사각형의 넓이는 한 변의 제곱과 같고, 이것은 피타고라스의 정리와 일치한다.
그렇기 때문에 정사각형 C의 넓이는 정사각형 A, B의 넓이를 더한 값과 같다.

즉, 값이 명확한 정사각형 A, B의 넓이를 더하면 정사각형 C의 넓이를 구할 수 있다.
그리고 정사각형 C의 넓이를 제곱근으로 나누면 직각삼각형의 빗변(C)의 길이가 나온다.


[일정한 속도로 이동하게 하려면?]
위 함수는 정해진 거리를 정해진 시간에 걸쳐서 이동하는 방식이다.
그래서 거리에 따라 속력이 달라진다.
그리고 이것은 공식으로 표현할 수 있다.

거리 / 시간 = 속도
예 : 거리(100) / 시간(2.5) = 속도(40/sec)
(2.5초에 걸쳐 100cm를 이동하려면 초속 40cm 속도로 이동해야 함)

기존 함수는 이동에 걸리는 시간을 일정하게 만들기 위해 속도를 거리와 시간에 맞췄다.
그러니 속도를 일정하게 만들려면 시간을 거리와 속도에 맞춰야 한다.
(이번 케이스(영상 참고)에서 거리는 이미 주어진 값이라 항상 맞춰지는 쪽이다.)

거리 / 속도 = 시간
예 : 거리(100) / 속도(40/sec) = 시간(2.5)
(초속 40cm 속도로 100cm를 이동하면 2.5초가 필요)

즉, 위 함수의 time 항목에 '거리 / 속도'를 넣으면 거리와 무관하게 일정한 속도로 이동한다.