質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

2回答

506閲覧

円の中心をつなぐ線を描く格子グラフ

yupop

総合スコア0

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2020/07/17 14:19

編集2020/07/18 10:31

前提・実現したいこと

Processingで円の中心座標から円の中心座標へ向けて線分を引くプログラムを書いています。
配列axとayは16個の円の中心の座標値を表す配列。配列axとayの値は、円を描いたり、円をつなぐ線を描くのに使う。
円を描くソースコードは書くことができ、実行結果もしっかり出たのですが、正直これすらあっているのかもわからない状態です。円の中心をつなぐソースコードの方がまったく反映されず初心者の私にはすっかりお手上げ状態なので助けていただきたく今回質問させていただこうと思いました。

配列NWの添字と配列の値を使ってどの円同士がつながっているのかを表します。配列の値が1の場合はつながっていて、0の場合はつながっていないと判断させます。 例としては、NW[0][1]は1となるので、円0と円1はつながっていることを意味します。なので、axとayの値を使って円0と円1の中心座標をつなぐ線を引くものとします。 やりたいこととしては、入れ子構造のfor文を使って配列NWを走査し、値が1となる添字の組み合わせをif文で見つけることです。見つかった場合は、その添字の組み合わせに対応する円をつなぐ線を引きます。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

int[] ax = new int[]{100,200,300,400,100,200,300,400,100,200,300,400,100,200,300,400};
int[] ay = new int[]{100,100,100,100,200,200,200,200,300,300,300,300,400,400,400,400};
int[][]NW = new int[][
{
{0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0},
{1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0},
{0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0},
{1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0},
{0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0},
{0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0},
{0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0},
{0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0},
{0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0},
{0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0},
{0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1},
{0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0},
{0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0},
{0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1},
{0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0}
};

void setup(){
int i,j;
size(500,500);
background(255);

strokeWeight(10);
/ここから、円をつなぐ線を引くプログラムを記述します。/

strokeWeight(2);
/ここから、円を描くプログラムを記述します。/
/円の大きさは50ピクセル/
}

試したこと

円の中心をつなぐソースコードの場所に、new int[i][j]やint[][]NW = new int[i][j]など試しに書いてみましたが、エラーが出てしまい実行に至ることができませんでした。

補足情報(FW/ツールのバージョンなど)

最新のProcessingを使用しております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SHOMI

2020/07/18 09:18 編集

if(i == 1){ if(j == 1){ line(ax[i], ay[j], ax[i], ay[j]); } } (200,200)に点を打っているだけです。 NWの用途が不明です。この中の1となっている部分を使用してつなぐ座標を決めたいのだろうとは予想できますが、ここからどう座標に変換するのでしょうか? 1の立っているインデックスのax,ay同士を結ぶ?
thkana

2020/07/18 04:33

なにをしたいのかを「誰が聞いても誤解のないように」説明して下さい。 どの様になれば満足なのか、これも誰が聞いてもわかるように説明して下さい。 そのうえで、あなたのプログラムの各部が欲しい結果に対してどのように機能するかの説明をしてみて下さい。 そんなの面倒、と思いますか? プログラムってのは、あなたがコンピュータにやらせたいことを説明した文書です。コンピュータは人間よりずっと融通が効きませんから、人間にちゃんと説明が出来ないようでは、コンピュータに言うことを聞かせることは出来ません。
yupop

2020/07/18 06:05

言葉足らずで申し訳ありません。 配列NWの添字と配列の値を使ってどの円同士がつながっているのかを表します。配列の値が1の場合はつながっていて、0の場合はつながっていないと判断させます。 例としては、NW[0][1]は1となるので、円0と円1はつながっていることを意味します。なので、axとayの値を使って円0と円1の中心座標をつなぐ線を引くものとします。 やりたいこととしては、入れ子構造のfor文を使って配列NWを走査し、値が1となる添字の組み合わせをif文で見つけることです。見つかった場合は、その添字の組み合わせに対応する円をつなぐ線を引きます。
SHOMI

2020/07/18 09:06

ax,ayは同じ値の繰り返しのようですがこれであっているんですか? int[] ax = new int[]{100,200,300,400,100,200,300,400,100,200,300,400,100,200,300,400}; int[] ay = new int[]{100,100,100,100,200,200,200,200,300,300,300,300,400,400,400,400}; の間違い?
SHOMI

2020/07/18 09:20

追加情報はここではなく、質問へ追記してください。
SHOMI

2020/07/18 10:15 編集

いや、追記をしてほしいのはコードの変更ではなくNWの使用方法などの追加情報を…
guest

回答2

0

追加情報を元に修正。

diff

1int[] ax = new int[]{100,200,300,400,100,200,300,400,100,200,300,400,100,200,300,400}; 2-int[] ay = new int[]{100,200,300,400,100,200,300,400,100,200,300,400,100,200,300,400}; 3+int[] ay = new int[]{100,100,100,100,200,200,200,200,300,300,300,300,400,400,400,400}; 4int[][]NW = new int[][] 5{ 6 {0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0}, 7 {1,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0}, 8 {0,1,0,1,0,0,1,0,0,0,0,0,0,0,0,0}, 9 {0,0,1,0,0,0,0,1,0,0,0,0,0,0,0,0}, 10 {1,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0}, 11 {0,1,0,0,1,0,1,0,0,1,0,0,0,0,0,0}, 12 {0,0,1,0,0,1,0,1,0,0,1,0,0,0,0,0}, 13 {0,0,0,1,0,0,1,0,0,0,0,1,0,0,0,0}, 14 {0,0,0,0,1,0,0,0,0,1,0,0,1,0,0,0}, 15 {0,0,0,0,0,1,0,0,1,0,1,0,0,1,0,0}, 16 {0,0,0,0,0,0,1,0,0,1,0,1,0,0,1,0}, 17 {0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,1}, 18 {0,0,0,0,0,0,0,0,1,0,0,0,0,1,0,0}, 19 {0,0,0,0,0,0,0,0,0,1,0,0,1,0,1,0}, 20 {0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,1}, 21 {0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0} 22}; 23 24void setup(){ 25 int i,j; 26 size(500,500); 27 background(255); 28 29 strokeWeight(10); 30 for(j = 0; j <= 15; j++){ 31 for(i = 0; i <= 15; i++){ 32- if(i == 1){ 33- if(j == 1){ 34+ if(NW[j][i] == 1){ 35- line(ax[i], ay[j], ax[i], ay[j]); 36+ line(ax[j], ay[j], ax[i], ay[i]); 37- } 38 } 39 } 40 } 41 42 strokeWeight(2); 43 for(j = 100; j <= 400; j+=100){ 44 for(i = 100; i <= 400; i+=100){ 45 ellipse(i,j,50,50); 46 } 47 } 48}

投稿2020/07/18 09:25

SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

簡単に説明すると
setup()で4x4に配置する円の中心座標をリストに詰め込んでます

draw()では、まず円を描いています。次に、左上の円から順々に右と下に円があるかどうかをチェックしてあればその円に向かって線を描いてます。

processing

1ArrayList<PVector> centers = new ArrayList<PVector>(); 2 3void setup(){ 4 size(500,500); 5 background(255); 6 7 for (int row = 0; row < 4; row++) { 8 for (int col = 0; col < 4; col++) { 9 int x = (col + 1) * 100; 10 int y = (row + 1) * 100; 11 centers.add(new PVector(x, y)); 12 } 13 } 14} 15 16void draw(){ 17 for (PVector p : centers) { 18 noFill(); 19 strokeWeight(1); 20 ellipse(p.x, p.y, 30, 30); 21 } 22 23 for (int row = 0; row < 4; row++) { 24 for (int col = 0; col < 4; col++) { 25 if (row + 1 < 4) { 26 int idx0 = col; 27 int idx1 = (row + 1) * 4 + col; 28 noFill(); 29 strokeWeight(1); 30 line(centers.get(idx0).x, centers.get(idx0).y, centers.get(idx1).x, centers.get(idx1).y); 31 } 32 33 if (col + 1 < 4) { 34 int idx0 = (row * 4) + col; 35 int idx1 = (row * 4) + col + 1; 36 noFill(); 37 strokeWeight(1); 38 line(centers.get(idx0).x, centers.get(idx0).y, centers.get(idx1).x, centers.get(idx1).y); 39 } 40 } 41 } 42}

投稿2020/07/17 16:03

hytNInE

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問