我想画两条穿过三个点的线,并在第二点做一个圆角。在这里我有一个问题。如果两条线之间的夹角小于 90 度,则会在通过点 1 和点 2 的线上附加一条额外的线。如果角度大于或等于 90 度,则可以。
您可以在下面的代码段中看到这一点:
function Point(x, y){
this.x = x ? x : 0;
this.y = y ? y : 0;
}
var ctx,
canvas = document.getElementById('canvas');
canvas.width = 600;
canvas.height = 600;
ctx = canvas.getContext('2d');
ctx.lineWidth = 2;
draw(ctx, new Point(50,10), new Point(20, 300), new Point(100, 320) );
draw(ctx, new Point(200,10), new Point(200, 300), new Point(300, 20) );
function draw(ctx, p1, p2, p3){
var k1,k2, k, len, r=8;
k1 = Math.atan2(p2.y - p1.y, p2.x - p1.x);
k2 = Math.atan2(p3.y - p2.y, p3.x - p2.x);
k = (k1-k2)/2;
len = Math.abs(r/Math.tan(k)); // the distance between point of tangency and p2
ctx.moveTo(p1.x, p1.y);
ctx.lineTo(p2.x - len*Math.cos(k1), p2.y - len*Math.sin(k1) ); // lineTo the point of tangency
ctx.arcTo(p2.x, p2.y, p2.x + len*Math.cos(k2), p2.y + len*Math.sin(k2), r ); // then arc
ctx.lineTo(p3.x, p3.y); // till p3
ctx.stroke();
}
<canvas id='canvas' style="width:600px; height:600px; margin: 0 auto; background-color: yellow; "; />