영상처리 할때 쓰일때가 많아서 이렇게 올려둡니다.
일반적으로는 중학교때 배운 수학을 떠올려보면..
tan Θ = dy / dx
라고 배웠지요. 결론,
Θ = atan( dy / dx )
이라는 선생님의 말씀. dx, dy 구해서 atan(dy/dx) 하면 나오지만
atan() 함수를 쓰지 않고 좌표 값들의 연산만으로도 각도를 구해낼 수 있더군요.
C 에서 제공해주는 atan() 함수가 테이블표에서 직접 읽어오는게 아니라면
일정 연산시간이 걸릴테고, 결국 좌표값만으로 구하는게 더 빠르다는 말씀.
1. atan() 를 써서 만든 각도 구하는 함수
double angle(int x1,int y1,int x2,int y2)
{
double dx,dy,da;
dx=x2-x1;
dy=y2-y1;
if (!dx) dx=1e-6;
da=atan(dy/dx);
if (dx<0) da+=PI;
da= da*180/PI;
return da;
}
2. atan() 를 쓰지 않고 좌표 값만으로 각도 구하는 함수
float theta(int x1, int y1, int x2, int y2)
{
int dx, dy, ax, ay;
float t;
dx = x2 - x1;
ax = abs(dx);
dy = y2 - y1;
ay = abs(dy);
t = (ax + ay == 0)?0:(float)dy/(ax+ay);
if( dx < 0 )
t = 2 - t;
else if( dy < 0 )
t = 4 + t;
return t * 90.0;
}
출처 : http://cafe.naver.com/opencv.cafe