質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

2863閲覧

CANVASのarcメソッドの引数が分からない

aaaaaaaa

総合スコア501

canvas

HTML5の<canvas>要素用のタグです。CanvasはHTML5から導入された、二次元の図形描写が可能な要素です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/09/29 10:43

編集2017/10/16 10:08

canvasで円を描画する関数arcの第三引数以外の意味がよくわからず理解できません。
ブレイクスルーjavascriptという書籍の66頁によれば、

javascript

1var canvas = document.getElementById("canvas"); 2var ctx = canvas.getContext("2d"); 3 4//ctx.arc(円の中心のX座標,円の中心のY座標,円の半径,円の始まりの角度,円の終わりの角度,描く向き); 5ctx.arc(100,100,40,0,Math.PI*2);

ちょっとややこしいのが4番目と5番目の引数です。ここで指定する角度はラジアンで指定しなければいけません。<略>

円を描く場合は、0度から360度までパスを描きたいので「0Math.PI/180」から「360Math.PI/180」まで、これを計算すると、上記のコードになります。

とあります。

まず第一引数と第二引数の説明である円の中心のX座標、Y座標というのは、ブラウザの表示領域の座標に円の中心が来るように…ということでしょうか。

次に第四引数と第五引数ですが、円の始まり角度円の終わりの角度というのがいまいちよくわかりません。

最後の引数ですが、こちらによると

anticlockwise 引数が false で endAngle-startAngle が 2π 以上、または、anticlockwise 引数が true で startAngle-endAngle が 2π 以上なら、その円弧は、この円周全体となります。

そうでなければ、円弧は、開始地点から終了地点までの円周に沿ったパスとなります。このパスは、anticlockwise 引数が true なら反時計回りとなり、そうでなければ時計回りとなります。その地点は円上にあるため、単にゼロからの角度とはいっても、

その円弧は 2π ラジアンより大きい角度をカバーすることは決してできません。もし 2 つの地点が同じなら、または、その半径が 0 なら、その円弧はどちらの方向にも長さ 0 だとして定義されます。

とありました。anticlockwise(反時計回り)をfalseにすれば時計回りに、trueにすれば時計回りに円や弧が描画されることが分かりました。また第四引数と第五引数が360度以下なら第四引数の数値の位置から終了地点までを結んだ円弧ができあがります。

ですが、

endAngle-startAngle が 2π 以上なら、その円弧は、この円周全体となります。

というのと

その地点は円上にあるため、単にゼロからの角度とはいっても、

その円弧は 2π ラジアンより大きい角度をカバーすることは決してできません。もし 2 つの地点が同じなら、または、その半径が 0 なら、その円弧はどちらの方向にも長さ 0 だとして定義されます。

というのがよくわかりません。前者は2πは度数法でいうと360度なので、引数がfalse或いは、trueで360度以上ならその円弧は円周全体となる、という言葉がよく理解できません。360度あれヴぁ円になることを回りくどくいっているのでしょうか。
後者は、360度より大きい角度をカバー?というか描画しないし、第四引数と第五引数が同じなら、または、第三引数の半径の数値が0なら、円弧の長さが0になり、表示されないということであっておりますか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

arcという名前の通り、このメソッドは完全な円だけではなく円弧を描くためにも使えます。となれば、中心と半径以外に、「どこからどこまで」描くかを指定する必要がありますが、それが4つ目・5つ目の引数です。

角度は、x軸の正方向(右)が0ラジアンになって、そこから時計回りに下がMath.PI/2ラジアン、左がMath.PIラジアン、上がMath.PI*3/2ラジアン、一回転した右がMath.PI*2ラジアン、となります。

あと、canvasに円を1つ描くだけなら、「canvas内の座標」にあまり意味はなくなりますが、他にも図形を描くとなれば、位置関係を決める必要が出てきます。

参考URL

投稿2017/09/29 11:36

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aaaaaaaa

2017/10/13 10:33

ご回答ありがとうございました。おかげさまで第五引数まで理解することができました。 第六引数の書く向きとはいったいなんなのでしょうか。
guest

0

ベストアンサー

向きはオレンジの矢印の方向になります。

デフォルトは false で、時計回りで 0 から Math.PI/2 の位置まで描き
true なら反時計周りで 0 から Math.PI/2 の位置まで描くので

イメージ説明

以下の arc を試すとこのような線になります。

false デフォルト 時計回り

js

1ctx.arc(100, 100, 40, 0, Math.PI/2, false) 2ctx.stroke()

true 反時計

js

1ctx.arc(100, 100, 40, 0, Math.PI/2, true) 2ctx.stroke()

投稿2017/10/16 21:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問