読者です 読者をやめる 読者になる 読者になる

人工知能に関する断創録

人工知能、認知科学、心理学、ロボティクス、生物学などに興味を持っています。このブログでは人工知能のさまざまな分野について調査したことをまとめています。最近は、機械学習、Deep Learning、Kerasに関する記事が多いです。



図形を描く

Javagame

paintComponent()の引数であるGraphicsオブジェクトgを使うと直線、図形、文字、イメージをパネルに描けます。今回は、gを使ってさまざまな図形を描いてみます。

draw_figure.jar

座標系

Javaの座標系は数学で使う座標系と異なり、左上が(0,0)になります。x座標は右に行くほど大きくなり、y座標は下に行くほど大きくなります(下図参照)。また、座標はピクセル単位であるため整数値しか取れません。数学が得意な人は慣れるまで大変かも・・・。

f:id:aidiary:20090827214807g:plain

色の指定

色は赤(R)、緑(G)、青(B)の3つの成分の組み合わせで表されます。それぞれの成分は8ビット(0〜255の整数値)です。たとえば、赤は (255,0,0)、緑は(0,255,0)、青は(0,0,255)、白は(255,255,255)、黒は(0,0,0)、黄色は赤と緑を混ぜ合わせればよいので(255,255,0)です。

ここで、なぜ白が(255,255,255)、黒が(0,0,0)なんだと疑問に思う方いませんか?白は色がないんだから(0,0,0)で絵の具を全部混ぜると黒になるから黒は(255,255,255)じゃないかって。私も最初疑問に思ってました。だけど、この色が絵の具じゃなくてライトだと考えればすんなり納得できました。太陽の光は白ですが、プリズムを通すと虹が見えるように白い光はすべての色を含んでいます。つまり、白はすべての色を含む(255,255,255)なのです。また、光がまったくないと真っ暗闇です。だから黒は色をまったく含まない(0,0,0)なのです。

Javaで色を指定するにはColorクラスを使います。たとえば、赤を表すColorオブジェクトを作りたければ、new Color(255,0,0)で作れます。紫を表すColorオブジェクトを作りたければ、new Color(255,0,255)で作れます。こうして作ったColorオブジェクトをsetColor()に渡してあげれば図形の色を指定できます。

    // 赤に変更
    g.setColor(new Color(255,0,0));

いちいち(R,G,B)を指定するのが面倒なので標準の色は名前で指定できるようになっています。

    // 赤に変更
    g.setColor(Color.RED);

この指定方法ではnewは使いません。Javaが内部でnewしてくれているからです。プログラムでは赤(Color.RED)と青(Color.BLUE)を使っています。他にどんな色があるか知りたいですか?そんな場合は、ColorクラスのAPI(Application Programming Interface)を調べてみましょう。

図形を描く

Graphicsオブジェクトgを使うとさまざまな図形が描けます(プログラムでは線と四角形と円しか描いてませんが・・・)。

drawLine ()は線を描くメソッドです。プログラムでは(10,10)から(100,10)まで線を引いています。

drawRect()は四角形の枠を描くメソッドです。プログラムでは(10,20)を左上の座標とする幅40、高さ40の四角形を描いています。後ろの2つの引数は幅と高さであって、右下の座標でないので注意しましょう。fillRect ()は塗りつぶした四角形を描くメソッドです。

drawOval()は円を描くメソッドです。プログラムでは(10,70)を左上の座標とする幅40、高さ40の四角形のぴったりと納まる大きさの円を描いています。fillOval()は塗りつぶした円を描くメソッドです。

線、四角形、円以外にも角丸四角形を描くdrawRoundRect()、ポリゴンを描くdrawPolygon()、弧を描くdrawArc() などのメソッドもあります。詳しくはGraphicsクラスのAPIを見てみましょう。私は線、四角形、円以外はほとんど使ったことないです。

長々と図形を描く方法を解説してきましたが、ゲームでこれらのメソッドを使うことはほとんどありません。地味ですから。実際はイメージを多用します。