내 캐릭터 기준 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)) {
...
}
'즐거운 게임 수학' 카테고리의 다른 글
특정 좌표가 원 안에 있을 때 감지하기 (0) | 2023.06.05 |
---|---|
선형 보간법(linear interpolation) (0) | 2023.06.05 |
각도의 단위, 라디안(radian)과 디그리(degree) (0) | 2023.06.05 |
두 점의 각도 구하기 (0) | 2023.06.03 |
두 점의 거리 계산하기 (0) | 2023.06.03 |