2008. 10. 3. 21:09

[펌] 각도 구하는 함수


영상처리 할때 쓰일때가 많아서 이렇게 올려둡니다.

일반적으로는 중학교때 배운 수학을 떠올려보면..

 

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