« プログラミング | トップページ | 続・楽しんでスクリプト »

2010年5月 5日 (水)

楽しんでスクリプト

昨日スクリプトのことを書いたので、今日もその流れでひとつ。



僕がCG業界に入ったばかりの頃の話です。美大出身の僕は、会社に入るまでコンピュータに触ったことすらありませんでした。今ではコンピュータを触ったことがない人間がいきなりCG会社に入るなんて信じられない話ですが、CGの学校がほとんど無かった20年前は普通のことでした。OSも今のようにGUIなんて便利なのは無く、UNIXをいちから覚える必要がありました。

そんな中で、先輩のひとりに、シェルプログラミングで仕事とは全然無縁のスクリプトをやたら書いていた人がいたんですね。出前でとった食事のお金の清算をするスクリプトとか。僕のスクリプト経験はそんな仕事とは無関係のちょっと面白そうなスクリプトの中身を覗くことから始まり、SEの人たちに色々教わったりしながら、社内のゴシップ記事を投稿する秘密の掲示板なんかを作ったりしてました(笑)。

堅苦しくない、遊び感覚でスクリプトが覚えられるといいですよね。下記のスクリプトは、自分の近くにいる幽霊を探知するためのMayaのMELスクリプトです(笑)。僕の以前のウェブサイトで公開していたこともありましたが、そのときは幽霊の存在を絵で示したり、ちょっとしたGUIがついていてこれよりは手の込んだ代物でしたが、今回のはそこからGUIの要素を省いて、スクリプト入門者でも理解できるように簡略化しています。こんなものでどうして幽霊の存在がわかるかと思われるでしょうが、まあシャレの一種だと思ってください。とは言っても全然根拠の無いものではなく、一応それらしいアルゴリズムはあります。

このスクリプトのメインの機能は、たくさんの整数をランダムに発生させ、偶数と奇数の発生比率を計算するというものです。サイコロを何万回も振る様子をイメージしてもらえるとわかりやすいと思います。普通は発生させる整数の数が多ければ多いほど、偶数と奇数の出る比率は50%ずつに収束していきます。しかし近くに幽霊がいると、磁界に変化が起き、偶数と奇数の発生比率に大きな差が出るらしいんですね。ということを何かで聞いた気がして、こんなスクリプトを作ってみました。

-----------------------------------------------------------------



//幽霊探知MELスクリプト

// 探査制度を指定します。 0: 低、1:中、2:高

int $mode = 0;

// 変数の宣言と初期化

int $n, $v;
float $mod, $h;
int $even = 0;
int $odd = 0;

// 探査制度ごとに乱数発生の数を指定

switch($mode) {
   case 0:
      $n = 1000;
      break;
   case 1:
      $n = 10000;
      break;
   case 2:
      $n = 1000000;
      break;
}

// 乱数の発生と偶数・奇数のカウント

for($i = 0; $i < $n; $i++) {
   $v = rand(0, $n);
   $mod = fmod($v, 2);
   if($mod == 0) {
      $even++;
   }
   else {
      $odd++;
   }
}

// 発生比率の差を計算

$h = abs($even-$odd)/$n*100;

print("偶数: "+$even+", 奇数: "+$odd+", 差="+$h+"%\n");


-------------------------------------------------------------

スクリプト初心者向けにはなってしまいますが、このスクリプトの解説を次回おこなおうと思います。

本日はこれから東京・阿佐ヶ谷へ、知る人ぞ知るシンガー・ソングライター米村裕美の10年振りのライブに行ってきます! なので葉山のギャラリーは14時でクローズ。

|

« プログラミング | トップページ | 続・楽しんでスクリプト »

CGのこと」カテゴリの記事