最終更新 2024/3/3

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

「朱に交われば赤くなる」というイイカゲンな「拡散現象のシミュレーション」を始めました。

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

cht.cpp をコンパイルした cht.exe は、コマンドライン アーギュメント
を受け付けます(拡散シミュレート演算の回数指定)。前掲3つの画像は、左から順に、
 cht 0:   元データ。
 cht 60:  60 回の繰り返し拡散演算後。
 cht 200: 200 回の繰り返し。

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

このプログラムは white24.bmp というファイルを読み込みますが、これは mspaint で
作成した、516*516 pixel, 24bit/pixel の "真っ白な" 画像ファイルです。

拡散演算の繰り返し回数を増やしていくと、予想通り、黄色い縦長三角形が見えなくなります。

     *     *     *

以上はソースプログラムで「#if 1 // 縦長三角形」という指定をしていました。
以下は、その #if 1 を、#if 0 に変えた場合の話です。

拡散現象のシミュレート演算をするなら、「背景」と「ネタ」が必要でしょう。
画像の中心(ox, oy)に円があるとして、その円周を XY 座標の「角度」に応じて増減させます。
ソースプログラムを抜粋すると、注目する pixel(i, j)について、
(oxi = ox - i, oyj = oy - j, c = 255 です。)

  a = pow(pow(oxi, 2) + pow(oyj, 2), 0.5);
  th = (oxi != 0) ? atan(oyj/oxi) : M_PI/2;
  b = 120 + 80*cos(mt*th);
  if (a < b)
    *d++ = 0, *d++ = c, *d++ = c; // 黄色
  else
    d += 3;

(a は注目する点の、仮想円の中心からの距離、
 th は仮想円の中心から見た角度、
 b は cos() を使って波打たせた仮想円(の円周)の中心からの距離)

仮想図形の内部なら、黄色に塗り、そうでなければ、何もしません(背景色のまま)。
「ネタ」を作っているうちに、「おもしろい図形」が描けることに気づきました。

次の画像は、左から、「cht 0」「cht 2」「cht 3」「cht 4」を実行した結果です。



ソースプログラムの cos(mt*th) の mt の値を、もっと大きくしてみました。
次の画像は左から、「cht 5」「cht 7」「cht 32」「cht 500」。



せっかく作っておいた「拡散シミュレート」処理を施します。"cht.exe" の
第1のアーギュメントは「波数」(前記プログラムコード、cos(mt*th) の mt)、
第2アーギュメントは拡散処理の回数を指定します(ディフォールトは 0)。
画像は左から、「cht 1000」「cht 1000 10」「cht 1000 30」「cht 1000 100」。



背景の色も、変化していますね。(暗い灰色+暗い黄色は?)  

 つづく

 前のページへ

ご意見・ご感想・誤りの指摘などは、river_r@kvf.biglobe.ne.jp までお願いします。