![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
次のような図の絵を描きたいのですが、どのように書けばいいのでしょうか?
繰り返しを行う、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で次のような図の絵を描くプログラ」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/1/1486008_5497c99434ccc/M.jpg)
No.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, 円の幅, 円の高さ);
}
}
}
とすれば良いはず。
あ、実際に動かしていませんから、間違ってたらごめんなさい。
考え方を汲み取ってくださいね。
No.1
- 回答日時:
円そのものの書き方?
それとも、山積みにする判定のしかた?
円を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つだけの知識だけで描きたいわけです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# C言語 3 2022/11/09 13:27
- C言語・C++・C# leetcode 155 minstack 1 2022/05/07 16:43
- 英語 量を"size"で表現することの可否等について 1 2022/12/07 14:49
- C言語・C++・C# C言語 3 2022/10/04 15:07
- pixiv 絵師はなぜ1枚絵ばかりで漫画を描かないのか? 14 2022/08/05 10:30
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JUnit4のアノテーションについて
-
C#で実行時にメソッドの返り値...
-
java spring でエラーが出て困...
-
6桁の数字を重複なしでランダム...
-
Javaのファイル名チェックについて
-
c# デリゲート関連の命名について
-
javaでcsvファイル読込時の改行...
-
JTableにおけるTABイベント取得...
-
javaで次のような図の絵を描く...
-
javaのfor文
-
byte[]→int
-
javaのfor文
-
「配列定数は、イニシャライザ...
-
メインが含まれていません
-
C#でバブルソート
-
DataSet(DataTable)の使い方
-
C言語のポインターに関する警告
-
ループ処理の際、最後だけ","を...
-
パソコンキーボードで時分秒を...
-
BOOL値を逆にしたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
Javaで電卓を作りたい
-
式の型は配列型で int に解決済...
-
javaでカレンダー作成
-
JAVA エラー 式の開始が不正で...
-
JAVAでCの関数ポインタのような...
-
java spring でエラーが出て困...
-
6桁の数字を重複なしでランダム...
-
c# デリゲート関連の命名について
-
C++からC#のdllを参照する際、...
-
メインが含まれていません
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
三目並べ(Tick-Tack-Toe)をJav...
-
JUnit4のアノテーションについて
-
初心者ですが、今javaで簡単な...
-
classを使って座標軸を求めるコ...
-
javaでcsvファイル読込時の改行...
-
C#で実行時にメソッドの返り値...
-
Java 初心者 int型の取り扱い方
おすすめ情報