我需要无限增加/减少 phi 角度值 d 。 ( d 可以是消极或积极的。)
“无限”意味着循环变化可能会发生很长时间。但是为了避免溢出,必须“降低”值,依赖于sin()和cos()的周期性。 (0 <=> 2 * pi = 2 * n * pi)。
如何在功能中实现? (例如double stepAngle(double phi,double d))。
答案 0 :(得分:2)
标准库的功能只是“做正确的事”而不是值&gt; 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;
}
这些都将打印相同的值;尝试一下。
答案 1 :(得分:2)
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;
答案 2 :(得分:1)
一种方法是重新规范化到所需的范围:
while (d > 2*pi) d -= 2*pi;
while (d < 0) d += 2*pi;
只要d
不在0..2 * pi的范围之外,那将是有效的。