樹形図(再帰的描画)
図1の樹形図を再帰的に描く。プログラムのソース・ファイルなどは圧縮ファイルdrawTree.zipとしてまとめた。ファイル名drawTree.zipをクリックしてダウンロードできる。ダウンロードしたファイルをマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選ぶと解凍される。解凍されたファイルは、Visual C++などから開くことができる。
図1 樹形図
実行形式のファイルdrawTree.exe(.NET Framework3.5対応)は、ファイル名drawTree.exeをクリックしてダウンロード・実行できる。実行すると、まず図2のウィンドウが表示される。
図2 実行開始時のウィンドウ
画面上部左側のテキストボックス内に整数値(この値に対応した回数で再帰的描画が行われる)を設定して、「Draw」ボタンをクリックすると、図1のような樹形図が再帰的に描画される。再帰的描画は以下のコードによって行われている。
void
drawSeg( int n, double
x, double y, double
dir, double size ){
if(n > 0){
double x1 = x + size * Math::Cos(dir);
double y1 = y - size * Math::Sin(dir);
g->DrawLine(
pn, int(x), int(y),
int(x1), int(y1)
);
if (n == 15){
//
// 描画中の画像の表示
//
pictureBox1->Image
= pictureBox1->Image;
//
// プログラム実行中のWindowsメッセージの処理
//
Application::DoEvents();
}
//
// 次の枝のサイズと方向
//
dir
= dir * (uni() * 0.1 + 0.95);
size
= size * (uni() * 0.1 + 0.95);
//
// 再帰的描画
//
drawSeg(
n-1, x1, y1, dir - pi/10, size * 0.75 );
drawSeg(
n-1, x1, y1, dir + pi/10, size * 0.75 );
}
}
本プログラムの詳しい説明を<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房、第14.3節「樹形図」>に用意した。