gpt4 book ai didi

math - 如果没有 ARCTAN 2(n,m) 的便利,我应该如何处理 ARCTAN(并防止被零除)?

转载 作者:行者123 更新时间:2023-12-03 17:40:33 25 4
gpt4 key购买 nike

我尝试从点 (n,m) 确定角度至 (0,0) .无 arctan2可用,我遇到了 m 的问题可以是 0,这导致可能被零除。

解决这个问题的优雅、正确的解决方案是什么?

最佳答案

不要使用传统的象限,使用由线 y = +/- x 定义的分支点,并使用类似 CORDIC 的算法的第一个两步(例如,以已知角度旋转坐标并跟踪你有多少已经旋转):

function atan2_substitute(x,y)
{
double angle = 0;
if (x < y)
{ angle = M_PI; x = -x; y = -y; }
// this guarantees that the angle is between -135 and +45 degrees

if (x < -y)
{
angle -= M_PI/2; tmp = x; x = -y; y = tmp;
}
// this guarantees that the angle is between -45 and +45

angle += atan(y/x);

if (angle > M_PI)
angle -= 2*M_PI;
// fails at 0,0; otherwise is accurate over the entire plane
}

这样做的原因是 atan() 对于 -1 和 +1 之间的比率 y/x 可能比对于大于 1 的比率更准确。(尽管一个好的 atan() 算法会认识到这一点并且取倒数)

关于math - 如果没有 ARCTAN 2(n,m) 的便利,我应该如何处理 ARCTAN(并防止被零除)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/639283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com