이번 글에서는 특정한 좌표에서 각도, 거리를 입력했을 때 좌표를 구하는 방법을 알아보겠습니다.
해당 방법을 알기 위해서 삼각함수(sin, cos)를 사용해야하는데 이 함수들은 매개변수로 라디안을 사용합니다.
보통 일반적으로 사용하는 0도, 90도, 180도 등등은 60분법(Degree)이라 합니다.
그리고 라디안은 호의 길이를 이용한 호도법(Radian)을 사용하는데, 예를 들어 반지름이 r인 원에서, 호 AB가 길이가 r일 경우, 그 각을 a라 해봅시다.
![](https://3001ssw.com/wp-content/uploads/2023/08/Cap-2020-08-20-15-16-49-156-min.png)
이 부채꼴 호의 중심각인 a의 경우 반지름의 길이에 상관없이 항상 일정한 값을 가지게 되는데 이것을 1radian이라고 합니다.
아무튼 삼각함수는 이 radian을 사용한다고 생각하시면 됩니다.
이 60분법과 호도법의 변환하는 방식을 전처리기 함수로 처리하면 아래와 같습니다.
#define PI 3.141592
#define DEGREE_TO_RADIAN(degree) ((PI/180)*(degree)) // 60분법 -> 호도법
#define RADIAN_TO_DEGREE(radian) ((180/PI)*(radian)) // 호도법 -> 60분법
cosine은 삼각함수에서 밑변/빗변이므로 아래 그림과 같이 새로운 x좌표를 구할 수 있습니다.
![](https://3001ssw.com/wp-content/uploads/2023/08/Cap-2020-08-20-15-16-49-157-min.png)
sine은 삼각함수에서 높이/빗변이므로 아래 그림과 같이 새로운 y좌표를 구할 수 있습니다.
![](https://3001ssw.com/wp-content/uploads/2023/08/Cap-2020-08-20-15-16-49-158-min.png)
위 그림은 (0, 0)에서 새로운 좌표를 구하는 그림입니다. 만약 (x, y)에서 구한다고 하면 아래와 그림과 같이 새로운 좌표를 구할 수 있습니다.
![](https://3001ssw.com/wp-content/uploads/2023/08/Cap-2020-08-20-15-16-49-159-min.png)
위 내용을 코드로 옮기면 아래와 같습니다.
#include <math.h>
#define PI 3.141592
#define DEGREE_TO_RADIAN(degree) ((PI/180)*(degree))
#define RADIAN_TO_DEGREE(radian) ((180/PI)*(radian))
// ...
int iX = 10, iY = 20;
int iR = 30;
double dRadian = DEGREE_TO_RADIAN(m_iDegree);
int iNewX = iX + iR * cos( dRadian );
int iNewY = iY + iR * sin( dRadian );
위 식을 응용하면 아래와 같이 프로그램을 만들 수 있습니다.
![](https://3001ssw.com/wp-content/uploads/2023/08/녹화_2020_08_20_16_25_10_101-min.gif)
추가적으로 MFC 상에서 각도의 시작은 아래와 같이 x축을 기준으로 아래 방향으로 진행 됩니다.
![](https://3001ssw.com/wp-content/uploads/2023/08/Cap-2020-08-20-15-16-49-160-min.png)