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

配列による幾何学オブジェクトの生成

     配列による曲線の生成

IVecの配列によってICurveを簡単に生成できます。

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

size( 480, 360, IG.GL );

IVec[] cpts1 = new IVec[4];

cpts1[0] = new IVec(-30, 10, 0);
cpts1[1] = new IVec(-10, 10, 0);
cpts1[2] = new IVec(-10, 30, 0);
cpts1[3] = new IVec(-30, 30, 0);
// curve 1 (red)
new ICurve(cpts1, 3).clr(1.,0,0);


IVec[] cpts2 = new IVec[10];
for(int i=0; i < cpts2.length; i++){
  if(i%2==0){ cpts2[i] = new IVec(i*10, 0, 0); }
  else{ cpts2[i] = new IVec(i*10, 10, 0); }
}
// curve 2 (blue)
new ICurve(cpts2, 1).clr(0,0,1.);

IVec[] cpts3 = new IVec[16];
for(int i=0; i < cpts3.length; i++){
  if(i%4==0){ cpts3[i] = new IVec(-30, -10, i*5); }
  else if(i%4==1){ cpts3[i] = new IVec(-10, -10, i*5); }
  else if(i%4==2){ cpts3[i] = new IVec(-10, -30, i*5); }
  else{ cpts3[i] = new IVec(-30, -30, i*5); } // same with i%4==3
}
// curve 3 (cyan)
new ICurve(cpts3, 3).clr(0,1.,1.);


     配列による曲面の生成

IVecの2次元配列によってISurfaceを簡単に生成できます。

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

size( 480, 360, IG.GL );

IVec[][] cpts1 = new IVec[2][2];
cpts1[0][0] = new IVec( 0, 0, 0);
cpts1[1][0] = new IVec(-30, 0, 0);
cpts1[0][1] = new IVec( 0,-30, 0);
cpts1[1][1] = new IVec(-30,-30, 0);
// surface 1 (gray)
new ISurface(cpts1);

IVec[][] cpts2 = new IVec[10][2];
for(int i=0; i < cpts2.length; i++){
  if(i%2==0){
    cpts2[i][0] = new IVec(i*10,0,0);
    cpts2[i][1] = new IVec(i*10,0,20);
  }
  else{
    cpts2[i][0] = new IVec(i*10,-10,0);
    cpts2[i][1] = new IVec(i*10,10,10);
  }
}
// surface 2 (purple)
new ISurface(cpts2).clr(.5,0,1);

IVec[][] cpts3 = new IVec[4][4];
for(int i=0; i < cpts3.length; i++){
  for(int j=0; j < cpts3[i].length; j++){
    if( (i==0||i==3) && (j==1||j==2) ){
      cpts3[i][j] = new IVec(-i*10, j*10, 20);
    }
    else{ cpts3[i][j] = new IVec(-i*10, j*10, 0); }
  }
}
// surface 3 (pink)
new ISurface(cpts3,3,3).clr(1,.5,1);


     配列によるポリゴン・メッシュの生成

IVecの2次元配列によってポリゴンメッシュを簡単に生成できます。

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

size( 480, 360, IG.GL );

IVec[][] cpts1 = new IVec[10][10];

for(int i=0; i < cpts1.length; i++){
  for(int j=0; j < cpts1[i].length; j++){
    if( (i+j)%2==0 ){ 
      cpts1[i][j] = new IVec(i*5, -j*5-30, (i+j)*2); 
    }
    else{ cpts1[i][j] = new IVec(i*5, -j*5-30, (i+j-1)*2); }
  }
}
// mesh 1 (cyan)
new IMesh(cpts1).clr(0,1.,1.);

int divNum=30;
IVec[][] cpts2 = new IVec[10][divNum+1];
for(int i=0; i < cpts2.length; i++){
  for(int j=0; j < cpts2[i].length; j++){
    float radius = 30 - i*3;
    float angle = 2 * PI / divNum * j;
    cpts2[i][j] = 
      new IVec(cos(angle)*radius, sin(angle)*radius, i*i*.5);
  }
}
// mesh 2 (red)
new IMesh(cpts2).clr(1.,0,0);

円周率を表す定数PIが三角法関数の生成に利用されていることに注目してください。 sin()cos()は角度ではなくラジアンであるため、 divNumは360ではなく2 * PIを割ります。
またcpts2の内側の配列長がdivNumに1を加算していることにも注意してください。 筒形状の最初の辺と最後の辺を連結するため、面が余計に必要となっています。


(トピック一覧へ戻る)

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