電子書籍の厳選無料作品が豊富!

次のような図の絵を描きたいのですが、どのように書けばいいのでしょうか?
繰り返しを行う、forだけを用いて描きたいのですが、どのような考え方をすればいいのかわかりません。
コツとかあるのでしょうか?

なにを迷っているのかというと、iが段数を表すのだとすると、iはどんどん増加していかなきゃなりませんよね。上から下にむかって描いていくので。そしてx座標は下にむかってどんどん大きくなっていくので。
しかし、個数を表すものをjだとすると、反対にjは、値を減らしていかないとなりませんよね。
左の方に円の数が1個ずつ増えていくので。

iは増える、jは減るので、どのようにプログラムを書いたらいいかうまく、表現できないです。

こういうのは結局慣れなのでしょうか?

描き方の答えなどををみてもよくこれが人間の頭で直観的に思い浮かぶなと思ってしまうのですが。。

考え方など詳しく教えてくれたらありがたいです。

int size=25;
for(int i=1;i<=10;i++){
for(int j=10;j>=i;j--){
g.fillOval(size*j,size*i,size,size);
}
}
}
}

「javaで次のような図の絵を描くプログラ」の質問画像

A 回答 (2件)

○を4x4描きたかったら、


○を描く左上の座標は、幅をかけてあげれば求められます
たとえば、幅10なら、0,1,2,3に10をかければ
0,10,20,30になりますよね?
縦も同じように求めれば良いです。

for(int x=0; x<4; x++) {
for(int y=0; y<4; y++) {
int xd = x * 円の幅;
int yd = y * 円の高さ;
g.fillOval(xd, yd, 円の幅, 円の高さ);
}
}

って、あれ?ここまでは既にできてるのかな?
ならば、○を描画するかしないかを判定するのに
x+yを求めると

0+0=0 1+0=1 2+0=2 3+0=3
1+0=1 1+1=2 2+1=3 3+1=4
2+0=2 1+2=3 2+2=4 3+2=5
3+0=3 1+3=4 2+3=5 3+3=6

となるので、x+yが3以上になる場所のみ描画すれば
---O
--OO
-OOO
OOOO
になりますよね?

ですから、先ほどのコードに判定文を追加して
for(int x=0; x<4; x++) {
for(int y=0; y<4; y++) {
if ( 2 < x + y) {
int xd = x * 円の幅;
int yd = y * 円の高さ;
g.fillOval(xd, yd, 円の幅, 円の高さ);
}
}
}
とすれば良いはず。

あ、実際に動かしていませんから、間違ってたらごめんなさい。
考え方を汲み取ってくださいね。
    • good
    • 0

円そのものの書き方?


それとも、山積みにする判定のしかた?

円をfor文だけで、三角関数も使わずに描くのであれば、
x^2 + y^2 = r^2
の公式を思い出してください。
しかし、このまま判定すると、点線になると思うので、多少の余裕を持たせて

x^2 + y^2 - r^2 < 3
とかにしておくと、だいたいい3ピクセル幅くらいの円が描けると思います。

山積みの判定は、4x4なら
3 < x+y
でいけますね。

この回答への補足

説明たりなくてすいません。

円を重ねていって、ピラミッドの半分だけ描くようなプログラムです。
ピラミッドの左側だけを描くような感じです。
このプログラムはでたらめですが、
int size=20;
for(int i=1;i<=10;i++){
for(int j=10;j>=i;j--){
g.fillOval(size*j,size*i,size,size);
}
こんな感じに書いて、図のようなものを描いていきたいわけです。

今のところ、drawRectなどの図形を描く宣言、for文、intなどの型宣言の3つくらいしか勉強してないので、この3つだけの知識だけで描きたいわけです。

補足日時:2011/10/16 00:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!