즐거운 게임 수학

특정 각도에서 일정 거리의 좌표 구하기

S.H.S 2023. 6. 5. 03:36

내 캐릭터 기준 30도, 50m에 있는 적을 감지하고 싶을 때는 어떻게 구현할 수 있을까?

 

 

바로 삼각함수중 코사인 함수와 사인 함수를 이용하면 쉽게 구할 수 있다.

코사인(cos)
코사인은 삼각형에서 밑변의 길이를 빗변의 길이로 나눈 비율로 정의되며 각도 θ의 코사인을 나타내는 수식은 다음과 같다.
cos(θ) = adjacent(각도 θ의 인접변의 길이) / hypotenuse(θ를 대변하는 삼각형의 빗변의 길이)

사인(sin)
각도의 사인은 삼각형에서 대변의 길이를 빗변의 길이로 나눈 비율로 정의되며 각도 θ의 사인을 나타내는 수식은 다음과 같다.
sin(θ) = opposite(θ의 대변의 길이) / hypotenuse(θ를 대변하는 삼각형의 빗변의 길이)

 

function lengthDirX(len: number, dir: number) {
  return len * Math.cos((dir * Math.PI) / 180.0);
}

function lengthDirY(len: number, dir: number) {
  return len * Math.sin((dir * Math.PI) / 180.0);
}

 

위의 문제에서는 30도, 50m 거리에 있는 적을 감지하고자 함으로 아래처럼 사용하면 구현할 수 있다.

const X = lengthDirX(50, 30);
const Y = lengthDirY(50, 30);

if (isPlaceEnemy(X, Y)) {
  ...
}