Column

2021.7.18

仮想生物動物園 vol.1

街を歩いていても人間しかいなくてつまらない、、
他の種族といえば鳥や犬などの哺乳類ばかりで味気ない、、

そんなモヤっとした気持ちを誰もが一度は抱くのではないでしょうか?そんな味気ない毎日にスパイスを加えるべく人工生命を作って見ました。あ、本日はお日柄もよく。こんにちは、アシスタントのイチカワです。

 

キラキラしていて綺麗ですね。せっかくなので店内でも彼らにはウニョウニョしてもらいましょう。

 

ぜひ皆さんも哺乳類で溢れかえった店内に彩りを加えて見てください。

 

リンクはこちら
*スマートフォンでご鑑賞ください
*上記の写真はイメージです。製作者の気分によって色とかアルゴリズムが変わります。

 

内容はこんな感じです↓

<!DOCTYPE html>
<html lang=”en”>

<head>
<meta charset=”utf-8″ />
<!– keep the line below for OpenProcessing compatibility –>
<script src=”https://openprocessing.org/openprocessing_sketch.js”></script>
<script src=”https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js”></script>
<script src=”https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/addons/p5.sound.min.js”></script>
<script src=”mySketch.js”></script>
<link rel=”stylesheet” type=”text/css” href=”style.css”>
</head>

<body>

<script>

function make2DArray(cols, rows) {
let arr = new Array(cols);
for (let i = 0; i < arr.length; i++) {
arr[i] = new Array(rows);
}
return arr;
}

let grid;
let cols;
let rows;
let resolution = 5;

x = window.screen.width;
y = window.screen.height;

function setup() {
createCanvas(800,600);
cols = width / resolution;
rows = height / resolution;

grid = make2DArray(cols, rows);
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
grid[i][j] = floor(random(2));
}
}
}

function draw() {

frameRate(40);
background(0);

for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
let x = i * resolution;
let y = j * resolution;
if (grid[i][j] == 1) {
fill(random(255),random(255),random(255));
stroke(0);

ellipse(x,y,resolution-1,resolution-1);

}
}
}

let next = make2DArray(cols, rows);

// Compute next based on grid
for (let i = 0; i < cols; i++) {
for (let j = 0; j < rows; j++) {
let state = grid[i][j];
// Count live neighbors!
let sum = 0;
let neighbors = countNeighbors(grid, i, j);

if (state == 0 && neighbors == 3 ) {
next[i][j] = 1;
} else if (state == 1 && (neighbors < 2 || neighbors > 3) ) {
next[i][j] = 0;
} else {
next[i][j] = state;
}

}
}

grid = next;

}

function countNeighbors(grid, x, y) {
let sum = 0;
for (let i = -1; i < 2; i++) {
for (let j = -1; j < 2; j++) {
let col = (x + i + cols) % cols;
let row = (y + j + rows) % rows;
sum += grid[col][row];
}
}
sum -= grid[x][y];
return sum;
}

</script>

</body>

</html>

人工生命とは?

・自律性、意識、などあらゆる生命現象を対象とする研究領域。
1951年数学者ジョン・フォン・ノイマンによって提唱され、ノイマンの没後30年にコンピュータ科学者クリストファー・ラングトンによって正式な研究分野として確立される。

・今回の人工生命は生成された二次元配列からある規則に従って生死を繰り返し、画面上に描画するシンプルなものでgame of life と呼ばれるもの。
二次元配列上の彼らは密集しすぎていたり孤立していると死んでしまう。
画面上に映る彼らはただの文様のようにしか見えないかも知れないが、ある規則に従い自律的に行動し生死を繰り返すという点で我々人間と同じ生命体である。

・現れては消え、カラフルな色を描画して生死を繰り返す彼らから生きていることを今一度考えたい。

協力

IACILS( 国際芸術複雑情報生命科学学会)

Author

FabCafe Newsletter

新しいTechとクリエイティブのトレンド、
FabCafeで開催されるイベントの情報をお伝えします。

FabCafeのビジネスサービス

企業の枠をこえて商品・サービスをともに作り上げていく
FabCafeのオープンイノベーション