宇宙の深淵に触れてみる? 黄金比でジェネっぽいことしてみた
2014/2/10
どもです、冬は苦手です、伊藤です。
今日とりあげるのは「黄金比」です。英語では golden ratio。
なんか自然界には黄金比になっているものがいっぱいあるとか、
グラフィックデザインとかでバランスを黄金比にすると美しく見えるとか、
ほら、オウムガイのあの図とか、有名ですよね。
(※わからない方はこちら→ google先生「オウムガイ 黄金比」)
有名なんですけど使いどころがよく分からないというか
ぶっちゃけほんとに美しいの?みたいな感じで逆に興味を持ったので
よーし、今回はこれを使ってちょっと遊んでみちゃうぞ。
それからそれから
…と思って調べていたんですが、
なんかオウムガイのアレは、最近では俗説扱いみたいですね!
しらんがなw
という感じではありますが、
個人的にはあれが代名詞だろ的なイメージもあったのに「じつは黄金比じゃありませんでしたー!」っていうのは
やる気半減です。あーだめだ、頓挫。完。
…というわけにもいかないのでそっちじゃない方向で調査を続行、
黄金比は構図や面積比的なものだけでなく、角度にもあるらしいじゃないですか。
なんでも「黄金角」とおっしゃるそうで、
お、これなら遊べそうですよ。
やってみるよ
まずは黄金比φ(ファイ。phi)をpythonで求めてみます。
このあともいろいろ使うと思うのでmathモジュール読み込みも。
1 2 | import math phi = ( 1 + math.sqrt( 5 )) / 2.0 |
つづけて、黄金角α(アルファ。alpha)。
1 | alpha = 360 / ( 1 + phi) |
これを使って、Mayaでオブジェクトをばらまいてみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import pymel.core as pm count = 1000 i = 0 while i<count: dot = pm.polySphere(sa = 8 ,sh = 8 )& #91;0] grp = pm.group() dot.setTranslation(& #91;0,0,i/phi]) grp.setRotation(& #91;0,i*alpha,0]) i + = 1 & #91;/python] <a href = "https://dftalk.jp/cp-bin/wordpress/wp-content/uploads/2014/01/gr1.png" rel = "lightbox" ><img class = "alignleft size-medium wp-image-11485" title = "golden ratio 1" src = "https://dftalk.jp/cp-bin/wordpress/wp-content/uploads/2014/01/gr1-300x155.png" alt = "黄金比配置 1" width = "300" / >< / a><br clear = all / > ほっほーなるほど、 これはあれですか、<b>ヒマワリの種< / b>の並びとか、 そういう感じですかね。 確かに美しいような気もします。 まるで僕にも美しいものをめでる心がのこっていたかのようです。 あとなんか宇宙っぽいような気もします。宇宙。 <h3>~~宇宙~~< / h3> というキーワードでなんとなく<b>電波を受信< / b>しましたので、 以下のように書き換えてみました。 [python num = 1 ] startCount = 401 count = 1000 for i in xrange (startCount,count): dot = pm.polySphere(r = 9 ,sa = 8 ,sh = 8 )[ 0 ] grp = pm.group() dot.setTranslation([ 0 , 0 ,i / phi]) grp.setRotation([ 0 ,i * alpha, 0 ]) |
ふむふむ
心持ち宇宙を書き換えたよな気がします。
根拠の無いやる気が出てきました。
ちなみにPython3系だと、
rangeとxrangeと同じ振る舞いになるためrangeを使えばいいらしいですが、
きっとMayaが3系になるのは数百年後だしゲッフゲフ
さて引き続き、
モチベーションに従ってこれを花火っぽく動かしてみましょう。
たとえば、こう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import random rand = random.random startCount = 401 count = 1000 eStr = [] dur = 30 expNode = pm.expression(s = '') for i in xrange (startCount,count): dot = pm.polySphere(r = 9 ,sa = 8 ,sh = 8 )[ 0 ] grp = pm.group() r = round (i / phi, 4 ) dot.setTranslation([ 0 , 0 ,r]) grp.setRotation([ 0 ,i * alpha, 0 ]) spacer = rand() * r / 4 spacer = round (spacer, 4 ) tempstr = '%s.tz = frame*(%s/%s)+%s;' % (dot.name(),(r - spacer),dur,spacer) eStr.append(tempstr) expNode.setExpression(u '\n' .join(eStr)) |
どうでしょうか。
これでだいぶ宇宙を書き換えてる花火っぽくなった気がします。
あとは直線的な動きではなくてひねりを加えたり、色を変えたりすれば
より「ぽさ」を演出できるのではないかと思います。
画面にいっぱい打ち上げれば立派にジェネレイティヴCGできるじゃありませんか(安直
(※ちなみに、もっとゆっくり広げたい場合は dur の値を大きくしてみてください)
むすび
なんか黄金比とりあげよーっとか思ったときには
こんなところに着地するとは思っていなかったのですが、
元ネタの映画がお分かりの方は今度飲みに行きましょう。
あと螺旋配置という意味では黄金比関係ないのでいろんな螺旋で試してみてください(ぇー
春になるのが待ち遠しいですね。
それでは。
※免責事項※
本記事内で公開している全ての手法・コードの有用性、安全性について、当方は一切の保証を与えるものではありません。
これらのコードを使用したことによって引き起こる直接的、間接的な損害に対し、当方は一切責任を負うものではありません。
自己責任でご使用ください
[…] これらマウスイベントと以前の記事で伊藤が書いたものを合わせると以下のようなものができます。w (参考: 宇宙の深淵に触れてみる? 黄金比でジェネっぽいことしてみた) […]
Posted at 2014.08.11 12:02 by デジタル・フロンティア-Digital Frontier | DF TALK | Processing で遊びながらプログラミングの基礎を学ぼう!