[LayaAir 2.0]关于Graphics中drawPath方法使用arcTo的bug

看引擎的源码中,有用到arcTo方法,查阅CanvasRenderingContext2d API大概意思是利用上下问的一个点,加上两个控制点,形成一个夹角,然后找到刚好相切这两条线的半径微为r的圆的一部分圆弧,绘制出来
 
尝试了一下,这个参数
let sp = new Laya.Sprite();
Laya.stage.addChild(sp);
 
var dx = 0;
var dy = 0;
var x0 = 100 + dx;
var y0 = 100 + dy;
var x1 = x0 + 100;
var y1 = y0;
var x2 = x0;
var y2 = y0 + 100;
 
var r = 50;
let path = [
["moveTo", x0, y0],
["arcTo", x1, y1, x2, y2, r],
["lineTo", x2, y2]
];
sp.graphics.drawPath(0, 0, path, undefined, { "strokeStyle": "#ffffff", "lineWidth": "2" });
绘制出来的圆弧和 CanvasRenderingContext2D绘制出来的圆弧并不一样,而且圆弧也不相切
 
虽然官网示例用了这个方法,不过在两条线成直角的情况下,是没有这个问题的,但是一旦不是直角,就有点不太对了
 
这个是CanvasApi的
可以看出同样的输入会有不同的结果,Cavnas Api是相切的
 
-----------
查阅源码中 Context#arcTo方法中

len1 = r / Math.tan(halfAng);
 
这一行有点不太理解,大致意思是获取到角平分线上的半角 alpha
获取tan对边长度,感觉应该是 r / Math.tan(alpha)?
 
希望有人能够解答下我的困惑,感谢~
 
 
WX20201023-145052.png WX20201023-145113.png
已邀请:

kylin9718

赞同来自:

1) 经确认,这个确实是我们的bug
2.1) 实现方案很复杂,我们已经排进计划了,但短期内可能实现不了
2.2) 目前可以先使用图片代替,等到我们修改了这个bug后再使用arcTo
3) 正确的效果图如下
微信图片_20201116115655.png

要回复问题请先

商务合作
商务合作