Up

関数の等高線図の描画

 

 関数の等高線(図1)を描くプログラムを用意した。プログラム名DrawContour.exeをクリックしてダウンロード・実行することができる。プログラムは.NET Framework 3.5対応である。

図1

 

図1は、関数CheckF

 

        double CheckF( double x, double y ){

                return sqr(sqr(0.5*x)) + sqr(sqr(0.5*y)) - 2.0 * (sqr(0.5*x) + sqr(0.5*y));

        }

 

の等高線を描いたものである。関数値の低い値は青の線に、高い値は赤の線に対応するように関数値の高さに応じて青と赤の比率を変化させて描いている。同じ関数を立体図として描くプログラム例は<関数の立体図の回転>に用意している。

 等高線の描画アルゴリズムはreadme.pdfで説明した。

 プログラムを実行すると、まず図2のフォームが表示される。

図2

 

GO」ボタンのクリックで図1の描画用ウィンドウが表示される。これは以下のコードによって実行されている。

 

private: System::Void buttonGO_Click(System::Object^  sender, System::EventArgs^  e) {

         //

         //                     描画用フォームの生成

         //

         DrawingContour ^ cf = gcnew DrawingContour();

         cf->Show();

         cf->SetDrawingForm( this );

         cf->Init( CheckF, -3.0, 3.0, -3.0, 3.0 );              //              CheckF: 描画対象の関数

         }

 

DrawingContourが描画用フォームの参照クラス型であり、ヘッダーファイルDrawingContour.hに宣言されている。描画用フォームのヘッダーファイルとして独立して用意されているので、他のプログラムに容易に取り込んで利用することができる。この子フォームの再利用法については<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>の第17.2節「子フォームの再利用」で説明している。

等高線の描画範囲は、図3に示す画面左上のテキストボックスに、横軸のx座標の端点、最小値min-xと最大値max-x、および縦軸のy座標の端点、最小値min-yと最大値max-y、の設定後、「Draw」ボタンをクリックすると、設定した値で等高線の再描画が行われる。N-Linesは等高線の数であり、値が大きいほど等高線が密に描かれる。

図3

 

描かれた等高線図は、「Save」ボタンのクリックで保存することができる。保存した画像ファイルはペイントやワードなどで開いて編集して利用することが出来る。

描画対象の関数は、ヘッダーファイルcommon.hとソースコードファイルcommon.cpp

 

        double CheckF( double x, double y ){

                return sqr(sqr(0.5*x)) + sqr(sqr(0.5*y)) - 2.0 * (sqr(0.5*x) + sqr(0.5*y));

        }

 

のように宣言・定義されている。この関数は

                                 cf->Init( CheckF, -3.0, 3.0, -3.0, 3.0 );     

                                 SetGVF( CheckF );

のようにして用いられている。

 等高線は、以下のコードによって、等高線の表す関数値に合わせた色によって描かれている。

 

        for (int istep = 1; istep <= NLines; istep++){

                Update();                                       //                      等高線の途中経過の

                pictureBox1->Image = pictureBox1->Image;        //                      描画

                //

                //                      高さに合わせた色の設定:  青ー>低い、 赤ー>高い

                //

                int vred = int(255.0 * (istep - 1.0) / (NLines - 1.0));

                int vblue = int(255.0 * (NLines - istep) / (NLines - 1.0));

                pn->Color = Color::FromArgb( vred, 0, vblue );

                cv = MinFV + (MaxFV - MinFV) * istep / (NLines + 1.0);          //              等高線の高さ

                for (int i = 0; i <= n; i++)

                        for (int j = 0; j <= n; j++)

                                ckgvf[i][j] = 0;                                //                      描画チェック済み用配列

                for (int i = 0; i <= n; i++)

                        for (int j = 0; j < n; j++){

                               

                               

                               

 

 プログラムのソースコードファイルなどは圧縮ファイルとしてまとめた。圧縮ファイル名DrawContour.zipをマウスの右ボタンでクリックしてダウンロードすることができる。ダウンロードした圧縮ファイル名をマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍することができる。解凍したプログラムファイルは、Visual C++2008で開くことができる。

 

 Visual C++プログラミングの入門解説は<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>で行っている。

 

Up