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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值