リアルタイムASCIIアートと流体シミュレーション

この記事はHiCoder Advent Calendar 2021の25日目の記事です。

 

メリークリスマスということで記事を書いていきます。

まず、これが今回作ったものです。

上記のサイトを使う際の注意点として、モバイルブラウザやSafariには対応していないためパソコンのChromeなどを使う必要があり、また物体を上手く認識させるには白い背景に物体を写す必要があります。

あとシミュレーションの際の障害物を1パターンしか作成していない上に、割とバグがあって流体が物体をすり抜けたりめちゃくちゃな速度で反発することがありますがそこは目を瞑ってください。

 

Webプログラミングは初めてでしたがほとんどのコードは以下のリポジトリから流用させて頂いたので僕自身はあまりコードを書いてません。

https://github.com/idevelop/ascii-camera

https://github.com/davidedc/Basic-fluid-simulation-in-the-browser

 

行なっている処理は、まずウェブカメラの映像を白黒に変換して画素の明るさごとにASCIIを割り当てて、ASCII文字列に対してSPH法を用いてシミュレーションを用いるというものです。

SPH法とはかなりざっくり説明するとたくさんの粒子を用いて擬似的に流体をシミュレートするもので、重力や他の粒子との距離から粒子ごと(今回だと画素ごと)にかかる力を計算してそれぞれの粒子の速度を求めて粒子の移動を計算しています。

 

もう書くことなくなっちゃったので終わります!!!良いお年を!!!