興味のある方は、私の問題を解決する2つの解決策を考え出しました。
最初のアイデアは、実際に各点をコーナーとして描き、キャンバスを使ってきれいな角度を描くことでした。デモで見ることができる。
http://jsfiddle.net/7BkyK/2/
var ctx = document.getElementById('canvas1').getContext('2d');
var points = [null, null, null];
for(var i=0; i<24; i++)
{
var width = 0.5 + i/2;
var m = 200;
var x = Math.cos(i/4) * 180;
var y = Math.sin(i/4) * 140;
points[0] = points[1];
points[1] = points[2];
points[2] = { X:x, Y:y};
if(points[0] == null)
continue;
var px0 = (points[0].X + points[1].X)/2;
var py0 = (points[0].Y + points[1].Y)/2;
var px1 = (points[1].X + points[2].X)/2;
var py1 = (points[1].Y + points[2].Y)/2;
ctx.beginPath();
ctx.lineWidth = width;
ctx.strokeStyle = "rgba(0,0,0,0.5)";
ctx.moveTo(m+px0,m+py0);
ctx.lineTo(m+points[1].X,m+points[1].Y);
ctx.lineTo(m+px1,m+py1);
ctx.stroke();
}
第はるかにきれい溶液、Shmiddtyによって示唆されるように、ベジェ曲線を使用することです。
http://jsfiddle.net/Ssrv9/1/
// 1.
// Varying line width, stroking each piece of line separately
var ctx = document.getElementById('canvas1').getContext('2d');
var points = [null, null, null, null];
for(var i=-1; i<25; i = i +1)
{
var width = 0.5 + i/2;
var m = 200;
var x = Math.cos(i/4) * 180;
var y = Math.sin(i/4) * 140;
points[0] = points[1];
points[1] = points[2];
points[2] = { X:x, Y:y};
if(points[0] == null)
continue;
var p0 = points[0];
var p1 = points[1];
var p2 = points[2];
var x0 = (p0.X + p1.X)/2;
var y0 = (p0.Y + p1.Y)/2;
var x1 = (p1.X + p2.X)/2;
var y1 = (p1.Y + p2.Y)/2;
ctx.beginPath();
ctx.lineWidth = width;
ctx.strokeStyle = "black";
ctx.moveTo(m+x0, m+y0);
ctx.quadraticCurveTo(m+p1.X, m+p1.Y, m+x1, m+y1);
ctx.stroke();
}
あなたの最良のオプションは、おそらく、代わりに 'stroke'の' bezierCurveTo'または 'quadraticCurveTo'と' fill'を使用しようとしている:これは素晴らしいソリューションであることが判明しましたそれは数学を複雑にしますが、望みの結果を得るには唯一の方法でしょう。私は、複数の省略記号を描き、各ステップをオフセット/縮小することで、同様の異なる効果を達成することができました:http://jsfiddle.net/Shmiddty/ZvuQG/3/ – Shmiddty