角度的“无限”增加/减少

时间:2013-02-11 16:49:35

标签: c++ geometry

我需要无限增加/减少 phi 角度值 d 。 ( d 可以是消极或积极的。)

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

如何在功能中实现? (例如double stepAngle(double phi,double d))。

3 个答案:

答案 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的范围之外,那将是有效的。