vvvvによる流れと波のシミュレーション(その1)
この記事はvvvv Advent Calendar16日目の記事です。
はじめに
vvvvで流体シミュレーションについて学んでいきます。
教科書はこちらを使用させていただきます。
流体シミュレーションの基礎から最終的にはプールに浮かんだボールをシミュレートするところまで、
簡潔な説明と多くの数式を用いて書かれているのでじっくり丁寧に読めば理解できる良書です。
(他に理論から実装まで丁寧に記載された本が見当たらなかったので、もしご存じであれば教えてください^^;)
この本はWebGLで流体シミュレーションを実装しようというものであり、実際にブラウザで動くサンプルコードが付属しています。
WebGLなのでもちろん実装はJavaScriptなのですが、この一連の投稿ではこのJSの実装をvvvvに書き直して動かしてみるというアプローチで学習を進めます。
本の説明をそのまま載せるわけにはいきませんし、かと言って専門家が書いた文章より分かり易く説明することも難しいので、
結構説明を端折ってしまうと思いますが、実装したコードはGithubに上げますので、興味がある方はpullして動かしてみたり、↑の本を買ってみてください。
FluidSimulation
(※学習を進めるうちに内容がどんどん変わると思いますがご了承ください…。)
普段はブログの初めで言い訳を書かないように気を付けているのですが、
あまり数学的素養がある方ではないので、この投稿シリーズは自分の学習の記録的な位置づけで書いています。
もし間違いなどありましたらコメントなど頂けると有難いです。
今回の教科書の範囲
最初~1.6.2まで。
(ちょっと間をとばして…)
1.6.6
ポテンシャル流れ
自分もこれとかこれとかみたいな綺麗なオーシャンビューやパーティクルを動かしたい!
というのが元々のモチベーションだったので、ワクワクしながら本を開いたのですがいきなりそんな綺麗な画はでません。
最初はこんな画を出すことがゴールでした…。地味。
流れの傾斜角: α
流量: Q(正: 湧き出し/負: 吸い込み)
自由渦の強さ: Γ
速度ポテンシャル: Φ
流れ関数: Ψ
x方向の速度: u
y方向の速度: v
最初からいきなり「速度ポテンシャル」とかいう言葉が出てきて何のこと?と混乱します…。
ポテンシャルは可能性とか潜在的な力とかそういう意味ですが、
「流れは速度ポテンシャルΦの低い方から高い方へ起こる。」
とのことなので、ここでもそんなニュアンスでいいんでしょうか。
この図では中心に湧き出しまたは吸い込み点がある場合、どのような流れが起こるのかをシミュレートしています。
全体的な処理概要は、
流れの傾斜角α、流量Q、自由渦の強さΓのパラメータから
速度ポテンシャルΦ、流れ関数Ψ、x方向の速度u、y方向の速度vを計算して可視化する、
というものです。
赤線: 速度ポテンシャルΦの等高線
青線: 流線
実際にα、Q、Γの値を変えると矢印や速度ポテンシャルや流線が変化します。
取りあえず動くとわかった気になりますね。(良くも悪くも…)
(つづく)