最終更新 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 までお願いします。