3D Graphics/Open GL

특정 벡터를 기준으로 각도 계산하기

rajent 2008. 12. 6. 16:10
728x90


float GetPointAngle(double *base, double *point)
{
 double v[3], yv[3];
 float angle;
 double len;

 v[0] = point[0] - base[0];
 v[1] = point[1] - base[1];
 v[2] = point[2] - base[2];
 
 //길이 계산.
 len = sqrt( (v[0]*v[0] + v[1]*v[1] + v[2]* v[2] ) );
 //normalize
 v[0] /= len;
 v[1] /= len;
 v[2] /= len;
 
 if (v[0] >= 0)
 {
  yv[0] = 0, yv[1] = 1, yv[0] = 0;
  angle = acos( (v[0]*yv[0] + v[1]*yv[1] + v[2]*yv[2]) );
  angle = angle/PI * 180;    
 }
 else
 {
  yv[0] = 0, yv[1] = 1, yv[0] = 0;
  angle = acos( (v[0]*yv[0] + v[1]*yv[1] + v[2]*yv[2]) );
  angle = 360-(angle/PI * 180);    
 }

 return angle;
}