チュートリアル | (back to the list of tutorials) |
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i < 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
If文の条件節で用いられている演算子"<"は、左項の値が右項の値より小さい際に真(true)を返します。 ">"演算子は逆に、左項の値がより大きい際に真を返します。また、 "<="演算子は左項の値が右項の値と等しいかより小さい際に真となります。 ">="演算子は逆に、左項が等しいかより大きい際に真となります。
上記スケッチと逆の条件を設定するには、"<"の代わりに">="を用います。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i >= 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
If文の制御の流れを図で確認します。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i < 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } else{ new IPoint(i*10, j*10, -10).clr(0, j*0.1, i*0.1); } } }
If-Else文の制御の流れを図で確認します。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i < 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } else if( i < 7 ){ new IPoint(i*10, j*10, 10).clr(1, 1-j*0.1, 0); } else{ new IPoint(i*10, j*10, -10).clr(0, j*0.1, i*0.1); } } }
Else-if文を用いたIf文の制御の流れを図で確認します。
Else-if文は任意の数だけ用いることができます。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i < 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } else if( i < 7 ){ new IPoint(i*10, j*10, 10).clr(1, 1-j*0.1, 0); } else if( i < 9 ){ new IPoint(i*10, j*10, -20).clr(1, j*0.1, 1); } else{ new IPoint(i*10, j*10, -10).clr(0, j*0.1, i*0.1); } } }
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i == 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i != 5 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i < 5 && j < 3 ){ new IPoint(i*10, j*10, -20).clr(i*0.1, j*0.1, 1); } else{ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
||演算子は左右項の真偽値を加算によって合成します。 片方ないし両方が真の際に真、そうでない場合に偽を返します。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i < 5 || j < 3 ){ new IPoint(i*10, j*10, -20).clr(i*0.1, j*0.1, 1); } else{ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
!演算子は真偽値を反転します。 真偽値が真の際は偽、偽の際は真を返します。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( !(i < 5 || j < 3) ){ // same with i>=5 && i>=3 new IPoint(i*10, j*10, -20).clr(i*0.1, j*0.1, 1); } else{ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
括弧が計算順序を矯正していることに注意してください。
この性格は周期的な条件分岐に有用です。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i % 2 == 0 ){ new IPoint(i*10, j*10, 20).clr(0, 1., 1.); } else{ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( i % 4 == 0 ){ new IPoint(i*10, j*10, 20).clr(0, 1., 1.); } else if( i % 4 == 1 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } } }
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); for(int i=0; i < 10; i++){ for(int j=0; j < 10; j++){ if( ( i + j ) % 2 == 0 ){ new IPoint(i*10, j*10, 0).clr(i*0.1, j*0.1, 0); } // this condition is same with // if( i%2==0 && j%2==0 || i%2==1 && j%2==1 ) } }
特に、二重反復においてカウンタ変数が(i)と(j)であるとき、"(i + j) % 2 == 0"は斜めの格子形状を生成します。