SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaで学ぶグラフィックス処理

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

マンデルブロー図形の一部をクリックしてジュリア図形を描く


  • X ポスト
  • このエントリーをはてなブックマークに追加

プログラムの使い方

 アプレットを実行させると、上方に[繰返し回数の上限]、[カラー階調数]、[クリック倍率]および[着色方式]の選択ボックスが現れます。その下には、[Cの実数部]、[Cの虚数部]の入力フィールドがあり、さらにその下に[Z0の実数部の中心]、[Z0の虚数部の中心]、[表示の範囲]の入力フィールドがあります。これらに外部から入力した場合には、それぞれ、[C関係外部設定]、[Z0関係外部設定]のボタンをクリックしてください。

 選択ボックス、入力フィールドの下方右側に、マンデルブロー図形の基本形が現れますので、この上でマウスをクリックすると、その場所が、Cの値として入力され、関連する入力フィールドに値が表示され、ジュリア図形が描画されます(最初は、Cの実数部=0、Cの虚数部=0になっています)。

 ジュリア図形表示領域でマウスをクリックすると、その位置に相当するZ0の中心の値が新たに設定され、中心が変化(移動)した新しいジュリア図形が描画されます。この時、[クリック倍率]の設定にしたがって図形が拡大されます。

 マウスクリック以外でジュリア図形を描画させるには、[実行]ボタンをクリックします。条件の設定だけでは、描画が開始されませんのでご注意ください。

 倍率を変えないで、Z0の値の中心だけを変更したい場合には、[クリック倍率]を「1」に設定してマウスで希望する位置をクリックしてください。

 その他の使用方法は、マンデルブロー図形の場合に準じますので、自由に探索をお楽しみください。

プログラムの実行結果

 図1は、このプログラムの実行画面の一例です。右側のマンデルブロー図形の中央付近にある小さい白丸が、パラメータとして外部から与えたCの値の位置を表わしています。[繰返し回数の上限]を「256」と低めにとり、わざと黒い部分(発散しないジュリア集合領域)を作っています。これを「1024」にすると、黒い部分が無くなり、やや平凡な図形になります。[着色方式]は、「白」と「黒」を含む「Bタイプ」を使用しています。

図1 プログラムの実行結果の例
図1 プログラムの実行結果の例

 図2は、[着色方式]と[カラー階調数]が、どのように図形に影響を与えるかを比較したものです。

 (a)は「Aタイプ」のグラデーションを使い、彩度と明度を最高に取っている代わり「白」と「黒」がありません(収束領域は黒)。すこし、どぎつい感じがします。

 (b)は「Bタイプ」のグラデーションを使っています。こちらは、彩度を少し抑え、「白」でさわやかな味を出しています。[カラー階調数]を変えると、全く変わった色になりますので、[カラー階調数]に注意してください。

 (c)は[繰返し回数の平方根]で着色しています。グラデーションは「Bタイプ」です。平方根を取ると、繰返し回数の増加が、色変化の比較的ゆるやかな図形として描かれます。これも、[カラー階調数]に敏感なので、良いところを探してください。

 (d)は[発散時のZの偏角]を用いています。偏角は、-πから+πまでを取りますが、これを「Bタイプ」のグラデーションに当てはめたものです。あいにく、このCとZ0の条件では、面白い図形になっていません。

 図2で使用した共通条件は、creal=0.38cimag=0.23z0real=0.1572475z0imag=-0.0241width=0.07です。

図2 着色方式と得られる図形
図2 着色方式と得られる図形

 

 図3は、[発散最初のZの偏角]を用いると、発散に至るまでの繰返し回数を用いるより面白い図形が得られる例を示しています。

 ここで使用した共通の設定条件は、count_max=4096creal=-0.742cimag=0.104z0real=0.27693z0imag=0.24425width=0.25です。カラー階調数は、それぞれに最適のものを選んでいます。

図3 発散最初のZの偏角が効果的な例
図3 発散最初のZの偏角が効果的な例

まとめ

 ジュリア集合の描画についても、マンデルブロー集合と同様に、多数の著書や文献、ネット上のサイトがあります。プログラム的には、マンデルブロー集合とほとんど同じですので、特に新しさはありません。

 ジュリア図形は、マンデルブロー図形よりも変化に富み、芸術性に優れているような気がしますので、「色付け」と操作性に重点を置いて、プログラムを作成しました。「色付け」は、好みの問題もありますし、探索して発見した場所の特徴にも関係しますので、本稿で紹介した方法を参考に、カラーグラデーションのローテーション(たとえば、青からの循環を緑や黄から始まるように変更)や編集機能の追加など、さらに改良されることを期待します。

参考資料

 この記事は、筆者のウエブサイト『Visual C++ 6.0の易しい使い方(20) ―Mandelbrot図形からJulia図形を描く-(ただし、現在はVisual C++ 2005 Express Edition版に改定)』を改良してJava言語に書き直し、分かりやすく加筆したものです。

 CodeZineの『マンデルブロー集合による新しいフラクタル図形を探索する』の姉妹編ですから、類似点があります。

 ウエブ上には、多数の優れた資料があり、下記は一例です。「ジュリア図形ギャラリー」も多数ありますが、省略します。

 プログラム的な解説では、以下の著書があります。

  1. CによるフラクタルCG』 渕上季代絵 著、サイエンス社、1993年4月
  2. Javaによる図形処理入門』 山本芳人 著、工学図書、1998年3月
  3. Javaグラフィックス完全制覇』 芹沢浩 著、技術評論社、2002年1月
  4. Javaによるアルゴリズム事典』 奥村晴彦・杉浦方紀・津留和生・首藤一幸・土村展之 著、技術評論社、2003年5月
  5. 理工系のJava』 小国力・三井栄慶 著、朝倉書店、2004年3月
修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaで学ぶグラフィックス処理連載記事一覧

もっと読む

この記事の著者

石立 喬(イシダテ タカシ)

1955年東京工大卒。同年、NECへ入社し、NEC初のコンピュータの開発に参画。磁気メモリ、半導体メモリの開発、LSI設計などを経て、1989年帝京大学理工学部教授。情報、通信、電子関係の教育を担当。2002年定年により退職し現在に至る。2000年より、Webサイト「Visual C++の勉強部屋」を公開。...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/310 2008/03/16 10:44

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング