atan2反正切快速近似算法

float       atan2( float y, float x );

Computes the arc tangent of y/x using the signs of arguments to determine the correct quadrant.
结果的取值范围是[-PI, PI]

快速近似版本:

float ax = std::abs(dx), ay = std::abs(dy);
float a = std::min(ax, ay)/(std::max(ax, ay)+(float)DBL_EPSILON);
float s = a*a;
float r = ((-0.0464964749 * s + 0.15931422) * s - 0.327622764) * s * a + a;
if(ay > ax) r = 1.57079637 - r;
if(dx < 0) r = 3.14159274f - r;
if(dy<0) r = -r;
//如果这一行改为:if(dy < 0) r = 6.28318548f - r;
//结果的取值范围变为[0, 2*PI]

快速版本的算法和OpenCV中的方法一致

参考资料

  1. http://math.stackexchange.com/questions/1098487/atan2-faster-approximation

你可能感兴趣的:(数学)