文系デザイナーのためのmaya MEL/Python基礎の基礎⑪

さて、前回の9回目の続きです。
だいぶ難しくなったと思いますが、実はプログラムの基本動作としては4つのことしかないのです。

1.プログラムは1行ごとに書き、それは上から下に順に処理される
2.数値や文字を入れる変数に値を入れたり出したりして記憶する
3.回数を決めて、同じ処理を繰り返す
4.数字や文字を見て判断して、処理の流れを変える

どうですか?そんなに大変ではないことが解ったと思います。前回までで既に1~3までやっているのです。
で、今日は4の「判断して」をやります。

例えば「螺旋階段の各階ごとにフロアのキューブを追加する」というのを作るとします。
繰り返しますが、プログラムの勉強をしてはダメです。あくまで3DCG制作であることを前提に考えてください。

まずは、Python IDLEです。⑨の最後のプログラムをOpenで開きます。



これはMayaの命令を入れたので、もうIDLEでは動きません。
そこで、Maya命令がある行で「ALT+3」を押します。

すると、コメントアウト(実行しない行)にしてくれるのです。元に戻すには「ALT+4」です。
試しにF5で実行すると正しく動きます。

では一番下に以下のコメント入れます。

これをPythonプログラムにします。ここで大切なのはいきなり本題に入るのではなく、できるところから実験していくことです。階段は一段づつ上がればいいのです。頑張ってハイジャンプすると危険ですよね?それと同じです。

まず、以下の青い箇所を入力してみます。同時に繰り返し命令のforを15にします。
こうしないと1階分もできないからです・・・

新命令「if」の登場です。ifはその後に判断する条件を入れます。「==」は「左右の値が等しい時」という意味です。
この場合、回転角度ryが360度に一致したら、という意味です。
ifが確認したら、その下の行のインデントされたものを実行します。これは何行あっても構いません。print “?階”は、単に「?階」と表示するだけです。

ifが角度ryが360度に一致しない場合は何もしません。この場合はforの中にあるので、繰り返しをするだけです。
では実行してみましょう!


ちゃんと「if」が仕事してますね!?でもこれでは720度、1080度とか増えた場合、対応してくれません。「360の倍数」という条件を作らないといけません。

そこで、こう書き換えます。

「ry%360」はryを360で割った余りを計算する式です。一般の数学では出て来ない演算の記号です。
余りがゼロなら360の倍数であることが判断できますね?

0/360=0・・・余り0
30/360=0・・・30


330/360=0・・・余り330
0/360=0・・・余り0
390/360=1・・・余り30

720/360=2・・・余り0

さらにprintを書き換えてtyはコメントアウトし、trだけifのインデントの下にカット&ペーストしています。

print ry/360+1,”階” とは、「ryを360で割って1プラスしたものを計算して表示」、という意味です。
その後に「階」を連続して表示します。forは40階にしています。
実行すると・・・


このようになります。
ちゃんと螺旋階段の角度をコンピュータが判断して階を理解していますね。

今日はここまでです。次回、これをMayaで動かしましょう。

コメントを残す