C# :: For Beginners

[C#] 두 개의 좌표점 사이의 절대 각도를 측정하는 atan2

두 개의 좌표점 사이의 절대 각도를 측정하는 atan2

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

 

아크탄젠트란 무엇일까요?

아크탄젠트 (arctangent)역탄젠트라고도 불리우는, 탄젠트의 역함수입니다. 아크탄젠트 (arctangent) 를 이용하면 위에 첨부된 이미지에서의 θ 각도를 도출해낼 수 있습니다.

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

 

atan 과 atan2 의 차이점

atan 과 atan2 함수는 두 점 사이에 위치한 θ 변수의 절대각을 구할 때 사용된다는 측면에서 공통점을 가지고 있는데요, 두 가지의 다른 함수로 제공되는 목적에 대해 살펴보도록 하겠습니다.

 

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

 

atan2 를 사용하는 까닭

 

radian : 2.35619449019234
degree : 135

radian : 0.785398163397448
degree : 45
radian : -2.35619449019234
degree : -135
radian : -0.785398163397448
degree : -45

 

4 분면으로 이루어져 있고, + / – 극이 존재하는 데카르트 좌표계 (Cartesian Co-ordinate System) 에서 활용하면 실용적입니다.

atan2 함수는 좌표점 A 로 부터 좌표점 B 가 존재하는 상대적인 위치를 변수 (Parameter) 로 받아 계산되므로 x 값이나 y 값이 좌표계의 위치값으로서, 음수 값을 허용하기에 사용의 측면에서 유연합니다.

atan2 는 atan 함수와는 다르게, 사용되는 변수에 음수를 허용하므로 atan 함수와 비교했을 때 보다 효과적으로 사용할 수 있습니다.

 

소스 코드

아래 예시는 C# 언어로 작성되었습니다.

 

 

            double aX = Double.Parse(txtaX.Text);
            double aY = Double.Parse(txtaY.Text);
            double bX = Double.Parse(txtbX.Text);
            double bY = Double.Parse(txtbY.Text);

            double x = bX - aX;
            double y = bY - aY;

            double radian = Math.Atan2(y, x);
            double degree = radian * 180 / Math.PI;

            MessageBox.Show("radian : " + radian + Environment.NewLine + "degree : " + degree, "atan2 계산 결과");

 

실행 결과

좌표점 b 가 좌표점 a 보다 {3, 3} 만큼 위치한 경우

————————— atan2 계산 결과 —————————
radian : 0.785398163397448
degree : 45
————————— OK —————————


좌표점 b 가 좌표점 a 보다 {-3, 3} 만큼 위치한 경우


————————— atan2 계산 결과 —————————
radian : 2.35619449019234
degree : 135
————————— OK —————————

 

고맙습니다.

 

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: