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

パネル化アルゴリズム例

     パネル化アルゴリズム例その5

この例では、長さの異なるパネルを生成するアルゴリズムを示します。 以下のコードではパネルの長さは変数vlenによって指定され、その値には乱数が代入されます。
用いられる入力ファイルは以下です。

surface5.3dm

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

size(480, 360, IG.GL);

IG.open("surface5.3dm");
ISurface[] surfaces = IG.surfaces();

for (ISurface surf : surfaces) {

  int unum = 30, vnum=40;
  double uinc = 1.0/unum, vinc = 1.0/vnum;
  for (int i=0; i < unum; i++) {
    for (int j=0; j < vnum; j++) {
      int vlen = IRandom.getInt(1, 10);
      if (j+vlen > vnum) vlen = vnum-j;
      IVec[][] cpts = new IVec[2][vlen+1];
      
      for (int k=0; k <= vlen; k++) {
        cpts[0][k] = surf.pt(i*uinc, (j + k)*vinc);
        cpts[1][k] = surf.pt((i+1)*uinc, (j + k)*vinc);
      }
      new ISurface(cpts).clr(IRandom.clr());
      
      j+=vlen-1;
    }
  }
  surf.del();
}

次のコードでは、パネルのオフセットの値が変数depthで指定され、またその値には 乱数が代入されます。

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

size(480, 360, IG.GL);

IG.open("surface5.3dm");
ISurface[] surfaces = IG.surfaces();

for (ISurface surf : surfaces) {

  int unum = 30, vnum=40;
  double uinc = 1.0/unum, vinc = 1.0/vnum;
  for (int i=0; i < unum; i++) {
    for (int j=0; j < vnum; j++) {
      int vlen = IRandom.getInt(1, 10);
      if (j+vlen > vnum) vlen = vnum-j;
      IVec[][] cpts = new IVec[2][vlen+1];

      double depth = IRandom.get(0, 1);
      for (int k=0; k <= vlen; k++) {
        cpts[0][k] = surf.pt(i*uinc, (j+k)*vinc, depth);
        cpts[1][k] = surf.pt((i+1)*uinc, (j+k)*vinc, depth);
      }
      new ISurface(cpts).clr(IRandom.gray());
      
      j+=vlen-1;
    }
  }
  surf.del();
}


(トピック一覧へ戻る)

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