【问题标题】:On the edge of 0 and 360 degrees (or radians -PI and PI)在 0 和 360 度的边缘(或弧度 -PI 和 PI)
【发布时间】:2018-01-04 22:04:39
【问题描述】:

我在循环斥力的处理中有一个小演示。 除了物体及其排斥器(鼠标)的那一刻外,它的效果很好 度数接近 360 | 0 区域(或 PI | -PI)。

或 YouTube video

这是 100% 的转变,但我不知道如何克服它。已经玩过模数。

【问题讨论】:

标签: algorithm degrees radians


【解决方案1】:

它在对象内部,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);

      }

【讨论】:

    【解决方案2】:

    首先 - 我希望您不要在比较中混合弧度和度数。

    你的计算

     float angleDist = abs(angle - repulsor.angle);
       and later comparison with 
     inc=45 degrees
    

    例如,如果一个角度是359 而另一个角度是1,则会出错。

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

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

    正确处理所有情况

    【讨论】:

      猜你喜欢
      • 2018-04-29
      • 2022-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 2019-09-08
      相关资源
      最近更新 更多