在0和360度的边缘(或弧度-PI和PI)

时间:2017-07-28 18:31:59

标签: algorithm degrees radians

我在处理圆形排斥方面有一点演示。 除了物体及其排斥器(鼠标)的那一刻,它的效果很好 度数接近360 | 0区(或PI | -PI)。

Azure

或YouTube

这是因为这种转变的100%,但我不知道如何克服它。已经玩过modulo。

2 个答案:

答案 0 :(得分:1)

起初 - 我希望你不要在比较中混合弧度和度数。

您的计算

 float angleDist = abs(angle - repulsor.angle);
   and later comparison with 
 inc=45 degrees
例如,如果一个角度为359而另一个角度为1,则

工作错误。

您可以构建一些if条件或使用表达式:

angleDist = arrcos(cos(angle - repulsor.angle)); 

正确处理所有案件

答案 1 :(得分:0)

它的内部对象,Processing / JAVA,大概是0.0,0.0中心

      float repulsorAngle = atan2(repulsor.y, repulsor.x);
      if(rad < 0.0) { angle = map(rad, -PI, 0, 180, 360); }
      else { angle = map(rad, 0, PI, 0, 180);  }

      float angleDist = abs(angle - repulsor.angle);
      float dist = PVector.dist(new PVector(x, y), new PVector(repulsor.x, repulsor.y));

      float inc = 45.0;

      if (angleDist < inc) {
      float sine = sin(map(angleDist, inc, 0, 0, PI / 2)) * 50.0;

      println(sine);

      x = cos(radians(angle)) * (r + sine * dir);
      y = sin(radians(angle)) * (r + sine * dir);

      } else {

      x = cos(radians(angle)) * (r);
      y = sin(radians(angle)) * (r);

      }