チュートリアル | (トピック一覧へ戻る) |
もしオブジェクトの集合のサイズに初期化後の修正が必要であれば、 配列の代わりにArrayListクラスを利用してください。 ArrayListの宣言は 配列の宣言IVec[]と異なり、 ArrayList<IVec>のように、型は< >の中に入れます。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); ArrayList< IVec > pointList = new ArrayList< IVec >(); //empty array // adding vectors pointList.add( new IVec(0,0,0) ); pointList.add( new IVec(20,0,0) ); pointList.add( new IVec(40,0,0) ); pointList.add( new IVec(60,0,0) ); // size() gives the length of the array for(int i=0; i < pointList.size(); i++){ new IPoint( pointList.get(i) ); //access i-th member } // insert a vector at index 1. pointList.add( 1, new IVec(0, 0, 30) ); // remove a vector at index 2. pointList.remove( 2 ); // replace the vector at index 3 with a new one. pointList.set( 3, new IVec(60, 0, 30) ); // convert into fixed size array with size() and for loop. IVec[] fixedArray = new IVec[ pointList.size() ]; for(int i=0; i < pointList.size(); i++){ fixedArray[i] = pointList.get(i); } // or shorter way to convert into fixed size array. IVec[] fixedArray2 = pointList.toArray( new IVec[ pointList.size() ] ); // creating a curve. new ICurve(fixedArray).clr(1.,0,0);
ArrayListクラスは要素の操作のためにそれぞれの役割を持ったメソッドを提供します。
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); ArrayList < ArrayList < IVec > > ptlist2 = new ArrayList < ArrayList < IVec > >(); for(int i=0; i < 100; i++ ){ // needs to make a child list individually ArrayList < IVec > childList = new ArrayList < IVec >(); int num = 0; if( i%11 == 0 ){ num = 110; } else if( i%8 == 0 ){ num = 80; } else if( i%7 == 0 ){ num = 70; } else if( i%5 == 0 ){ num = 50; } else if( i%4 == 0 ){ num = 40; } else if( i%3 == 0 ){ num = 30; } else if( i%2 == 0 ){ num = 20; } for(int j=0; j < num; j++){ childList.add( new IVec( j, 50-i, j*j*0.01 ) ); } // add the child list to the parent (ptlist2) ptlist2.add(childList); } // create curves for(int i=0; i < ptlist2.size(); i++){ // don't create curve if number of points is less than 2 if( ptlist2.get(i).size() > 1 ){ IVec[] fixedArray = ptlist2.get(i).toArray(new IVec[ptlist2.get(i).size()]); new ICurve(fixedArray).clr(i*0.01); } }
import processing.opengl.*; import igeo.*; size( 480, 360, IG.GL ); ArrayList < IVec > pts = new ArrayList < IVec >(); for(int i=0; i < 100; i++){ IVec p = IRandom.pt(-80,-80,0,80,80,0); pts.add(p); } for(int i=0; i < pts.size(); i++){ new IPoint(pts.get(i)); } // sort points in x direction (blue) ISort.sort(pts, new IXComparator()); new ICurve(pts.toArray(new IVec[pts.size()])).clr(0,0,1.); // sort points in y direction (cyan) ISort.sort(pts, new IYComparator()); new ICurve(pts.toArray(new IVec[pts.size()])).clr(0,1.,1.); // sort points in radial direction (red) ISort.sort(pts, new IRadialComparator()); new ICurve(pts.toArray(new IVec[pts.size()])).clr(1.,0,0);
IRandom.pt()関数はそれぞれの座標軸の最小値・最大値からIVecオブジェクトをランダムに生成します。 ランダムな生成に関する詳細については乱数に関するチュートリアルを参照してください。
ISort.sort() はIVec型のArrayListといずれかの比較機構を引数に取ります。 IXComparatorはX軸の値を、 IYComparatorはY軸の値を、 IZComparatorはZ軸の値を、 IDirectionalComparatorはベクトルの角度を、 IRadialComparatorはベクトルのラジアンを、 IDistanceComparatorはベクトル長をそれぞれ比較して順番に並べます。