さて、前回の9回目の続きです。
だいぶ難しくなったと思いますが、実はプログラムの基本動作としては4つのことしかないのです。
- プログラムは1行ごとに書き、それは上から下に順に処理される
- 数値や文字を入れる変数に値を入れたり出したりして記憶する
- 回数を決めて、同じ処理を繰り返す
- 数字や文字を見て判断して、処理の流れを変える
どうですか?そんなに大変ではないことが解ったと思います。前回までで既に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で動かしましょう。