見出し画像

貧乏性が具現化させたアート:Processing 作例

買ってきたお菓子は、お腹が空いたときに食べたほうがより美味しいだろうと、なかなか手を付けないまま賞味期限を迎える。
服はちょっとぐらい破れても平気で着る。破れに破れて着られなくなっても、まだ雑巾に使えるだろうと取っておく。

そう、私は貧乏性。つまらぬ物の捨て時がわからない…

今回はそんな貧乏性の私だからこそできた「アート」をお見せしましょう。

この記事は全文無料でお読みいただけます。もしお気に召しましたら投げ銭お願いしますね。😉✨

画像1

ストレンジ・アトラクターでの作画

以前、De Jong アトラクターというストレンジ・アトラクターの一種をお題に Processing 3D 動画を作成してみました。

De Jong アトラクターに限らず、ストレンジ・アトラクターは初期値やパラメータにとても敏感で、ちょっとした値の違いがとてつもなく大きな結果の違いに繋がったりします。

作画例としてはこういう絵が欲しいのですが、ストレンジ・アトラクターの性質上どういう初期値を取ればこういう絵になるかがやってみないとわからないんですね。

画像2

De Jong アトラクターの場合、下記の数式でパラメータ a, b, c, d をいろいろと変えて、欲しい絵が出るまで作画を繰り返しました。

x[n + 1] = sin(a * y[n]) - cos(b * x[n]);
y[n + 1] = sin(c * x[n]) - cos(d * y[n]);

しかし、パラメータをランダムにとって作画していると先の例のような「これぞストレンジ・アトラクター!」という絵が現れるのは稀で、ほとんどがこういう絵になってしまいます。

画像3

画像4

こういう絵は面白くないということで捨てられてしまうのですが、勿体無いですね、このパラメータ…

ん?勿体無い? ザワザワザワ…(貧乏性の血が騒ぐ音)


画像5

捨てられていたパラメータで面白いパターンを

これは捨てられない!こんなに沢山あるパラメータ、勿体なくて捨てられない!
これを使って何か面白い絵は作れないものかしら? いや、貧乏性の誇りにかけて絶対に作らねばならぬ! 作らねばならぬのだ〜!

と、そういう使命感に燃えて作ったのがこちらです。

画像6

画像7


何点かに収束する De Jong アトラクターのパターンですが、順番に線で結んでみるとこのような形を描画することがあります。

画像8


これを何パターンか描画するとこんな感じ。

画像9


左上に集中する傾向があるので、キャンバス全体を回転させながら満遍なく描画するとこんな感じに。

画像10


16パターンぐらいを描画するのが濃度的にちょうどいいみたいです。

画像11


画像12

貧乏性が具現化されたソースコード

今回の作例のソースコードがこちらです。

// 貧乏性が具現化させたアート:Processing 作例
// @deconbatch
// Processing 3.2.1
// 2018.06.21

void setup() {

  size(720, 720);
  colorMode(HSB, 360.0, 100.0, 100.0, 100.0);
  smooth();
  noFill();

}

void draw() {

  background(0.0, 0.0, 90.0, 100.0);
  translate(width / 2, height / 2);

  // 16パターン描画
  int   drawCntMax = 16;
  float hueBase    = random(360);
  
  for(int drawCnt = 0; drawCnt < drawCntMax; ++drawCnt) {

    // できるだけ収束するパラメータ
    float seed  = 0.01;
    float scope = 130.0;
    float pA    = seed * floor(random(-scope, scope));
    float pB    = seed * floor(random(-scope, scope));
    float pC    = seed * floor(random(-scope, scope));
    float pD    = seed * floor(random(-scope, scope));

    // 開始点はランダムに
    float prevX = random(-2.0, 2.0);
    float prevY = random(-2.0, 2.0);

    // 彩度や輝度に変化を持たせる
    float hueApply   = (hueBase + (drawCnt % 3) * 45.0) % 360.0;
    float satApply   = map(drawCnt % 6, 0, 5, 20.0, 40.0);
    float briApply   = map(drawCnt % 5, 0, 4, 40.0, 60.0);
    int   lineCntMax = floor(map(drawCnt, 0, drawCntMax, 30, 60));
    strokeWeight(map(drawCnt % 4, 0, 3, 0.2, 0.8));

    // 全体を 45度回転
    rotate(PI * 0.25);

    // De Jong アトラクターで描画
    for (int i = 0; i < lineCntMax; ++i) {

      float currX = sin(pA * prevY) - cos(pB * prevX);
      float currY = sin(pC * prevX) - cos(pD * prevY);

      stroke(hueApply, satApply, briApply, 100.0);
      line(
           prevX * width / 6.0, prevY * height / 6.0,
           currX * width / 6.0, currY * height / 6.0
           );

      prevX = currX;
      prevY = currY;

    }
  }

  // 10個描画して保存
  saveFrame("frames/####.png");
  if (frameCount >= 10) {
    exit();
  }

}

/*
Copyright (C) 2018- deconbatch

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>
*/

主な説明はコメントでコード中に記載しました。
今回の工夫点はパターン毎に線の色、彩度、輝度、太さを変化させて変化をつけているところです。


画像13

これがアートだ!

人に見向きもされず捨てられていたパラメータがこのような美しさを見せてくれる。

誰も目にしたことのない美しい花は、未開の土地の林を抜けた先にあるのではない。
妖精が舞う神秘の泉は、森の奥に人知れずひっそりと湧き出ているのではない。
まだ見ぬ「美」はすぐそこにある。
我々はそれに目を向けさえすればよいのだ。

それに気づかせてくれるこの作品は「アート」と呼ぶに足るものなのです!
そうです、アーチスト! 私はアーチスト!
さすがは私! 私ってすごいっ!

そう、私は自信過剰。つまらぬ見栄の捨て時がわからない…
読んでくださってありがとうございました。


ここでこの記事はおしまいです。もしこの記事がお気に召しましたら投げ銭お願いします。😉✨

ここから先は

0字

¥ 100

この記事が面白かったらサポートしていただけませんか? ぜんざい好きな私に、ぜんざいをお腹いっぱい食べさせてほしい。あなたのことを想いながら食べるから、ぜんざいサポートお願いね 💕