라벨이 atan2인 게시물 표시

[C/C++, MFC] 이미지 상 두 점의 각도 구하기

이미지
 두 점간의 각도를 구하는 방법을 검색하면 거의 대부분의 글에서 atan2 함수를 사용하여 그 각도를 구하라고 한다. #include <cmath> BOOL CalculateAngle(CPoint pt1, CPoint pt2, double& dAngle) {     BOOL bResult = FALSE;     if (pt1 != pt2)     {         dAngle = atan2(pt2.y - pt1.y, pt2.x - pt1.x);         dAngle *= (180.0 / M_PI);         bResult = TRUE;     }     return bResult; } 이런 글을 보고 만든 함수가 위의 함수이다. 같은 포인트가 아닐 시 atan2 함수를 사용하여 각도를 구하고 그 결과값이 라디안 값이니 degree 값으로 바꾸는 함수이다. 이 함수를 사용해서 이미지 상 두 점의 각도를 구하니 계속 부호가 반대로 나오는 것이었다. 다음과 같이 이미지 상에 두 점 A, B가 있다고 하자 그럼 보통 우리가 생각하는 x,y 2차원 좌표상엔 B 점의 y 값이 높다. 원점(영점)이 좌하단에 위치하기 때문이다. 하지만 이미지를 다룰땐 이와 반대로 좌상단에 원점(영점)이 존재한다. 따라서 위와 같은 함수 식으론 계속 부호가 반대로 나오게 되는 것이다. A 좌표를 (100, 70) 이라 한다면 B 좌표는 (200, 40) 정도가 되어  atan2(-30, 100) 이라는 값이 들어가 마이너스 부호가 나오는 것이었다. 이미지의 특징을 생각 못한 것이었다. 따라서 함수를 다시 만들자면  #include <cmath> BOOL CalculateAngle(CPoint pt1, CPoint pt2, double& dAngle) {     BOOL bResult = FALSE;     if (pt1 != pt2)     {         dAngle = atan2((pt2.y - pt1.y) * -1, pt2.x -