-1

我需要通过值d无限增加/减少phi角。d可以是负数或正数)。

“无限”意味着循环变化可以发生尽可能长的时间。但为了避免溢出,有必要“丢弃”值,依赖于 sin() 和 cos() 的周期性。(0 <=> 2*pi <=> 2*n*pi)。

它如何在功能上实现?(例如双 stepAngle(双 phi,双 d))。

4

3 回答 3

2

标准库函数只是为值 > 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;
}

这些都将打印相同的值;试试看。

于 2013-02-11T17:02:02.830 回答
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;
于 2013-02-11T17:07:08.907 回答
1

一种方法是重新归一化到所需的范围:

while (d > 2*pi) d -= 2*pi;
while (d < 0) d += 2*pi;

只要d不在 0..2*pi 范围之外,这将是有效的。

于 2013-02-11T16:51:51.717 回答