2次元配列の理解

Filed in 制作応用演習(グラフィカルプログラミング演習) 0 comments

1次元配列はそんなに難しくないと思います。問題は2次元配列です。構造は実はシンプルなんですが、覚えにくい部分があります。
式としては、[]がもう一つ増えて例えば、

int[][] a = new int[3][5];

となります。

配列を宣言するときに、値を入れることができます。

1
2
3
4
5
6
7
//初期化の際に直接値を入れる。
//int[][] a = new int[3][5];と構造的には同じ
int[][] a = {{0, 1, 2, 3, 4},
            {5, 6, 7, 8, 9},
            {10, 11, 12, 13, 14}};
//0~2の値を入れれば、それぞれの行の値が出る
println(a[0]);

この場合、以下のように行と列の対応を覚えるといいでしょう。本当は違うんですが、この後の画像処理のコードと関連するので以下のように覚えます。

row_col_01.gif

この式の配列の概念図は、以下のようになります。つまり、3行 x 5列 = 15個の箱が作られるということです。以下の図に、それぞれの箱の番号を記載してあります。

multi_array_01.gif

それぞれの箱の値を変えたい時は、a[0][3] = 5 などのように値を代入してあげます。
でも、これだけの説明では2次元配列がなぜあるのかがよく分からないですよね。
以下に参考例を示します。少し長いですが、がんばって読んでみて下さい。
このサンプルコードは、一次元配列サンプルの続きになりますが、3 x 5個の円の変化のスピードを変えるプログラムです。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
float[][] eSize = new float[3][5];    //円のサイズ
float[][] speed = {{0.1, 0.5, 0.3, 0.2, 1.5},    //円の拡大縮小のスピード
                   {1.0, 2.0, 1.5, 2.0, 0.05},
                   {0.4, 0.8, 0.08, 1.1, 1.4}};
float minSize = 1.0;     //円のサイズの最小値
float maxSize = 100.0;    //円のサイズの最大値
 
 
void setup() {
  size(400, 200);
  background(255);
  smooth();
  noStroke();
  fill(0);
 
  for(int y = 0; y < 3; y++){    //円のサイズを最小値に設定    
    for(int x = 0; x < 5; x++){
      eSize[y][x] = minSize;
    }
  }
}
 
void draw() {
  background(255);
  for(int y = 0; y < 3; y++){    //列方向    
    for(int x = 0; x < 5; x++){    //行方向
      eSize[y][x] += speed[y][x];    //円のサイズを変化させる
      //もし円のサイズが最大値を超えたか最小値未満になったら、方向を変える
      if(eSize[y][x] > maxSize || eSize[y][x] < minSize) speed[y][x] = -speed[y][x];
      ellipse(100*x, 100*y, eSize[y][x], eSize[y][x]);    //円を描く  
    }
  }
}

結果
processingscreensnapz003

上の式の特徴は、前述の15個の箱にそれぞれ独自の変数が設定されているということです。プログラムを実行してみると、バラバラのスピードで再生されているのが分かるでしょう。

2次元配列が使われるケースはこの授業では多くはないのですが、画像処理や3Dグラフィックスのプログラムでは非常によく使われます。

この配列は、特に何次元までという制限はないので、3次元でも4次元でも作れるのですが、実際に使うのは2次元配列までということが多いので、ここでは2次元配列までしか説明しません。
この2次元配列は後半の画像処理(コンピュータヴィジョン)の授業でまた使われるので、必ず理解しておきましょう。

Posted by noguchi   @   19 4月 2007 0 comments

0 Comments

Sorry, comments are closed.

Previous Post
«
Next Post
»
Stroom designed by Credit Cards In conjunction with Web Hosting Reseller , Dream Interpretation Guide , Best Website Hosting.