當我想繪製通過三點的線條,並在第二個點上做圓角時。然後會出現問題,如果兩條線之間的角度小於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