- ベストアンサー
VBでの二次元流体解析について
- VBで二次元流体解析をする際の注意点や方法を解説します。
- VBを使用して流体解析を行う際に生じる時間変化する数値を、動画の形で可視化する方法について説明します。
- VBを使った流体解析に関するキーワードや情報の調べ方についてアドバイスします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
VBの二次元流体解析コードは作成できる、という前提で書きます。要するにここで述べるのは、結果の処理部分についてだけです。 http://ja.wikipedia.org/wiki/カルマン渦 のカルマン渦動画をクリックしてみて下さい。動画の詳細情報ページへ行けるはずです。そこには、こう書かれています。 Vortex-street-animation.gif 400 × 200 ピクセル、 ファイルサイズ: 36キロバイト、 MIME タイプ: image/gif、ループします、 8 フレーム、0.8 s つまりこの動画の正体は、gifファイルです。このgifファイルは8ページ(8 フレーム)のページ付gifファイルで、ページが0.8秒(0.8 s)間隔で切り換わっているだけです。ページを切り換えてるのは、もちろんInternet Exprolerで、これはIEのデフォルト機能です。HPの実体であるhtmlファイルに、ref参照でページ付gifファイルを読ませただけで、こうなります。 同じ事は、VBの(つまり.NETの)PictureBoxでも可能です。PictureBoxのImageプロパティーに同じgifファイルを設定すれば、同じ表示が得られるはずです。たぶんこの方法が、最も簡単な動画の作り方です。 ページ付gifファイルは、複数の画像ファイル(種類はなんでもOK)を、一つのgifファイルにまとめる事で作成できます。その方法は、HPビルダーのアニメーションファイル作成機能を利用するのが、たぶんお手軽ですが、PhotoShopなどの画像ソフトなどでも行えますし、そのような機能に特化したフリーソフトのけっこうありそうなので、ここでは省略します。 そうすると、ページ付gifファイルの元ネタになる、個々の画像ファイルのVBでの作成方法、という事になると思います。 ふつうは数値計算結果をPictureBoxに時間ごとに描画し、そのImageプロパティーを時間ごとに別のファイルに吐き出す、という事になると思います。 ここから先はVBでもC++でもC#でも、.NETのライブラリーを使用するので、どれでやっても同じです。というか.NET以降、VBもC++も、ランタイムやクラスライブラリーのほとんどを.NETに吸収されてしまったので、同じになるのは当然という訳です。その前提で出て来たのが、C#です。 まずGraphic関数群は、GDI+(Graphic Device Interface +)の名でまとめられてます。ここに含まれる関数群は、古くはC++から利用したGraphic系API関数の.NET版です。チュートリアルもあるので、Visual Stuidioのオンラインヘルプで調べて下さい。 GDI+の関数は、Graphics オブジェクトのメソッドとして使用するのが普通です。Graphics オブジェクトは、例えばPictureBoxの物理的描画面に対応するメモリ領域への参照です(デバイスコンテキストと言われます)。 任意のタイミングおよび、適当なイベントプロシージャのシステム引数として、Graphics オブジェクトは常に自由に取得できます。例えばPictureBoxは、自身のGraphics オブジェクトを取得させるメソッドを持っています。 Dim G as Graphics = PictureBox.CreateGraphics() G.Line(なんたら(^^;)) とかやる訳です。チュートリアルもあるので、Visual Stuidioのオンラインヘルプで調べて下さい。 最後に、PictureBoxに描画された画像をファイルに落とす機能は、Bitmapクラスが受け持ちます。これにもチュートリアルがあるので、Visual Stuidioのオンラインヘルプで調べて下さい。Bitmapとは名ばかりで、jpgもtifもpingも何でもOKです(^^)。 動画を扱うにはAnimatableクラスを用いる方法もありますが、とりあえず不要に面倒になりそうなので、こんなところでどうでしょうか?。 ※フレームアニメーション管理の話は、まぁ暇な時にでも・・・(^^;)。
お礼
解答有り難うございます。何となくですが、方向性がつかめました。詳しいことについては正直まだチンプンカンプンですが、これからプログラムを弄ってみて、教えていただいた事についても調べながらやっていこうと思います。 また分からない事があれば質問させていただくので、そのときはご回答よろしくお願いいたします。