“参考角”的定义:
区间 [0, 2π) 中的角度 ϑ r对应于该区间外的角度 ϑ,满足条件
sin(ϑ) = sin(ϑ r ) 和 cos(ϑ) = cos(ϑ r )。
例如(为简单起见以度数思考):
参考(390 o ) = 30 o
参考(360 o ) = 0 o
参考(-40 o ) = 320 o
参考(540 o ) = 180 o
查找参考角度的示例代码是:
double FindReferenceAngle(double Angle)
{
const double TWOPI = 2.0 * 3.1415926535897932384626433832795;
while(true)
{
if (Angle >= TWOPI)
{
Angle -= TWOPI;
}
else if (Angle < 0)
{
Angle += TWOPI;
}
else
{
return Angle;
}
}
}
但是,我不认为这段代码是最优的。例如,如果用户使用非常大的角度值(例如;FindReferenceAngle(1e10)
)调用它,则在 while 循环中将花费相当长的时间。
有没有其他更有效的算法来找到参考角度,比如内置的标准 C++ 库例程?