当我想绘制通过三点的线条,并在第二个点上做圆角时。然后会出现问题,如果两条线之间的角度小于90度,则会通过点1和点2在线上追加一些额外的线。如果角度大于等于90度,那就没问题。在html5画布上出乎意料的结果arcTo
您可以在小提琴看到:http://jsfiddle.net/qiu8310/8cFZG/2/
这里是JavaScript代码和结果:
"use strict"; 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(); }
您在距离P2的'len'距离处正确地停止了您的行,但是您试图直接将'arcTo'绘制到'p2.x,p2.y'。你应该改为 – Phrogz 2012-04-07 14:06:18