즐거운 게임 수학

두 점의 거리 계산하기

S.H.S 2023. 6. 3. 01:47

수학은 게임에서 정말 많이 사용된다.

 

2D 게임이든, 3D게임이든 어떤 가상 공간을 표현하려면 좌표계가 있어야 하고 이 좌표계에 따라 위치와 방향을 표현할 수 있다.

 

 

두 점 사이의 거리를 계산할 때는 어떻게 해야 할까?

 

// 1차원 좌표계

function distance(x1: number, x2: number) {
  return Math.abs(x1 - x2);
}

1차원 좌표계에서는 꽤 간단하다.

내 위치에서 상대 위치를 뺀 값을 절대값으로 반환하면 나와 상대방의 거리를 계산할 수 있다.

절대값이란?
수의 크기를 나타내는 개념으로 수의 차이를 계산하거나, 거리를 계산하거나, 함수의 정의를 양수로 제한하는 등 다양하게 많이 사용되는 개념이다.

예시를 들면,
X가 0인 수평 좌표계에서 5의 위치는 X로부터 5만큼 떨어져있다고 볼 수 있고 -5의 위치 또한 X로부터 5만큼 떨어져있다고 볼 수 있다. 즉, -5든 5든 X로부터의 거리는 5이다. 이를 절대값이라고 말할 수 있다. 이렇듯 수치를 비교할 때 많이 사용된다. 절대값 개념이 어렵다면 음수를 양수로 변환한다고 생각하면 쉽다.

 

// 2차원 좌표계 이상

function distance(x1: number, y1: number, x2: number, y2: number) {
  return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2);
}

2차원 좌표계부터 피타고라스 정리를 사용하여 구할 수 있다.

이 상태에서 빗변을 구하면 나와 상대방의 거리를 계산할 수 있다.

피타고라스 정리란?
직각 삼각형에서 각 변의 길이에 관련된 중요한 관계를 정리해둔 수학적 원리이다. 이를 통해 밑변과 높이를 알고 있다면 빗변을 구할 수 있으며 빗변과 밑변을 알고 있다면 높이를 구할 수도 있는 등 다른 변의 길이를 구할 수도 있다.

예시를 들면,
직각삼각형을 2차원 좌표계에 빗대어 보면 X좌표를 밑변, Y좌표를 높이로 대변할 수 있으며 이 상태에서 빗변을 구한다면 거리를 구하는 것이나 다름없다.

 

// 3차원 좌표계

function distance(x1: number, y1: number, x2: number, y2: number, z1: number, z2: number) {
  return Math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2 + (z2 - z1) ** 2);
}

3차원 좌표계는 2차원 좌표계와 마찬가지로 피타고라스 정리를 이용하면 된다.

3차원에서도 직각삼각형의 형태를 가지고 있기 때문에 직각삼각형에 대한 일반적인 원리를 다루는 피타고라스 정리를 사용할 수 있다.