貧乏性が具現化させたアート:Processing 作例
買ってきたお菓子は、お腹が空いたときに食べたほうがより美味しいだろうと、なかなか手を付けないまま賞味期限を迎える。
服はちょっとぐらい破れても平気で着る。破れに破れて着られなくなっても、まだ雑巾に使えるだろうと取っておく。
そう、私は貧乏性。つまらぬ物の捨て時がわからない…
今回はそんな貧乏性の私だからこそできた「アート」をお見せしましょう。
この記事は全文無料でお読みいただけます。もしお気に召しましたら投げ銭お願いしますね。😉✨
ストレンジ・アトラクターでの作画
以前、De Jong アトラクターというストレンジ・アトラクターの一種をお題に Processing 3D 動画を作成してみました。
De Jong アトラクターに限らず、ストレンジ・アトラクターは初期値やパラメータにとても敏感で、ちょっとした値の違いがとてつもなく大きな結果の違いに繋がったりします。
作画例としてはこういう絵が欲しいのですが、ストレンジ・アトラクターの性質上どういう初期値を取ればこういう絵になるかがやってみないとわからないんですね。
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]);
しかし、パラメータをランダムにとって作画していると先の例のような「これぞストレンジ・アトラクター!」という絵が現れるのは稀で、ほとんどがこういう絵になってしまいます。
こういう絵は面白くないということで捨てられてしまうのですが、勿体無いですね、このパラメータ…
ん?勿体無い? ザワザワザワ…(貧乏性の血が騒ぐ音)
捨てられていたパラメータで面白いパターンを
これは捨てられない!こんなに沢山あるパラメータ、勿体なくて捨てられない!
これを使って何か面白い絵は作れないものかしら? いや、貧乏性の誇りにかけて絶対に作らねばならぬ! 作らねばならぬのだ〜!
と、そういう使命感に燃えて作ったのがこちらです。
何点かに収束する De Jong アトラクターのパターンですが、順番に線で結んでみるとこのような形を描画することがあります。
これを何パターンか描画するとこんな感じ。
左上に集中する傾向があるので、キャンバス全体を回転させながら満遍なく描画するとこんな感じに。
16パターンぐらいを描画するのが濃度的にちょうどいいみたいです。
貧乏性が具現化されたソースコード
今回の作例のソースコードがこちらです。
// 貧乏性が具現化させたアート: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/>
*/
主な説明はコメントでコード中に記載しました。
今回の工夫点はパターン毎に線の色、彩度、輝度、太さを変化させて変化をつけているところです。
これがアートだ!
人に見向きもされず捨てられていたパラメータがこのような美しさを見せてくれる。
誰も目にしたことのない美しい花は、未開の土地の林を抜けた先にあるのではない。
妖精が舞う神秘の泉は、森の奥に人知れずひっそりと湧き出ているのではない。
まだ見ぬ「美」はすぐそこにある。
我々はそれに目を向けさえすればよいのだ。
それに気づかせてくれるこの作品は「アート」と呼ぶに足るものなのです!
そうです、アーチスト! 私はアーチスト!
さすがは私! 私ってすごいっ!
そう、私は自信過剰。つまらぬ見栄の捨て時がわからない…
読んでくださってありがとうございました。
ここでこの記事はおしまいです。もしこの記事がお気に召しましたら投げ銭お願いします。😉✨
ここから先は
¥ 100
この記事が面白かったらサポートしていただけませんか? ぜんざい好きな私に、ぜんざいをお腹いっぱい食べさせてほしい。あなたのことを想いながら食べるから、ぜんざいサポートお願いね 💕