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

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

Processingで図形を特定の個数&ランダムな位置に描く、その2

Macのビジュアルプログラミング環境「Quartz Composer」では、図形をグループ化してそれごと動かすというのが簡単にできます。
が、Processingだとfor使って計算しなくちゃアカンからめんどいのーと思ってこのハコの記事
prince9.hatenablog.com
を書いていたのですが、
translateで動かせばええやんと。
とはいえ図形によってはtranslate使うと線(stroke)がジャギる感があるので、あんまり使いたくなかったのでした・・・

図形はオライリー社が出してる「Processingをはじめよう」
www.oreilly.co.jp
のフクロウさんを参照しました。複雑だったので。
下記のように、ランダムな位置にフクロウさんを描きます。マウスクリックで位置を変更します。

f:id:prince9:20170728043950p:plain

int x,y;

void setup() {
  size(600,600);
   background(204);
   noLoop();
}

void draw() {
  background(204);
  //100から400の間で、10個ランダムに描く。実際はtranslateでランダムに移動させている
 for (int i = 0; i < 10; i++) {
   x = int(random(100, 400));
  y = int(random(100, 400));
  owl();
}

  /*
//フクロウさんそのものコード
translate(110,110);
stroke(0);
strokeWeight(70);
line(0,-35,0,-65);

noStroke();
fill(255);
 ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  
  fill(0);
   ellipse(-14,-65,8,8);
   ellipse(14,-65,8,8);
   quad(0,-58,4,-51,0,-44,-4,-51);
   */
 
}

void owl() {
//フクロウさんのコード
  pushMatrix();
  translate(x,y);
  
  stroke(0);
strokeWeight(70);
line(0,-35,0,-65);

noStroke();
fill(255);
 ellipse(-17.5,-65,35,35);
  ellipse(17.5,-65,35,35);
  arc(0,-65,70,70,0,PI);
  
  fill(0);
   ellipse(-14,-65,8,8);
   ellipse(14,-65,8,8);
   quad(0,-58,4,-51,0,-44,-4,-51);
   
   popMatrix();
  
  
 }

void mousePressed() {
      redraw();// ボタンが押されたときだけ実行
}