ふくろう船長が好きなもの

マンデルブロ集合、鉄道、万華鏡、たまにオーディオ

色の割り当て方法

マンデルブロ集合の計算結果に色を割り当てる方法は、ネットにいろいろな方が、いろいろな方法を紹介していますが、下記に一例として単純な方法について説明します。

単純だけど、条件によっては「ホゥホウ~(ふくろうの鳴き声?)、そうなりますか」という時もあり、なかなかおもしろいです。

 

マンデルブロ集合の計算結果は、繰り返しの最大数を 1,000 とすると、

1, 2, 3, ・・・, 997, 998, 1000

といった値になります。値は1から全て揃っている場合もあれば、一部が抜けて飛び飛びになっている場合もあります。

この値に色を割り当てます。たとえば、1は赤、2は青、3は黄・・・といった具合です。

 

色の割り当ては2段階で実施します。

まず、1段階目として色の数を決めてカラーパレットを作成します。

2段階目は、マンデルブロ集合の計算結果にカラーパレットのどの色番号を割り当てるかを決めます。

 

カラーパレットの例 その1:

色数は30色とし、HSV色空間の色相を240から0まで変化させる。明度、彩度は100%に固定する。

f:id:captain_owl:20211227150311j:plain

カラーパレットの例 その2:

色数は30色で、上記カラーパレットの両端に5色分の白および黒のグラデーションをかける。

f:id:captain_owl:20211227144801j:plain

カラーパレットの例 その3:

色数は96色とし、RGB(赤緑青)それぞれの明るさをサインカーブで決める。各色のサインカーブの位相(スタート位置)、振幅(大きさ)は、適当に調整する。

f:id:captain_owl:20211227144809j:plain

 

計算結果への色番号の割り当て方法の例 その1:

各色番号に割り当てたdot数が、同じくらいとなるようにする。

(一色のdot数 ≑ 全dot数 / 色数、全dot数 = 横dot数 X 縦dot数)

色番号の大きい方からスタートし、計算結果の値が大きいものから順番に割り当てていく。

 

下記はカラーパレット2を使って画像化したものです。

f:id:captain_owl:20211227145355j:plain

 

計算結果への色番号の割り当て方法の例 その2:

計算結果の値が大きい方からスタートし、色番号の大きい方から順番に、1対1で割り当てていく。色番号が1に達したら最大の色番号に戻り、カラーパレットを繰り返し使って割り当てる。

 

下記は同じ計算結果を使い、カラーパレット3を使って画像化したものです。

f:id:captain_owl:20211227144943j:plain

 

着色方法については、自作のプログラムにて、いろいろな方法を試しています。

 

【関連ページ マンデルブロ集合の計算方法】

【関連ページ 計算で使用しているハードウェア】

 

追記:

詳しくは下記の外部リンクを参照下さい。

マンデルブロ集合 - Wikipedia

マンデルブロ集合の不思議な世界

ジュリア集合の色付けを工夫して芸術的なフラクタル図形を描く

画像修正ツール - imgEdit

 

マンデルブロ集合の計算方法

マンデルブロ集合の計算方法について、なるべく簡単に説明します。

 

マンデルブロ集合の計算は、次の式を繰り返し計算するだけです。

 

Zn+1 = Zn * Zn + C

 

式の意味:n回目の計算結果であるZnを2回掛けてCを足したものを

   (n+1)回目の計算結果Zn+1とする。

 

手順:適当な数Cを決める。初期値のZ0は0と決まっているので、

  上の式を使って、Z0→Z1→Z2→・・・→Zn→Zn+1と、順番に計算する。

 

以上です。とても単純な計算ですね。

 

このZという数は、Cによって、どんどん大きくなっていくケース、大きくなったり小さくなったりするケースと、いろいろなパターンがあります。

 

延々と計算してもキリが無いのでどこかで中断するのですが、先人の研究により、

Zの大きさが 2 を超えると発散する(どんどん大きくなってしまう)ことがわかっているので、2より大きくなったら中断し、

その時の繰り返し数nをCに対する計算結果の値とします。

また、繰り返し数の上限(Loop Max)をあらかじめ決めておき、上限回数まで計算しても、Zの大きさが2を越えなかったら、そこで中断します。

その場合も、繰り返し数n(上限値 Loop Max)をCに対する計算結果の値とします。

 

計算例: C=0.9の場合

 Z0 = 0 初期値なので、いつもゼロからスタートします。

 Z1 = Z0 * Z0 + C = 0 * 0 + 0.9 = 0.9

 Z2 = Z1 * Z1 + C = 0.9 * 0.9 + 0.9 = 1.71

 Z3 = Z2 * Z2 + C = 1.71 * 1.71 + 0.9 = 3.8241

 3回目の計算 Z3 で、2より大きくなったので、C=0.9に対する値は3となります。

 

このCの値に応じて、赤や青の色を割り当てると、不思議な模様が出現するのです。

 

実際にはCやZは複素数なので、もう少しだけ複雑な計算となります。

 

色を割り当てて模様を描くには、複素平面上でCを少しずつズラしていき、各Cに対して上記の繰り返し計算を行い、色を割り当てて、平面を埋めて行くと1枚の画像になります。

 

単純な繰り返し計算ですが、画像の横dot数 * 縦dot数の各点で、Loop Maxを1,000とか100,000とかに設定して計算するので、膨大な計算量になります。

 

バリエーション:上記はZを2回掛ける基本型ですが、

  3回、4回・・・としても、同様に不思議な模様が描けます。

  Zn+1 = Zn * Zn * Zn + C
  Zn+1 = Zn * Zn * Zn * Zn + C

 

マンデルブロ集合】

f:id:captain_owl:20220108001643j:plain

 

【関連ページ 色の割り当て方法】

【関連ページ 計算で使用しているハードウェア】

 

追記:

マンデルブロ集合とは?、またその計算方法については、ネットにいろいろな方が書いているので、詳しくはそちらを参照願います。

マンデルブロ集合 - Wikipedia

マンデルブロ集合の不思議な世界 (sakura.ne.jp)

 

金星

金星の地表のイメージ

f:id:captain_owl:20211220133421j:plain

 

こちらは、地球の深海のイメージかな。

f:id:captain_owl:20211220133424j:plain

 

関連ページ 地下の秘密基地

関連ページ 同じ場所を拡大してゆく

関連ページ 着色のバリエーション