前回の続き、季節外れの葉っぱネタで、より複雑な剛体運動の練習台として。
紅葉を撮影している際にいつも不思議に思っていたのだけれども、落下している葉っぱを見ると決して自由落下しているわけではなく前後左右にヒラヒラとカオスな動きをしている。
なんらかの物理法則が関係しそうと思うもののこれまであまり深く追及することはなかった。
今回折角なのでこの挙動をblender上で再現してみようと思いWebトローリングしてみた。
いくつか論文が見つかったのだが、その中で最もエレガントだと感じられたのがこれ。20年以上前に書かれたもので、著者は日本人。
ここでは紙片が落ちるカオスな運動を表現するモデルについて考察されていて、挙動に関しては同じヒラヒラ系なので葉片と等価のはず。
二次元での挙動モデルなので実際に応用するには細工をして三次元に拡張する必要があるが。
この論文の核心部は「ヒラヒラ」を表現する並進・回転運動は4つの式で表現できること。
詳細に関しては本文に譲って簡単に書くと、紙片の長さ・空気との密度比・重力加速度・面に水平・垂直方向それぞれの空気との摩擦係数を入力として、それらの結果発生する揚力・摩擦力・重力の時間変化で挙動が決まってくる。
とりわけ重要なのが水平・垂直方向の摩擦係数の値と比率が「ヒラヒラ」のカオス感に大きな影響を与えるらしい。
ということやってみた。
数式は連立微分方程式なので既存のソルバーライブラリを使ってRunge Kutta法などで容易に数値解が得られる。
プログラムから使えそうなソルバーはscipy odeintやboost odeintなどがあるが、今回はopenframeworksを使ってC++で計算しながらプレビューしたかったので後者を使う。
以下はopenframeworks上でのいくつかのパラメータでの簡易プレビューに続いて計算結果である運動の軌跡をblenderに読み込んでPhotogrammetryで再現した葉のメッシュに適用してレンダリングしたもの、そして最後に某流体系ソフトで計算した流体運動を取り込んだもの。
そこそこリアルな動きをしているのではないかと。
単純な剛体に関しては随分とノウハウが解ってきました。