サイコロを作ってみよう2

 

図形には、直線や円などの描画コマンドを組み合わせて描くベクトル図形と
1点1点(ドットというかピクセル)色をつけて描くビットマップ画像の2種類があります。

毎度、管理人イガジーです。

ベクトル図系は、拡大/縮小しても美しいのが特徴です。
という訳で、サイコロはベクトル図形として描画することにしましょう。
その為には、座標を計算で求めるようにしなければなりません。
慣れるまでは、図を描いて考えるのが良いと思います。


サイコロの黒丸は最大6個なのですが、3や5など中央を使うものも
あるので、9個配置できるように考えます。上図で、マス目になって
いるのが、それです。
マス目1辺の大きさは、サイコロの1辺の長さsizeから、余白mgn(*2)を
引いて、3で割れば求められます。
黒丸の大きさ(直径)は、マス目から余白spc(*2)を引けば得られます。
bsz=(size-mgn*2)/3-spc*2;
ですね。
(javaの円(楕円)を描くコマンド fillOval(); は、直径指定なので半径を
求める必要はありません。)

マス目の左端は、mgn で、左の黒丸は mgn+spc の位置、
中央黒丸の位置は、
mgn+(size-mgn*2)/3+spc
ですが、中央から黒丸の半径ぶん左、と考えた方が式が簡単になります。
(size-bsz)/2
ですね。( size/2 – bsz/2 = (size-bsz)/2 )
右側黒丸の位置は、
siz-mgn-spc-bsz
です。
以上のことから
int p1=mgn+spc;
int p2=(siz-bsz)/2;
int p3=siz-mgn-spc-bsz;
としておき、サイコロ自体の左上座標が (x0, y0) とすると
たとえば、3の目を描く時には
g.fillOval(x0+p3, y0+p1, bsz, bsz); // 右上
g.fillOval(x0+p2, y0+p2, bsz, bsz); // 中央
g.fillOval(x0+p1, y0+p3, bsz, bsz); // 左下
とすればよいわけです。

こういった(整数)演算は、割り算すると余りが切り捨てになるので
割り算は最後に行うようにします。

また、入力誤りの可能性も出てくるので、全パターンの描画確認を
した方が良いでしょう。(^^;

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)