まゆたまガジェット開発逆引き辞典

電子工作やプログラミングのHowtoを逆引き形式で掲載しています。作りたいモノを決めて学んでいくスタイル。プログラマではないので、コードの汚さはお許しを

Processingでハコをランダムに複数描く

前回のハコを応用して、ハコの面がランダムであったりなかったりなモノを作ってみました。
メモリ的に「描画しない」という方法がちと分からなかったので、noFillとnoStrokeで強引にやってしまいました。
コードを整えてないので、かなり汚いです。
箱シリーズは続けてやっていく予定です。

これを制作するにあたり、こち
umesyurock0603.hatenablog.com
を参考にさせて頂きました。リスペクト!ありがとうございます。
関数名が亀甲なのは、亀甲紋を作ってて派生したものでして・・・変えるのメンドかったのですみません。

スペースキーでPDF書き出し、マウスクリックでランダムに再描画します。

六角形を消したい+それぞれのハコの側面の線が欲しい場合は、関数kikkoを消して、関数kikko2〜4にstroke(34,24,22);を書いてあげれば、ハコがあったりなかったりにできます。

六角形輪郭あり
f:id:prince9:20170703065408p:plain

六角形輪郭なし
f:id:prince9:20170703070249p:plain

import processing.pdf.*;

int centerX;
int centerY;
int size;
int h =100;
int count;

void setup(){
  size(600, 600);
  background(255);
   smooth();
  }

 
void draw(){
    background(255); 
   drawBox();
noLoop();
}

void drawBox() {
  for (int y = 0; y < 700; y += 100) {
  for (int x = 0; x <= 700; x += 87) {
    

    noStroke();
    int rd1 = int(random(2));
     int rd2 = int(random(2));
      int rd3 = int(random(2));
      
      //左側面
      if (rd1 > 0) {
 fill(251,247,16);
    kikko2(x,y, h);
} else {
   noFill();
   noStroke();
  }
  
  //右側面
   if (rd2 > 0) {
    fill(37,61,159);
    kikko3(x,y, h);
} else {
   noFill();
   noStroke();
  }
    
    //上のフタ
       if (rd3 > 0) {
     fill(216,23,16);
    kikko4(x,y, h);
} else {
   noFill();
   noStroke();
  }
    
 
    //六角形輪郭
    noFill();
     stroke(34,24,22);
     strokeWeight(2);
    kikko(x,y, h);
    
   
   
  }
}

}

//六角形輪郭
void kikko(float centerX, float centerY, float size){
  final float COS[] = {0, 0.8660254, 0.8660254, 0, -0.86602524, -0.86602524};
final float SIN[]  = {1, 0.5, -0.5, -1, -0.5, 0.5};

final float RADIUS = size/2 ;


beginShape();
for(int i = 0; i < 6; i++){
float tx = COS[i] * RADIUS + centerX;
float ty = SIN[i] * RADIUS + centerY;
vertex(tx, ty);
}

endShape(CLOSE);
  
}

//左側面
void kikko2(float centerX, float centerY, float size){
  //側面の形を変えたい場合は、配列の各値を変更する。配列の順番は六角形の中央を左回り
   final float COS2[] = {0, -0.8660254, -0.8660254, 0};
final float SIN2[]  = {0, -0.5, 0.5, 1};
  final float RADIUS = size/2;


beginShape();
for(int i = 0; i < 4; i++){
float tx2 = COS2[i] * RADIUS + centerX;
float ty2 = SIN2[i] * RADIUS + centerY;
vertex(tx2, ty2);
}

endShape(CLOSE);
  
}


//右側面
void kikko3(float centerX, float centerY, float size){
    //側面の形を変えたい場合は、配列の各値を変更する。配列の順番は六角形の中央を右回り
   final float COS3[] = {0, 0.8660254, 0.8660254, 0};
final float SIN3[]  = {0, -0.5, 0.5, 1};
  final float RADIUS = size/2;


beginShape();
for(int i = 0; i < 4; i++){
float tx3 = COS3[i] * RADIUS + centerX;
float ty3 = SIN3[i] * RADIUS + centerY;
vertex(tx3, ty3);
}

endShape(CLOSE);
  
}

//上のフタ
void kikko4(float centerX, float centerY, float size){
  //側面の形を変えたい場合は、配列の各値を変更する。配列の順番はいちばん上の頂点から左回り
   final float COS4[] = {0, -0.8660254, 0, 0.8660254};
final float SIN4[]  = {-1, -0.5, 0, -0.5};
  final float RADIUS = size/2;


beginShape();
for(int i = 0; i < 4; i++){
float tx4 = COS4[i] * RADIUS + centerX;
float ty4 = SIN4[i] * RADIUS + centerY;
vertex(tx4, ty4);
}

endShape(CLOSE);
  
}


//マウスクリックで再読み込み+PDF準備
void mousePressed() {
   beginRecord(PDF,"pattern"+count+".pdf");
   redraw();
    }


//スペースキーでPDF書き出し、save〜のコメントを外せばPNG形式も同時書き出し
void keyPressed() {

  if ( key == ' ' ) {
     //save( "hoge.png" );
     count++;        
        endRecord();
        }
  
  if (key == 'q'){
        exit();
}

  }