본문 바로가기
Programming/프로그래밍 이론

[프로그래밍 이론] 두 점 사이의 절대각도를 재는 atan2

by SpiralMoon 2020. 6. 3.
반응형

두 점 사이의 절대각도를 재는 atan2

프로그래밍 언어에서 역탄젠트를 계산하는 함수 atan2의 특징을 알아보자

아크탄젠트란?

삼각비

아크탄젠트(arctangent)는 역탄젠트라고도 하며 탄젠트의 역함수이다. 아크탄젠트를 이용하면 위 사진에서의 θ의 각도를 구할 수 있다.

모든 프로그래밍 언어에는 아크탄젠트를 계산할 수 있도록 Math 모듈에 atan(y / x)과 atan2(y, x) 함수를 지원한다.


atan과 atan2의 차이점

atan과 atan2은 두 점 사이의 θ의 절대각을 구하는 함수인데 왜 두가지로 나뉘었을까?

 

atan은 두 점 사이의 탄젠트값을 받아 절대각을 -π/2 ~ π/2의 라디안 값으로 반환한다. (-90 ~ 90도)

 

atan2의 리턴값 범위

atan2는 두 점 사이의 상대좌표(x, y)를 받아 절대각을 -π ~ π의 라디안 값으로 반환한다. (-180 ~ 180도)


atan2을 사용하는 이유

데카르트 좌표계에서 atan2를 적용한 모습

+- 극이 표시되는 데카르트 좌표계에서 사용할 때 유용하다.

atan2 함수는 점 A로부터 점 B가 상대적으로 어느 위치에 있는지를 파라미터로 받는데, 상대적인 위치이기 때문에 파라미터 x나 y가 음수값이 될 수 있다.

하지만 atan 함수를 사용한다면 파라미터가 직선의 기울기이므로 결과값은 방향 개념이 상실된 두 점 사이의 각도가 되어버린다.


예시

아래 예시들은 자바스크립트로 작성하였다.

b가 a보다 {2, 2} 만큼 위치한 경우

const a = {
    x : 0,
    y : 0
};
const b = {
    x : 2,
    y : 2
};

const x = b.x - a.x;
const y = b.y - a.y;

const radian = Math.atan2(y, x);
const degree = radian * 180 / Math.PI // 라디안 -> 디그리 변환

console.log(radian);
console.log(degree);

 

0.7853981633974483
45

b가 a보다 {-2, -2} 만큼 위치한 경우

const a = {
    x : 0,
    y : 0
};
const b = {
    x : -2,
    y : -2
};

const x = b.x - a.x;
const y = b.y - a.y;

const radian = Math.atan2(y, x);
const degree = radian * 180 / Math.PI // 라디안 -> 디그리 변환

console.log(radian);
console.log(degree);

 

-2.356194490192345
-135

 

반응형

댓글