はじめに
マンデルブロー集合と姉妹関係にあるジュリア集合を描く方法を、特に着色方法に重点を置いて紹介します。
- 完成版のアプレットを見る
対象読者
フラクタル図形の一つであるジュリア集合で、より芸術的な図形を探索したい人。
必要な環境
J2SE 5.0を使っていますが、それより古いバージョンでも大丈夫です。繰返し回数を増やすとCPUパワーが必要になります。
ジュリア(Julia)集合とは
フランスの数学者Gaston Maurice Juliaが、1918年に論文「Memoire sur l'iteration des fonctions rationnelles」で発表したものです。マンデルブロー集合のBenoit Mandelbrotは1924年生まれですから、マンデルブローが生まれる前からジュリア集合は知られていました。ジュリア集合とマンデルブロー集合の違いは、Z=Z2+Cの繰返し計算において、マンデルブロー集合がZの初期値Z0を常にZ0=0+0iとして、C平面上に図形を描画するのに対し、ジュリア集合では、Cを任意に与え、Z0平面上に図形を描画することです。
両者の違いを簡単にまとめますと、下表のようになります。
マンデルブロー集合 | ジュリア集合 | |
漸化式 | Z=Z2+Cが一般的 | Z=Z2+Cが一般的 |
Cの値 | 複素平面上を変化させる | 固定(外部から設定) |
Zの初期値Z0 | 0 + 0i に固定 | 複素平面上を変化させる |
集合の範囲 | 発散しないCの値 | 発散と収束の境界のZ0の値(本来のジュリア集合)、発散しないZ0の値(充填ジュリア集合) |
集合の特徴 | フラクタル性、一個の塊 | フラクタル性、一個の塊の場合とバラバラの場合がある |
ジュリア集合とジュリア図形
ジュリア集合を図形として描く方法は、マンデルブロー集合の場合とほとんど同じで、Z0の値を画面上の座標に対応させ、発散に至るまでの漸化式の繰返し回数や、その時のZの値などで色付けします。ジュリア図形は芸術性が高く、「ジュリア図形ギャラリー」などとして、多くの作品が公開されています。念のために付け加えますと、美しいのはジュリア集合に属する領域ではなく、ジュリア集合を取り囲む周辺の発散領域です。
色付け(Coloring)
マンデルブロー集合やジュリア集合の図形を美しく見せるには、色付けの工夫が重要です。公開資料では、具体的な方法は明らかになっていませんので、オリジナルのアイデアを発揮する余地が残っています。
色付けの対象
何に対して色をつけるかは、大きく分けて、
- Zの絶対値が一定値を超えるまでに要した繰返し演算回数
- 繰返し回数の関数(二乗、平方根、対数など)
- Zの絶対値が一定値を超えたときの絶対値の値
- その偏角(Argument)
などがあります。1.が基本ですが、2.も良く使われます。それ以外は、特殊な効果を狙う場合にのみ有用です。
色付けの方法
離散的なカラーパレットや連続したカラーグラデーション(Gradation、推移)を使って、繰返し回数などのデータ値と色との関係を1対1に対応させるのが一般的ですが、複数のデータ値に対応させるために、HSV方式を使う場合もあります。例えば、繰返し回数をH(Hue、色相)に、Zの絶対値をS(Saturation、彩度)に、Zの偏角をV(Value、明度)に対応させると、複雑な色付けが可能になります。しかし、結果は、必ずしも効果的とはいえません。
カラーグラデーションは、色相環や虹色を用いるものの他、「白」や「黒」を混ぜて美しく見せる手法もあります。本稿のプログラムでは、色相を用いたものを「Aタイプ」と呼び、「白」や「黒」を含めたものを「Bタイプ」として、2種類のカラーグラデーションを用意しました。
プログラム作成で留意した点
繰返し回数を大きくしないと、興味ある図形に遭遇できませんので、一回の描画に要する時間が非常に長くなります。また、狭い範囲を拡大して探索するために、描画の回数も増加します。そこで、従来のrepaint()
による全面的な描画を止め、ジュリア図形またはマンデルブロー図形を必要に応じて、個別に描画しました。これは、元の図形を上書きしますので、直前の図形と比較ができる長所があります。一方、ほとんど同一の図形の場合は、描画が行なわれているのか終わったのかが分かりにくくなりますので、「ジュリア図形描画中」の表示を付加しました。