SHOEISHA iD

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

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

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

2次元カオス図形を芸術的に描画する

エノン写像、グモウスキー・ミラ写像の探索


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

カオスの2次元モデル

 上記では説明しませんでしたが、カオスの2次元モデルは、非常に美しい図形を描きます。本稿では、これを採り上げ、プログラムを紹介します。

エノン(Henon)写像

 1931年にパリで生まれたフランスの数学者で天文学者のMichele Henonが1969年に発表したもので、

 

 において、特にに興味を示しました。この式においてとすると、

 

 となり、原点を中心に、単に角度だけ回転させる写像(Mapping)を意味します。

 本稿では、の場合の他に、などの関数も試みました。

 参考資料によっては、上式の代わりに、計算が容易で等価な

 

 を使っているものがありますが、本稿では、原理が分かりやすい基本形にこだわってみました。

グモウスキー(Gumowski)とミラ(Mira)の写像

 ジュネーブのCERN(ヨーロッパ原子力研究センター)で核物理学の研究をしていた、フランスの数学者で科学者のI. GumowskiとC. Miraは、

 

 において、特にが美しい図形を描くことを1980年に発表しました。

 本稿では、この他にの場合についても調べてみました。

 資料によっては、上記よりやや複雑な

 

 もグモウスキー・ミラ写像と称しますが、図形の美しさという観点からは、大差がないようです。

プログラムの概要

 カオス図形の大体の形状は、パラメータαやaによって決まりますが、詳細は、xとyの初期値で決まります。初期値は、乱数で一定の数だけしか与えませんので、描画の度に図形の詳細が変わります。したがって、最も美しい図形を得るために、何回でも描画を試みられるように[再描画]ボタンを設けました。

 これから述べる内容は、プログラムの大要を作成してから、多くの試行錯誤を繰返して得た結果です。

 初期値の種類を減らすと、まばらな線画状になり、線の美しさを楽しむことができますが、場合により寂しい図形になります。種類を増やし過ぎると、折角の綺麗な線の上に別の線を上書きすることになり、汚くなる上に、時間もかかります。

 エノン写像は、どちらかと言えば面で楽しみますので、x とyの初期値の種類を多めに採り、細かく図形を塗りつぶしています。グモウスキー・ミラ写像は、線で楽しむため、初期値の種類を減らして、線を見やすくしています。

 x とyの初期値が大きいと、図形が大きくなる傾向があります。初期値の範囲は、参考資料に依りました。

 写像の繰返し回数を減らすと、曲線が点の集まりになりますので、繰返し回数は最低でも10000回は欲しいところです。しかし、繰返し回数を増やすと時間がかかる欠点がありますので、初期値の種類が多いエノン写像では、5000回に減らしています。

 以上をまとめると、下表のようになります。

エノン写像とグモウスキー・ミラ写像の設定条件
エノン写像グモウスキー・ミラ写像
xとyの初期値の種類8020
xとyの初期値の範囲-1 ~ 1-20 ~ 20
パラメータα(またはa)の初期値0.5π0
パラメータの可変範囲(分解能)0 ~ π (0.01π)-1 ~ 1 (0.01)
写像繰返し回数500010000
図形描画範囲-1.6 ~ 1.6-40 ~ 40

特に着色方法について

 x とyの初期値が原点から離れる距離(x*x+y*yで代用)に対して色相環を対応させました。数値を色に変換するメソッドchangeToColorは、HSBカラーを生成するJava APIを使用し、彩度(Saturation)と明度(Brightness)は最大に固定し、色相(Hue)のみを数値に対応させました。

 x*x+y*yの代わりに、x+yや偏角atan(y/x)などを試みましたが、結果はほとんど変わりませんでした。カオスの本質として、図形が初期値にあまり依存しないので、当然かもしれません。しかし、参考資料に見られた、写像の繰返し回数と色を対応させる方法は、良い結果が得られませんでした。

次のページ
プログラム

修正履歴

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

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

もっと読む

この記事の著者

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

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング