home processing download documents tutorial python tutorial gallery source about
 チュートリアル (トピック一覧へ戻る)

繰り返し処理

     Forループ

For文の役割と使用方法を確認します。 処理の反復(繰り返し)にはFor文が最も頻繁に用いられます。反復の回数を整数で指定することで、任意の処理をその回数だけ反復させます。 For文では繰り返しの回数を数える整数のカウンタ変数iが用いられ、 初期値( int i=0 )、 終端値 ( i<10 )、 繰り返しごとの値の増分( i++ )が指定されます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for( int i=0; i < 10; i++ ){
  new IPoint(i, 0, 0);
}

上記のスケッチは以下と同義となります。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new IPoint(0,0,0); // 1st execution. i=0
new IPoint(1,0,0); // 2nd execution. i=1
new IPoint(2,0,0); // 3rd execution. i=2
new IPoint(3,0,0); // 4th execution. i=3
new IPoint(4,0,0); // 5th execution. i=4
new IPoint(5,0,0); // 6th execution. i=5
new IPoint(6,0,0); // 7th execution. i=6
new IPoint(7,0,0); // 8th execution. i=7
new IPoint(8,0,0); // 9th execution. i=8
new IPoint(9,0,0); //10th execution. i=9

カウンタ変数(i)がゼロ(0)から始まり、反復回数が(N)である場合、(i)の最大値は(N-1)となることに注意してください。 上記の例においては、反復回数が10であるため、カウンタ変数(i)は最小値0から最大値9となっています。

右側の図でFor文の処理の流れを確認します。

  1. "int i=0"が実行されることで、カウンタ変数(i)の値に0が代入されます。
  2. "i<10"が評価されることで、(i)の値によって反復処理を継続するか否かが判断されます。
  3. この場合、(i)が10以下であれば反復を継続、それ以上であれば終了します。
  4. 反復される処理"{ ... }"が実行されます。
  5. "i++が実行されることで、(i)の値に(i + 1)が代入されます。そして手順2に戻ります。


     繰り返し中の変数の使い方

カウンタ変数 i の反復処理の中での用い方によって様々な形状を生成することができます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for( int i=0; i < 10; i++){
  new IPoint(0, 0, i*5);
}

点をX軸で反復させる代わりに、このスケッチではZ軸で5ユニット間隔で反復しています。 以下のスケッチでは各点をカウンタ変数に基づいた色に設定しています。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for( int i=0; i < 10; i++){
  new IPoint(0, 0, i*5).clr(i*0.1,0,0);
}

以下のスケッチもカウンタ変数を引数に用いるもうひとつの例です。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for( int i=0; i < 10; i++){
  new IPoint(i*10-50, 10-i*5, i*4).clr(i*0.1, 1.0-i*0.1, 0);
}

動作の理解のために以下のスケッチでは上記のスケッチをFor文を使わず実装しています。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

new IPoint(-50,  10,  0).clr(  0, 1.0, 0); // i=0
new IPoint(-40,   5,  4).clr(0.1, 0.9, 0); // i=1
new IPoint(-30,   0,  8).clr(0.2, 0.8, 0); // i=2
new IPoint(-20,  -5, 12).clr(0.3, 0.7, 0); // i=3
new IPoint(-10, -10, 16).clr(0.4, 0.6, 0); // i=4
new IPoint(  0, -15, 20).clr(0.5, 0.5, 0); // i=5
new IPoint( 10, -20, 24).clr(0.6, 0.4, 0); // i=6
new IPoint( 20, -25, 28).clr(0.7, 0.3, 0); // i=7
new IPoint( 30, -30, 32).clr(0.8, 0.2, 0); // i=8
new IPoint( 40, -35, 36).clr(0.9, 0.1, 0); // i=9

以下のスケッチでは三角法関数sinとcosを利用し、螺旋形状を生成しています。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for( int i=0; i < 10; i++){
  new IPoint(sin(i*0.5)*20,
             cos(i*0.5)*20,
             i*10-50).hsb(i*0.1,1,1);
}


     2次元Forループ

重複For文(Nested Loop)の使用方法を確認します。 For文は別のFor文を内包することができます。 その際、2つのカウンタ変数ij を用いることができます。 この値を利用することで、例えば二次元の反復処理を行うことができます。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0);
  }
}


     3次元Forループ

二重For文と同様に、For文は三重に重複することができます。 その際、カウンタ変数はi, j, kの三つを用います。

import processing.opengl.*;
import igeo.*;

size( 480, 360, IG.GL );

for(int i=0; i < 10; i++){
  for(int j=0; j < 10; j++){
    for(int k=0; k < 10; k++){
      new IPoint(i*10, j*10, k*10).clr(i*0.1, j*0.1, k*0.1);
    }
  }
}


(トピック一覧へ戻る)

HOME
FOR PROCESSING
DOWNLOAD
DOCUMENTS
TUTORIALS (Java / Python)
GALLERY
SOURCE CODE(GitHub)
PRIVACY POLICY
ABOUT/CONTACT