首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >two.js中的圆弧扫描方向

two.js中的圆弧扫描方向
EN

Stack Overflow用户
提问于 2020-03-08 21:50:31
回答 2查看 59关注 0票数 0

two.js库的功能如下;

代码语言:javascript
复制
makeArcSegment two.makeArcSegment(ox, oy, ir, or, sa, ea, res);

我计算我的参数如下;

代码语言:javascript
复制
var prevPt = points[i - 1];

var dxNext = nextPt.x - pt.x;
var dyNext = nextPt.y - pt.y;
var angleNext = Math.atan2(dyNext, dxNext);

var dxPrev = prevPt.x - pt.x;
var dyPrev = prevPt.y - pt.y;
var anglePrev = Math.atan2(dyPrev, dxPrev);

var innerRadius = 0;
var outerRadius = 20;

var arc = two.makeArcSegment(pt.x, pt.y, innerRadius, outerRadius, anglePrev, angleNext)

我的输出有点出乎意料。

在第一个节点(在长度为225.46的直线之后),扫描方向是逆时针方向。在第二个节点(在142.35之后),扫描方向是clockwise.How,我是否强制它总是逆时针?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2020-03-10 09:39:41

根据this if you make the arc.endAngle less than the arc.startAngle then it should go in the opposite direction.的说法。

因此,您可以尝试在min(prev,next)max(prev,next)之间进行绘制作为变通方法。

还要使所有角度都为正(将2*Pi加到负角度上)。

看起来像是库的严重缺陷。

票数 0
EN

Stack Overflow用户

发布于 2020-03-10 15:24:57

这就是我找到的变通方法。

代码语言:javascript
复制
      if (anglePrev < 0.0)
      {
          anglePrev += Math.PI * 2.0;
      }
      if (angleNext < 0.0)
      {
          angleNext += Math.PI * 2.0;
      }
      if (angleNext > anglePrev)
      {
          anglePrev += Math.PI * 2.0;
      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60588164

复制
相关文章

相似问题

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