Home> 2010-a > a-13 課題制作のヒント

このエントリーをはてなブックマークに追加

a-13 課題制作のヒント

  • 2010年7月12日 14:40
  • 2010-a

画像を指定した範囲でランダムに配置する

角度、大きさ、座標、色をランダムに指定する。

hearts

用意したハートの画像(ドロップシャドゥをかけ背景は透過処理とした)

heart

以下、複数の方法を提示する。どれが正解ということはなく、自身の作品に最も適した方法を選択する。

関数を使わずに

PImage heart;

void setup() {
  size(500, 500);
  colorMode(HSB);
  background(0);
  smooth();
  heart = loadImage("heart.png"); //ハート画像の読み込み
  imageMode(CENTER);
  noLoop();
}

void draw() {
//ハートをランダムに表示
  for (int i = 0; i < 50; i++) {
      pushMatrix();
      translate(random(width), random(100, 200));
      scale(random(0.2, 0.6));
      rotate(random(-PI/6, PI/6));
      tint(random(0,10), random(51, 204), 255);
      image(heart, 0, 0);
      popMatrix();
  }
}

関数を使って1(ハート1つのランダム描画を関数とする)

PImage heart;

void setup() {
  size(500, 500);
  colorMode(HSB);
  background(0);
  smooth();
  heart = loadImage("heart.png"); //ハート画像の読み込み
  imageMode(CENTER);
  noLoop();
}

void draw() {
  //ハートをランダムに表示
  for (int i = 0; i < 100; i++) {
    pushMatrix();
    transformHeart(random(width), random(100, 200));
    popMatrix();
  }
}

//ハートをランダムに回転、縮小、色づけする関数(ハートの座標を引数にする)
void transformHeart(float x, float y) {
  translate(x, y);
  scale(random(0.2, 0.6));
  rotate(random(-PI/6, PI/6));
  tint(random(0,10), random(51, 204), 255);
  image(heart, 0, 0);
}

関数を使って2(ハート複数のランダム描画を関数とする)

PImage heart;

void setup() {
  size(500, 500);
  colorMode(HSB);
  background(0);
  smooth();
  heart = loadImage("heart.png"); //ハート画像の読み込み
  imageMode(CENTER);
  noLoop();
}

void draw() {
  randomHeart(100); //ハートをランダムに「100個」表示
}

//ハートをランダムに表示する関数(ハートの個数を引数にする)
void randomHeart(int num) {
  for (int i = 0; i < num; i++) {
    pushMatrix();
    translate(random(width), random(100, 200));
    scale(random(0.2, 0.6));
    rotate(random(-PI/6, PI/6));
    tint(random(0,10), random(51, 204), 255);
    image(heart, 0, 0);
    popMatrix();
  }
}

画像を規則的に配置する(大きさや角度はランダムに設定する)

hearts_10x10

PImage heart;

void setup() {
  size(500, 500);
  colorMode(HSB);
  background(0);
  smooth();
  heart = loadImage("heart.png"); //ハート画像の読み込み
  imageMode(CENTER);
  noLoop();
}

void draw() {
  //ハートを規則的に表示
  int intervalNum = 50;
  for (int j = 0; j < height; j += intervalNum) {
    for (int i = 0; i < width; i += intervalNum) {
      pushMatrix();
      transformHeart(i + intervalNum/2, j + intervalNum/2);
      popMatrix();
    }
  }
}

//ハートをランダムに回転、縮小、色づけする関数(ハートの座標を引数にする)
void transformHeart(float x, float y) {
  translate(x, y);
  scale(random(0.2, 0.6));
  rotate(random(-PI/6, PI/6));
  tint(random(0,10), random(51, 204), 255);
  image(heart, 0, 0);
}

奥行き感を出す

hearts_blur

PImage heart;

void setup() {
  size(500, 500);
  colorMode(HSB);
  background(0);
  smooth();
  heart = loadImage("heart.png"); //ハート画像の読み込み
  imageMode(CENTER);
  noLoop();
}

void draw() {
  //奥
  for (int i = 0; i < 320; i++) {
    pushMatrix();
    transformHeart(random(width), random(80, 320), random(0.1, 0.2));
    popMatrix();
  }
  filter(BLUR, 2);
  //中間
  for (int i = 0; i < 240; i++) {
    pushMatrix();
    transformHeart(random(width), random(100, 300), random(0.2, 0.4));
    popMatrix();
  }
  filter(BLUR, 1);
  //手前
  for (int i = 0; i < 40; i++) {
    pushMatrix();
    transformHeart(random(width), random(160, 240), random(0.4, 0.6));
    popMatrix();
  }
}

//ハートをランダムに回転、縮小、色づけする関数(ハートの座標, 大きさを引数にする)
void transformHeart(float x, float y, float s) {
  translate(x, y);
  scale(s);
  rotate(random(-PI/6, PI/6));
  tint(random(0,10), random(51, 204), 255);
  image(heart, 0, 0);
}

特定の形の範囲で、画像をランダムに配置する

heart-of-hearts

PImage heart;

void setup() {
  size(500, 500);
  colorMode(HSB);
  background(0);
  smooth();
  heart = loadImage("heart.png"); //ハート画像の読み込み
  imageMode(CENTER);
  noLoop();
}

void draw() {
  //画面の真ん中に大きくハートを描く
  pushMatrix();
  translate(width/2, height/2);
  scale(3.0);
  image(heart, 0, 0);
  filter(BLUR, 2); //少しぼかして境界の色の変化を緩やかにする
  popMatrix();
  //画面の色情報を読み込む(ハートの形を覚える)
  loadPixels();
  //画面をリセット(黒く塗りつぶす)
  background(0);
  //ランダムに点を選び色情報を調べ、明るい色ならば(ハートの形の内側ならば)、その場所にハートを描く
  for (int i = 0; i < 5000 ; i++) {
    int x = int(random(width));
    int y = int(random(height));
    int pos = y*width + x;
    color c = pixels[pos]; //loadPixels()で覚えた画面(ハートの形が描かれた画面)の色情報を代入する
    if(brightness(c) > 204) {
      pushMatrix();
      float heartScale = map(brightness(c), 204, 255, 0.1, 0.3); //点の明るさに応じてハートの大きさを設定(境界付近は小さくなる)
      transformHeart(x, y, heartScale);
      popMatrix();
    }
  }
}

//ハートをランダムに回転、縮小、色づけする関数(ハートの座標, 大きさを引数にする)
void transformHeart(float x, float y, float s) {
  translate(x, y);
  scale(s);
  rotate(random(-PI/6, PI/6));
  tint(random(0,10), random(51, 204), 255);
  image(heart, 0, 0);
}

Index of all entries

Home> 2010-a > a-13 課題制作のヒント

カテゴリ
アーカイブ
購読
Recommends
Processing: A Programming Handbook for Visual Designers and Artists Learning Processing: A Beginner's Guide to Programming Images, Animation, and Interaction (Morgan Kaufmann Series in Computer Graphics and Geometric Modeling) FORM+CODE -デザイン/アート/建築における、かたちとコード Form+Code in Design, Art, and Architecture (Design Briefs) Generative Gestaltung Generative Art Built with Processing[Ver. 1.x対応版] -デザイン/アートのためのプログラミング入門 Getting Started With Processing Arduinoをはじめよう ビジュアライジング・データ ―Processingによる情報視覚化手法 +GAINER―PHYSICAL COMPUTING WITH GAINER
Powerd By

Return to page top