C++,将角度加入指定范围的最快方法?

blu*_*rnd 1 c++

将变量放入给定范围的最快方法是什么?例如,确保角度"double alpha"始终在(0.0,2*Pi)内.

我自己找到了两个解决方案,其中一个解决方案速度慢得多,而另一个解决方案看起来很容易复杂.必须有更好的方式,不是吗?

//short, but very slow (so it's a no-go);
return asin(sin(alpha));

//much faster, but seems ugly (two while loops to change a variable? come on!)
while (alpha < 0.0)
{
    alpha += 2.0 * M_PI;
}
while (alpha >= 2.0 * M_PI)
{
    alpha -= 2.0 * M_PI;
}
return alpha;
Run Code Online (Sandbox Code Playgroud)

pmd*_*mdj 6

我建议你不要手动实现这个功能,而是使用fmod()函数系列:http://linux.die.net/man/3/fmodf.不过,您仍然需要自己处理负面结果:

alpha = fmod(alpha, 2.0 * M_PI);
if (alpha < 0.0)
    alpha += 2.0 * M_PI;
return alpha;
Run Code Online (Sandbox Code Playgroud)

  • @drysdam通常计算是以弧度完成的,而不是以度为单位.此外,'alpha`可能小于-2π,在这种情况下,添加2π(即一个完整的圆)将不会这样做. (2认同)