見出し画像

文字置換の応用 L-system

L-systemはフラクタルを応用した自動生成システムの一つ

function Lsys(O, P, n){
  while (n--) O=O.replace(P.reg, function(m, $1){ return P[$1] });
  return O;
}

// 藻類
WScript.echo(Lsys("A", {"A":"AB","B":"A","reg":/([AB])/g}, 4));
// フィボナッチ
WScript.echo(Lsys("A", {"A":"B","B":"AB","reg":/([AB])/g}, 7));
// カントール集合
WScript.echo(Lsys("A", {"A":"ABA","B":"BBB","reg":/([AB])/g}, 3));
// コッホ曲線
WScript.echo(Lsys("F", {"F":"F+F-F-F+F","reg":/(F)/g}, 3));
// シェルピンスキーの三角形
WScript.echo(Lsys("A", {"A":"B-A-B","B":"A+B+A","reg":/([AB])/g}, 8));

O:初期状態の文字列
P:書き換えルール
n:繰り返し回数
P.reg:置換する文字

L-systemの書き換え自体は2行の関数で済む
これに結果として出てきた文字列を描画する部分を追加すればL-systemが完成する


この記事が気に入ったらサポートをしてみませんか?