마우스로 찍은 점을 기준으로 야구공이 회전하는 기능을 만들 것이라고 가정 해보자. 그림은...벡터로 되어있지만 어쨌든 검은색 화살표 끝이 가리키는 방향이 유저가 찍은 좌표 x, y
라고 하겠다. 야구공은 얼마만큼 회전해야할까?
위에서 본 그림을 우리에게 익숙한 직각 삼각형으로 나타내면 사이각 θ에대해 이렇게 정리할 수 있다.
우리는 V에대해 모르기때문에, 탄젠트 식으로 θ값을 구할 것이다. 양변에 역탄젠트(Arctangent)를 취해주면 식은 θ에 대하여 정리된다.
구글에 Math.atan2를 쳐서 가장 위에나온 javascript atan2 메소드의 설명을 가져와 보았다.
The Math. atan2() method returns a numeric value between -π and π representing
the angle theta of an (x, y) point. This is the counterclockwise angle,
measured in radians, between the positive X axis, and the point (x, y)
파라미터는 y, x
두개를 받고 x, y
와 X축이 이루는 사이각 θ
를 반환해주고 있다. 야구공이 정확히 (0, 0)
지점에 있다면야 상관없겠지만 대부분의 경우는 야구공이 어딘가 다른 위치에 존재할 것이다.
X축에 대한 x, y
좌표로 변환해주기 위해 현재 공의 좌표에서 마우스 터치 좌표 만큼을 빼준 후 계산을 해줘야한다.
let dx = ball.x - mousePos.x
let dy = ball.y - mousePos.y
let radian = Math.atan2(dy, dx)
let degree = radian * 180 / Math.PI
Math.atan2(y, x)
의 반환값은 radian이므로, 필요한 경우 각도(degree)로 변환을 추가적으로 해준다.
이를 응용한 포스팅이 궁금하다면 여기로!
'프로그래밍 > 수학' 카테고리의 다른 글
프로그래밍을 위한 수학 - 뉴턴의 운동 법칙 (0) | 2022.08.30 |
---|---|
프로그래밍을 위한 수학 - 벡터 기초 (0) | 2022.08.28 |
컴퓨터가 2의 보수 표현을 사용하는 이유 (0) | 2022.02.04 |
특정 범위의 값을 퍼센트(percentage)로 변환하기 (0) | 2022.01.13 |
프로그래밍을 위한 수학 - 삼각비, 삼각함수 그래프 (0) | 2022.01.09 |