我需要通过值d无限增加/减少phi角。(d可以是负数或正数)。
“无限”意味着循环变化可以发生尽可能长的时间。但为了避免溢出,有必要“丢弃”值,依赖于 sin() 和 cos() 的周期性。(0 <=> 2*pi <=> 2*n*pi)。
它如何在功能上实现?(例如双 stepAngle(双 phi,双 d))。
标准库函数只是为值 > 2*pi “做正确的事”,你不必做任何事情:
int main() {
double pi = 3.14159265359;
double x = 2.5;
cout << sin(x) << endl;
cout << sin(x + 2*pi) << endl;
cout << sin(x - 8*pi) << endl;
}
这些都将打印相同的值;试试看。
这fmod
很容易做到。
double stepAngle(double phi, double d)
{
double newPhi = phi += fmod(2*pi, d);
if(newPhi > 2*pi)
{
newPhi -= 2*pi;
}
if(newPhi < 0)
{
newPhi += 2*pi;
}
return newPhi;
一种方法是重新归一化到所需的范围:
while (d > 2*pi) d -= 2*pi;
while (d < 0) d += 2*pi;
只要d
不在 0..2*pi 范围之外,这将是有效的。