最終更新 2024/2/3

    数値計算結果の画像化など


今まで、数値計算結果を数値表にして、gnuplotでグラフ描画をすることはやっていたのですが、
そのうちに、画像そのものを描きたい、と思うようになりました。

不表示
(画像を右クリックして "Open image in new tab" などを選択すると、拡大表示ができます。)

Windows 11 環境で、Borland C++ Compiler を使っています。
まず mspaint で「真っ白」な BMP ファイルを作成しておき(600*600、256 色ビットマップ)、
それを自作のプログラムで読み込みます。計算結果をカラーコードに変換して描画領域に書き込み、
その画像データを別名の BMP ファイルとして保存した後、mspaint <file> を実行します。
すると mspaint は、先ほど作成した画像を読み込んで表示します。

 コンパイルをしたり作成したプログラムを起動するとき cmd を使うなら、ソースプログラムなどを置いている
 ディレクトリを explorer で開き、アドレスバーの右端(文字がない所)を左クリックして cmd と入力し、
 RETURN キーを押すと、cmd のカレントディレクトリーが、その場所になって便利です。

関数 x = fn(x) の繰り返し計算をするとして(x の値が次々と変わっていく)、それをどうやって
「2次元+色つき」のグラフにするか。
関数の戻り値を 0 <= x < 1.0 の範囲として、それを 10 段階に分けて、色を割り当てることにしました。
この場合、カラーコード(整数)= 10*x という関係になります。カラーコードと色の関係は:
不表示
0 は黒、1 は灰色、2 は少し薄い灰色、・・・ 9 は白です。

この Web ページの最初のグラフ画像は、座標の値 X*Y をスケーリングして (X*Y/262144)
カラーコードに変換し、プロットしたものです。
(0 <= X < 512, 0 <= Y < 512 です。オマケがついていますが、後述します。)

  ソース プログラム chc.cpp   カナ漢字が文字化けするかもしれません。
  ソース プログラム chc.cpp   クリックするとダウンロードされます。

コンパイルして作成した chc.exe は、コマンド アーギュメント を受け付けます。
 c:前掲のカラーバー、そして 1, 2, 3, 4.

不表示  不表示  不表示

上記の画像は、"chc 2", "chc 3", "chc 4" を実行して png 形式に変換したものです。

その説明は、かなり長くなるので、「ざっと」に留めておきます。

 "chc 1" は(この Web ページ最初の画像)、XY 座標の原点を画像の左下隅として、
 注目する点の X, Y 座標の値を乗算し、さらにスケール係数を乗算した後、カラーコードに変換したものです。
 上端のオマケは、8bit/pixel 全256色の mspaint 標準のカラーバー、
 右端のオマケは、「ここで描画範囲は終わりです」という「縦の点線」です。

 "chc 2" と "chc 3" には、一次元世界での「拡散」という考えが入っています。
 画像下端で初期値を設定し、「朱に交われば赤くなる」という数値計算を逐次実行し、
 その様子を画面の上端に向かって進めていったものです。 ・・2 と ・・3 は初期値が違うだけです。

 "chc 4" は、仮想的な点を決めて、そこからの距離に応じて、カラーコードに変換して
 プロットしたものです。まあ、練習。

 "chc 5" は、平地に「憧れの都」が2か所あったとして、「そこに行きたい人が多い」 。
 その場合、人口密度はどうなるだろうか。イイカゲンに計算してみました。

不表示 
はははー。

今後は、RGB 24bit 画像とかも、作ってみようと思っています。

 次のページへ