2020-02-03先日の記事では関数プログラミング的な書き方でBlenderのpythonスクリプトを書いてみたけど、その続きです。今回はリスト操作の便利さと関数の改変・再利用について触れてみます。オブジェクトをいくつも扱うときはリスト操作の扱い方の習熟度で効率は随分変わりますから、pythonのリスト操作は是非とも慣れてください。最後に今回やること前回はBlenderのPythonスクリプトで立方体の中に球体を詰め込んだ3DCGを作ってみたのですが、そのスクリプト内の関数を少し書き換えて、時計の時間(hour)のいちに球体を置くことをしてみます。前準備としてリストのmap操作を少し解説します。とリスト操作mapというのはリスト操作をするときに欠かせない関数で、これを自在に扱えるかどうか?というのは生産性に大変影響が出るものです。関数とリストをとるのですが、その関数を自在に作ることで多様な操作が可能なんですね。次のようなmap操作をしてみます。対応するところでも良い)を使った出力例です。4つの要素からなるものを作ってます。中身を見る場合は、rangeはrange専用の型になってるのでlistに変換する操作でout[2]を出力しています。なってるのが無名関数あるいはラムダ関数と呼ばれるものです。関数を別に定義するほどでもない関数を表現するときに使います。この場合だったら、変数eに2を足すということです。[0..3]を[2..5]に変更する操作です。mapの操作でもmap専用の型になるためにそのままではOut[3]のように表現されます。このへんは今は深く知る必要はないからおまじないと思ってください。mapやrangeの中身を見るときはlist関数で変換しないと見えないってだけです。43]無名関数は引数はいくつも取ることは可能なことを示してます。l2という2つ目のリストを作ってます。ここでは数字の2桁のものにしています。ここで気をつけなきゃいけないのはlもl2も要素の数が同じ4つにしている点です。処理は要素の数が少ない方に合わせたものになります。lが4つの要素のリスト,l2が5つの要素のリストでも4つの要素のリストを返すようになってます。これがかんたんな注意点ですねん。43]なれてきたらいろんな事ができるから、本当にipythonなどを利用して、リスト操作をなら親しむように学んでみてください。ここでappendというのを使ってますが、リストの後ろに新たな要素50を加えるという操作をしています。一覧があって、どれも基本操作で習熟しておくものなのでぜひともipythonでいろんなリストを作って自分で処理してみて動作を身に着けてください。pythonスクリプトで円周上に球体を置く今回は円周上に球体を置くということでsin,cosといった正弦関数とラジアンの変換関数を利用します。これらはpythonの標準mathライブラリに含まれています。create_objs(locs)main()前回の記事のソースを使うのですが、今回は立方体の中に球体を埋めるようなリストを作る関数ではなくて、円周上に置く球体の3次元座標をリスト化するものになります。下記のソースを見てわかるようにobject_locsからobject_locs2というものを作ってます。関数の引数は、円周の半径r(デフォルト4)と何度ごとに球体を置くか(デフォルト30度)をかいてあります。lこのように関数を変えてるけど、各行は次のような意味です。360度を30度ごとに配置するので12個(div_n)作ります。cos(x),0)でかけるんですね。math.sin,math.cosというのは角度をラジアン単位を使うので、math.radiansをりようして角度をラジアンに変更するんですね。最後の引数はrangeで360度を12等分した数字のリスト(0,30,60,...)をつくってます。結果のリストを返り値にしています。左側はobject_locs2のパラメータをr=10,step_degree=10にしたもの。右側は新たにobject_locs3という関数を用意して、無名関数内のz座標部分を少し書き換えたもの。上記のスクリプトを少し変えるとこのギャラリーのようなものを作れます。object_locs2(r=10,step_degree=10)にしてやれば再現できます。左側はobject_locs3というのを新たに作成して、object_locs2のmapの引数にある無名関数のz座標を正弦関数と半径の大きさを少し変えてつくったものです。ソースは公開しないけど、ちょっと書き換えたら作れるので、上記のソースコードを少し改造して同じようなものが作れるか自身で確かめてください。無名関数の角度のところも少し手を入れています。最後に今回mapと並んでobjectを扱う上のリスト操作で重要になってくるfilter関数についても書こうと思ったのですが、記事が長くなったので次にします。語感の覚えやすさとフリック入力で打ちやすいアルファベットを選んだ名前です。それ以上の意味はありません。運営してるブログです。Gmailのy.takenakaです。2020-01-123DCG修行記スカルプトモデリングを行う。2020-02-01フェイスブックの専用ページを作ったのでもしよければご登録お願いします。登録していただけると励みになります。