首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在0度和360度的边上(或弧度-PI和PI)

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

Stack Overflow用户
提问于 2017-07-29 02:31:59
回答 2查看 339关注 0票数 0

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

或YouTube video

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-07-29 03:09:17

首先,我希望你在比较时不要把弧度和度数混在一起。

你的计算

代码语言:javascript
运行
复制
 float angleDist = abs(angle - repulsor.angle);
   and later comparison with 
 inc=45 degrees

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

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

代码语言:javascript
运行
复制
angleDist = arrcos(cos(angle - repulsor.angle)); 

正确对待所有情况

票数 1
EN

Stack Overflow用户

发布于 2017-07-29 02:44:34

它在对象中,Processing / JAVA,大约0.0,0.0中心

代码语言:javascript
运行
复制
      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);

      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45380210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档