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

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

Processingでクレヨンスクラッチもどきをつくる

先日テレビでクレヨンスクラッチをやっていたので、processingで実装してみました。
実際のクレヨンスクラッチは、

1.適当に色つきクレヨンで塗る
2.その上から黒のクレヨンで全体をぬりつぶす
3.クギなどでひっかく

という手順ですが、
Processingでは、

0.「スケッチ」メニュー→ライブラリをインポート→「geomerative」を探す
1.マスクをつくる
2.マスクの中に位置・色ともにランダムに円を描く

という手順になります。
マスクは「geomerative」というライブラリを使いました。重いですが、現状マスクが使える+Illustratorで編集可能なPDFに書き出せるのはこの方法しかないので・・・

こちらはマスクをリング状にしたもの。
f:id:prince9:20170718042342p:plain

こちらはマスクを円形にしたもの。
f:id:prince9:20170718042537p:plain

import geomerative.*;

void setup()
{
  size(600,600,P2D);
  background(0);  
  RG.init(this);
noLoop();
}

void draw()
{
  
  //色クレヨンで描いた上から黒クレヨンを塗りつぶす
  background(0);    

//引っ掻く回数
for (int i=0; i<50; i++) {
  //マスクの形
  makeCircle(int(random(width)),int(random(height)),int(random(10,200)));

}
}

void makeCircle(int x, int y, int r) {
  //リング形のマスク、r-は太さ(ここだとstroke(10)と同じ)、引っ掻いた形
  RShape mask = RShape.createRing(x, y, r,r-10);
  
  /*
  //円形のマスクにする場合は、createRingではなくcreateCircleを使う
  RShape mask = RShape.createCircle(x, y, r);
  */

  //画面サイズの半分だとだいたい画面が埋め尽くされる
  for (int i=0; i<300; i++) {
    //色クレヨンの色
    fill(random(255),random(255),random(255));
    //色クレヨンで描いた柄
    RShape strip = RShape.createCircle(random(width),random(height),random(10,200));
    
    RShape masked = strip.intersection(mask);
    masked.setStroke(false);
    RG.shape(masked);
  }
}

 //マウスを押すと再描画
 void mousePressed() {
   redraw();
    }