JAVA GUIプログラミング 第2回 グラフィックスを使っての演習 グラフを描こう
前回の復習 線が2本引けますね 絵を描く部分を次のように描くと・・ public void paint(Graphics g) { g.drawLine(100,100,200,200); g.drawLine(200,100,300,200); } 線が2本引けますね
今日は色をつけてみよう public void paint(Graphics g) { g.setColor(Color.red); g.drawLine(100,100,200,200); g.setColor(Color.blue); g.drawLine(200,100,300,200); }
色の設定 setColor(色)のように設定します。 色には Color.red Color.blue Color.yellow Color.white などなど、たくさんあります。
自分で色を作る コンピュータの色の3源色(RGB) 赤 緑 青 をまぜて自分で色を作ることができます。
構文 setColor(new Color(赤,緑,青)) 赤、緑、青には 0~255までの整数を代入します。 値は強さをさしています
例 setColor(new Color(0,0,0)) ⇒黒 setColor(new Color(255,255,255)) ⇒白 ⇒黄色 setColor(new Color(125,125,125)) ⇒灰色
ではやってみましょう public void paint(Graphics g) { g.setColor(new Color(200,0,150)); g.fillRect(100,100,200,50); }
どうですか? 色を指定する方法はこんな感じです いろいろと試してください(駄洒落ではありません) 次にjavaでfor文を使ってみましょう
for文 for(初期値の設定;継続条件;1回ごとの処理) 例 for(i=1;i<5;i++) { } 例 for(i=1;i<5;i++) { } i++とはiに1を足すという意味です。 { }の中は4回繰り返されます
for文のサンプル① public void paint(Graphics g) { int i; i+=10とは for(i=100;i<=300;i+=10) g.drawLine(100,i,i,300); } i+=10とは iに10を足すという意味です このプログラムの結果を 想像してみてください
for文のサンプル② public void paint(Graphics g) { int i; for(i=0;i<=255;i++) g.setColor(new Color(0,i,255-i)); g.drawLine(i,0,i,100); } これも結果を想像 してみよう!
色についてはここまで 次はグラフを描いてみましょう
座標系の違いに注意 描かせたいグラフの範囲を[-1,1]×[-1,1]とします。 画面のサイズを500×500とします。 数学上の座標を(x,y)とし 画面の座標を(x’,y’)とすると・・ x’=250+250x y’=250-250y となります。
プログラムの前に・・ これからy=x のグラフを描きます drawLine(200,200,200,200) これからy=x のグラフを描きます 2 グラフを描くときには点を細かく打っていきますが、 JAVAには点を打つ命令がありません。 もし(200,200)に点を打ちたいときは drawLineを使って次のようにします。 drawLine(200,200,200,200)
ではプログラムです public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); }
実数の計算をするので x,yをdoubleで定義します public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); } 実数の計算をするので x,yをdoubleで定義します
整数型でx1,y1を定義します。 コンピュータの座標が整数のため です。 public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); } 整数型でx1,y1を定義します。 コンピュータの座標が整数のため です。
xをー1から1まで、0.01ずつ 増やしながら繰り返します。 public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); } xをー1から1まで、0.01ずつ 増やしながら繰り返します。
今回描かせたい関数 public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); } 今回描かせたい関数
数学上の座標から コンピュータの座標に変換します コンピュータの座標のため 整数型になおします。 public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); } 数学上の座標から コンピュータの座標に変換します コンピュータの座標のため 整数型になおします。
(x1,y1)に点を打ちます public void paint(Graphics g) { double x,y; int x1,y1; for(x=-1;x<=1;x+=0.01) y=x*x; x1=(int)(250+250*x); y1=(int)(250-250*y); g.drawLine(x1,y1,x1,y1); } (x1,y1)に点を打ちます
今日はここまでです 暇がある人は いろいろな絵や いろいろな関数を描いてみてください。