アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは。

今日スライムで遊んでいたら、スライムがつぶれていく様子をモデル化してOpenGLとかで表示したら楽しそうだな、と思い取りかかりたいのですが、手がかりがありません。

こんな感じで表示したいというのをビデオに撮りました。ビデオは添付できないのみたいなので4コマにしてみました。左上、右上、左下、右下のように伸びで行きます。

球体からスタートして、おもちのような平べったい形にのびていく感じを再現したいです。完全な球体から始まり、真っ平らな平面に置けばスライムの広がり方はあらゆる方向に均一だと思うので、二次元平面で考えられるんじゃないかな?とか思うのですが。最初は円でどんどん楕円っぽくなっていく感じで。あとはそれを中心軸まわりで180回転させたものを成型、という手順で。

具体的には、
(1)どのような表示手法になるか。小さな粒子が集まっていると仮定、小さな立方体が集まっていると仮定、曲線の方程式であらわせるなどなど。
(2)必要な理論(流体力学?)

の2つが分かればあとは自分でなんとかできると思います。プログラムに関しては大丈夫なのでスライム力学(?)の方を重視で答えて頂ければと思います。粘性係数やその他のパラメータは自分でチューニングできるかと思います。特にどんなスライムでも構いません。

参考になる理論を紹介しているページとかだけでも構わないのでお願いします。

「スライムがつぶれていく様子を数式で表した」の質問画像

A 回答 (3件)

 本気でやれば(やれれば)、とっても面白そうですねぇ~(^^)。



 最初に思いつくのは、やっぱり流体力学です。それも粘性流体。具体的には、ナヴィエ・ストークス方程式・・・(^^;)。

 この方向では、計算手法は恐らく有限要素法でしょうから、小さな立方体(か三角錐)の集まりになります。ただナヴィエ・ストークスの数値計算は、恐ろしく難しいですし、粘性流体の本を読むのも極めて難儀です。いずれにしろ、偏微分方程式の知識が必要になります(自作するなら)。

 しかも境界条件が全周自由表面(空気との境界をそう言います)・・・でかつ移動境界問題(境界形状などが変化する事を、こう呼びます)・・・超難儀そ~だ~!。少なくとも自分には手が出ない(^^;)。

 望みがあるとすれば、2次元で良い事と、高粘性で低速度なので、ナヴィエ・ストークス方程式がいくらか簡単になる事くらいか・・・(^^;)。


 粘性ダンパー付きバネで結ばれた個別要素法なんかも考えられるが(粒々モデル)、計算が簡単になるかわりに、粒が粗いと、画像に影響が出そう(低解像度みたいな)。それに結局これも、特殊計算技術は必要になる。


 う~ん、そういう訳なので、以下余談で誤魔化します(^^;)。

 アポロ13という映画のアポロ・ロケット発射シーンの一部が、CGだったってご存知ですか?。実際にアポロ13の発射に立ち会ったNASAの関係者すら本物だと思った程の、信じられない出来の良さでした。自分は当然、全部ホンモノと思ってました。

 そのCG制作のために、ロケットの噴射炎や噴射煙を計算させる専用プログラムを開発し、専用スパコンで計算させて画像に落としたそうです。専用プログラムは恐らく、粒状体コードと言われる個別要素法の親戚で、超精密なものです。さらに煙の一粒一粒に噴射フレアーの輝度や色(温度に従った)を持たせる計算まで同時進行ですから、とんでもないものです。

 そうではあるんですが、こういう技術って、必ず一般ユーザーへと降りてくるんですよ。むかし昔、3DMaxをかじった経験がありますが、当時ですでに人形のような人間なら動かせるアニメーション機能(CG)が搭載されてました。

 マニュアルを読むと、大人気な某ゲームのCGを作ったアニメーション機能の移植だとか、書いてあった気がします。

 なので現在のCGソフトを調べてみるのも、手かもしれませんよ。(値ははるかも知れないが)案外スライムはあったりして・・・(^^;)。そして、そういう関係の情報の方が、有用かも知れない。

 蛇の道は蛇ですから(^^)。
    • good
    • 0

スライムは、ニュートン流体でないので、ナビエ・ストークス方程式(NS方程式)は使えないでしょうね。


スライムは、非ニュートン流体なので、レオロジーの知識が必要になります。
───数学的には、テンソルの知識が必要になります───

レオロジー
http://ja.wikipedia.org/wiki/%E3%83%AC%E3%82%AA% …

また、かりにNS方程式で解こうとしても、NS方程式の数値解析は、死ぬほど難しい。加えて、さらに、いろいろな数学的知識が必要になります。

そして、これを解くためのプログラムを作るのはかなり至難の技。
プログラムだけでも、数千行は最低必要だと思いますよ。
バグ取りが終わっても、たぶん、このプログラムでは計算が収束しない。
解が発散したり、振動したりします。その解決にまたかなりの時間を必要とします。場合によっては、計算の主要部分のアルゴリズムを変えて、プログラムの大部分を作りかえなければなりません。

ですから、
素人さんがこれを1からやるのは、まず不可能だと思いますよ。

で、仮に市販の流体力学の解析ソフトを買って(かなり高額です)、それを使って解析するとしても、それで解ける保証はありません。
スライムの形状が変化するのが、ちょっと問題なんですよ。
その境界をどのように与えるか、境界条件をどうするか、それをどのように与えるか、これがかなり厄介・・・。

さらに、これは、「三次元」+「時間」の四次元の計算になります。
仮に空間の分解能を100×100×100とすると、100万。時間の分解能を100とすると、10億。仮に単精度1byteだとしても、これだけで1GBの記憶容量が必要になります。速度u、v、wの3つ、加えて圧力pで計4つ。空間の点と流れの分だけで記憶容量だけで5GB。この他にさまざまマトリックス・行列の分の記憶容量も必要。

1時間ステップあたり、
最低でも100万元の連立方程式を解かないといけないので、この連立方程式を解くための計算回数は、直接法ですと(100万)^4回程度。
しかし、NS方程式は非線形なので、1時間ステップあたり、これを何度も反復して解を収束させなければならない。たぶん、この反復計算は数十回から百回程度。
これを100ステップ行わないといけません。

試しに10万~100万元の連立方程式を一度コンピュータに解いてみてはいかがでしょうか。連立方程式の係数は、乱数ででも発生させて、解かせてみる。
そうすると、この計算に要するおおよそのめどが立つと思いますよ。
その計算所要時間を1万倍くらいしたものが、この計算に要するおおよその時間です。

スライムの運動に軸対称を仮定すると、空間の分解能は100×100になって、計算時間はかなり減るとは思いますがね。
    • good
    • 0

NO2です。



NO2の回答の一部を訂正!!

【誤】仮に単精度1byteだとしても
【正】仮に単精度2byteだとしても

【誤】この連立方程式を解くための計算回数は、直接法ですと(100万)^4回程度。
【正】この連立方程式を解くための計算回数は、直接法ですと(100万)^3回程度。

ですね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!