--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2011/10/25

神話の翼を描く【カオスでCG】

先日サイエンス社の「CによるカオスCG」(川上博/上田哲史=共著)をAmazonで取り寄せた。

こちら初版が1994年と17年前のc言語を扱っており、ソース自体は古いが納められている内容はカオスCG向けのものばかりなので、大いに参考になった。

今回は息抜き程度にこの本の内容の一つ「神話の翼を描く」を実行した。

設定やソースをを説明する前に、まずは結果として描いた図形の一つを下に紹介する。


3枚の翼

3枚の翼 (a=-0.96,b=0.97)



3枚の翼が合わさったようななんとも不思議な図形である。

しかしこれを描くのに複雑な数式は必要ない。以下に示すたった2行の数式でこの図形は形成されるのである。

翼状図形を描く写像の例
 
 



上に示した図形はこの数式で(a=-0.96, b=0.97)として反復計算を行った結果をプロットしたものである。

非常に簡単だが、c言語のソースとgnuplotによって翼状図形を描く手順を以下に記す。

c言語ソース
/*神話の翼を描く*/
#include<stdio.h>
#include<math.h>

int main(void){

double x0=0.1, y0=0, x1, y1 ;//変数
double a, b ;//パラメータ
int i ;
FILE *fp;

if ((fp = fopen("tsubasa.dat", "w")) == NULL) {
printf("file open error!!\n");//tsubasa.datというファイルに出力する

}else{

printf("a > ");
scanf("%lf",&a);
printf("b > ");
scanf("%lf",&b);//端末からのパラメータa,bの入力

for(i=0;i<50000;i++){

x1=y0+a*x0-5.0/(x0*x0+1)+6.0+0.2*exp(-y0*y0);
y1=-b*x0; //数式部分
fprintf(fp,"%lf %lf\n",x1+y1,x1-y1); //現在のx,yを出力(描画のため引き伸ばし)
x0=x1;
y0=y1; //現在のx,yを次回の入力値にしてループ
}
}
fclose(fp);
return 0;
}


gnuplotでの描画手順
端末上で上記のプログラムを実行したあと、その場所でgnuplotを起動する。あとは以下のように入力していけば図形が描かれたファイル「tubasa.jpeg」が生成される。

$ gnuplot
gnuplot> set size square
gnuplot> set term jpeg
gnuplot> set output "tsubasa.jpeg"
gnuplot> plot "tsubasa.dat" with points pt 5 ps 0 lt 3


パラメータであるa,bの値を様々に変えることによって描かれる図形も異なってくる。では数例パラメータを変えて出来上がった図形を紹介しよう。

4枚の翼5枚の翼
a=0.02,b=0.97             a=-1.60,b=0.99

7枚の翼9枚の翼
a=-1.79,b=0.99             a=-1.844,b=0.97


順に4枚、5枚、7枚、9枚の翼が見て取れる。
最初にも述べたが、参考文献は「サイエンス社 CによるカオスCG」である。

神話の翼」と銘打っているわけだが、この程度の構造ならばごく普通の鳥の翼にも見られる。あの美しい羽の並びが、実は単純な法則から組み上がっているのかもしれないと考えるととても興味深い。

カオス理論では、「創発」という用語がキーワードの一つになっている。「創発」とは、「構成要素間の局所的な相互作用が系全体の大域的構造を生成することで、全体は部分の総和ではないという非線形現象の特性」のことである。

この翼のプログラムの例で言うと、xとyという2つの要素の前後の関係さえ与えてやれば、反復とともに要素が翼の形を生み出すということだ。出来上がった図のプロットのうち一つの点を取り出しても、それは座標上の1点に過ぎない。重要なのは点と点の間の相互関係である。

複雑系ーカオスにおいては、上の文で度々出てきた「相互作用」もキーワードのひとつとなっている。
系の要素を細分化して見ていくのではなく、系の要素間の相互作用を考えるのである。相互作用の法則さえ見つけてしまえば、全体の挙動を知ることが可能になるのだ。

今回の記事を書きながら私も、部分どうしの単純な相互作用が思いもかけず複雑な構造を生み出すのだということを実感した。今後もカオスCGを描きつつカオスを学んでいきたい。ではまた次の記事で。ありがとうございました。


関連記事
スポンサーサイト

コメント

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。