canvas上に円・円弧を描画する方法を解説

HOME
更新日:2013.12.03
HOMEJavaScript入門(HTML5編) > 円・円弧を描く

円・円弧を描く-JavaScript入門(HTML5編)

このページでは、Canvasで円と円弧を描く方法について見ていきます。 円や円弧を描く命令文では、6つの引数を取るのでちょっと面倒です。 じっくりと読んで理解なさるようにしてください。

円と円弧を描く命令文 arc()

最初に、円や円弧を書く時の命令文arc()について見ておきましょう。

context.arc( x , y , 半径 , 開始角度 , 終了角度 , 回り方 )
x…円の中心のx座標
y…円の中心のy座標
三つ目の引数は半径を指定
開始角度をラジアンで指定。0の時は右(時計の3時の位置)
終了角度をラジアンで指定。
回り方はtrueで反時計回り、falseで時計回り。

ここでラジアンという、数学の教科書に出てきそうな言葉が出てきました。 でも難しく考えないで下さい。ラジアンで表すと180°はπ(パイ)、360°は2π(2パイ)となります。

π(パイ)は3.14159…というあの有名な数値です。 これをJavaScriptで取得するのにMath.PIを使うことができました。 ですから半円を描く場合はMath.PIを、円を描く場合はMath.PI*2を終了角度に指定すればいいことになります。

円を描く

では、実際に円を描いてみたいと思います。以下のコードを書いてみてください。

<canvas id="cv" width="360" height="240"></canvas>

<script>
var ctx = document.getElementById("cv").getContext("2d");
ctx.beginPath();
ctx.arc(120, 120, 100, 0, Math.PI*2, true);
ctx.stroke();
</script>

<描画結果>canvasタグにはCSSで二重線の枠を付けています

上記コードでは、座標(120,120)を中心に、半径100ピクセルの円を描いています。 円周は2π、つまり1周ちょうどです。円弧ではないので、開始位置と回り方は特に気にする必要はないです。

円弧を描く

今度は円弧を描いてみたいと思います。 円弧を描くには、開始角度、終了角度、回り方も考えて指定する必要があります。 ただ円弧を描くのもつまらないので、120°の扇形を描く方法を考えてみましょう。

開始角度を0にすると、右側(時計で言う3時の位置)からスタートになりました。 これを2時の位置からスタートさせるには30°ずらす必要があります。 これをラジアンで表すとどうなるでしょうか? 180°がπなので、30°はその6分の1、つまり「Math.PI/6」と表せます。 ただしこのまま指定すると4時の位置になります。それで、2時の位置にするにはマイナスを付けます。

終了位置は時計の10時の位置にします。3時の位置からすると反時計回りに150°です。 これをラジアンで表すとどうなるでしょうか?30°の5倍ですから、 「-(Math.PI/6)*5」とすればよいでしょう。

ではこれらを元に、円弧+2本の直線で扇型を描いてみましょう。

<canvas id="cv2" width="360" height="240"></canvas>

<script>
var ctx2 = document.getElementById("cv2").getContext("2d");
ctx2.beginPath();
ctx2.arc(120, 120, 100, -Math.PI/6, -(Math.PI/6)*5, true);
ctx2.lineTo(120,120);
ctx2.closePath();
ctx2.stroke();
</script>

<描画結果>canvasタグにはCSSで二重線の枠を付けています

上記スクリプトでは、座標(120,120)を中心とする半径100ピクセルの円弧を、 開始位置マイナス30°、終了位置マイナス150°、反時計回りで描画しています。 その後円の中心まで線を伸ばし、closePath()で開始点までもう一本線を引いて、扇形を閉じています。


次のページでは、線のスタイルを指定する方法を見てみたいと思います。