home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperLib 1997 Winter - Disc 1
/
HYPERLIB-1997-Winter-CD1.ISO.7z
/
HYPERLIB-1997-Winter-CD1.ISO
/
オンラインウェア
/
MLT
/
Frac20.sit
/
Readme.Doc
next >
Wrap
Text File
|
1996-09-07
|
10KB
|
250 lines
データ名:極彩色マンデルブロ集合「フラク太郎」
ID:HGB02554
登録日付:96/09/07
属性:バイナリ
ソフト名:高機能マンデルブロー集合描画プログラム/FRAC20
配付方法:フリーウェア
転載方法:メールにて申請
作者:Θ記号士Θ/HGB02554
掲載者:同上
動作環境:漢字Talk7.1以降(FATバイナリ)/32000色以上推奨
開発環境:PowerBook5300CS、漢字Talk7.5.2、SYMANTEC C++8.0
動作確認:PowerMac8100AV/PowerBook5300CS/セントリス650
圧縮方法:StuffIt Expander
コメント:
【Ver1.0からの変更点】
・PICTファイルに保存サポート
・クリップボードにコピー機能サポート
・カラーパターン3のパターン変更
【概要】
複雑なマンデルブロー集合を様々なオプション機能により美しいカラー画像で
楽しめます。
・ラバーバンドによる拡大表示機能
フラクタルと言えばどこかを拡大して行くと同じような形がでてきて、そこ
を拡大するとその中にはさらに同じ物が・・・と永遠に続いて行くもの。「フ
ラク太郎」では任意の部分をラバーバンドで指定してやるだけで、どんどん拡
大して表示して行くことが可能です。
・グラデーションカラー選択機能
とにかく色の付け方にこだわりました。雑誌で見る(あるいはL−ZONE
のムービーに出て来るような(^_^;))ようなきれいなマンデルブロー集合が2
56色以上で見られます。時には衛生写真の地形図のような、時には動物の神
経細胞の拡大図のような、あるいは青空に舞うさくら吹雪のような、・・・ど
んな画像に出会うかはあなたの選択(時の運)しだいです。
・分解能選択機能
分解能とはカラーの変化を密にするか粗にするかということです。集合の輪
郭部分ではカラーの変化が激しすぎてグシャグシャになってしまい、正確な形
が掴めなくなることがあります。この場合分解能を落とすときれいなグラデー
ションとして表示されます。
・PICTファイルに保存
これだという画像にであったら、PICTファイルとして保存し、マルチメ
ディアなどの素材として使用できます。
・クリップボードにコピー
クリップボードにコピー機能をサポート。デスクトップパターンなどに簡単
にペースト可能です。
・計算精度選択機能
マンデルブロー集合は計算を繰り返していってその数が発散するか収束する
かを判断して行くのですが、コンピュータでは無限に計算することはできませ
んので、図の拡大状態やマシンの速度などによって計算精度を選択出来るよう
になっています。具体的には64回〜4096回まで選べます。
・移動機能
メニュー選択又はコマンドキーで表示するエリアを上下左右移動できます。
【使い方】
クロスカーソル
拡大したいエリアを選択します。描画中ならマウスボタンが放された時
点で新たなエリアの描画を開始します。
ファイル:開く
これを選択することによって初めて描画が開始されます。先ずこれをはじめ
ないことにはに何も始まりません。
ファイル:閉じる
表示しているウィンドウを閉じます。
ファイル:PICTファイルに保存
ファイル保存ダイアログがあらわれ、現在表示中の画像を保存します。
ファイル:終了
本アプリケーションを終了します。
編集:コピー
表示中のイメージをPICTとしてクリップボードにコピーします。
計算制度
数式の発散か収束かの判定を、何回の演算を行って判断するかを指定します。
64、128、256、512、1024、2048、4096のいずれかを選
択できます。拡大を続けて輪郭が単純になってきたらより高い精度を選択して下
さい。もとは黒く表示されていた部分にディティールが表れます。
ただし、制度を上げるほど計算速度は遅くなります。
ズーム:縮小
画面の中心を基準にして1/2倍に縮小します。
ズーム:拡大
画面の中心を基準にして2倍に拡大します。
移動:上 下 左 右
それぞれ表示エリアを画面半分の量だけスクロールさせて表示します。
カラーパターン
パターン1、パターン2、パターン3お好みのパターンを選択してください。
カラー分解能
1段階の色の変化の中に何段階の数値変化を含むかを指します。画像が込み
入って様子がわからなくなった場合、より小さい数値を選ぶと見易くなります。
1倍から1/32倍まで選択できます。
【後書き】
いろいろといただいたご要望のなかで、私も当初より必要と感じつつも技術不
足ゆえサポートできていなかったPICTファイルに保存と、クリップボードへ
のコピー機能をサポートしました。
ところで最近ホームページをアサヒネット上に開設し、こちらでも私のフリー
ソフトのダウンロードができるようになっています。そのほかにもページが用意
されていますのでお楽しみください(^_^;
URL http://www.asahi-net.or.jp/~DB2T-KRYM/
MAIL DB2T-KRIYM@asahi-net.or.jp
【マンデルブロー集合に付いて】
マンデルブロー集合の凄いところは、簡単な数式から無限に複雑な図柄が出て
来るというところにあります。いまあなたが見ている部分は実は現在まで他の誰
も見たことのない部分である可能性もあるのです。だから自分で勝手に何々岬や
何々神経網などと名前を付けてもいいのです。
運が良ければ子マンデルに出会うこともあります。子マンデルを拡大して行く
と、さらにその中に小さなマンデル集合が表れて来るという多次元世界がごく簡
単な数式の中に秘められているのです。
SFで平行世界というのがありますが、まさに同じような図柄が少しづつ形や
大きさを変えながら並んでいる様子は平行世界、多次元世界そのものです。
あるいはマンデル集合は曼陀羅(マンダラ)集合でもあります。このような多
重構造は仏教の世界ではすでに示されていたようです。
とにかくマンデルブロー集合は一つの世界といっても過言ではありません。こ
れを見て息を飲む美しさを発見したなら、これに優るうれしさはありません。
【技術情報】
マンデルブローをコンピュータで描画するのは簡単です。マンデルブロー集合
の式は下記のようにあらわされます。
Xn+1 = Xn * Xn + C
n,n+1はXの添え字です。この式にしたがってXnを順繰りに代入して計
算して行くと、X(無限)は、有限の数字か無限大に発散するかのどちらかにな
り、その行方は一つの係数「C」のみにゆだねられます。Xnは初期値として0
からはじまります。
ここでこの数式を複素平面上であらわすと,Xがすべて(X+iY)に、Cが
Cx + iCyに置き変わりますので、上式は下記のようになります。
Xn+1 + iYn+1
= (Xn + iYn)*(Xn + iYn)+ Cx + iCy
二乗や添え字がテキスト形式ではうまくあらわせませんが、上記のようになり
ます。iは複素数です(つまり i*i=−1)。
この数式を展開し、iの係数の付いた項目と、iのつかない項目に分けて書くと、
Xn+1 =(Xn * Xn)−(Yn * Yn) + Cx
Yn+1 =(2 * Xn * Yn) + Cy
という2つの式が表れます。これでCx,Cyを徐々に変化させて行き、Xn、
Ynのどちらかが、無限大になるか収束するかで、Cx,Cy座標上に点を描いて
ゆけばよいわけです。ただし、無限になるかどうかの判断はコンピュータにはでき
ませんが、ここでXn,Yn座標が0、0の中心点から2以上の距離になった場合、
そのうちにXn,Ynが発散すると数学的に証明されているのでこれを使用します。
具体的には円の方程式を使用して
(Xn * Xn) + ( Yn * Yn ) > 4
となれば、その時時点で、使用したCx,Cyは発散すると判断します。「フラク
太郎」でもこれを使用し、上記式が成立した時点で何回計算を行ったかで色を変え
ています。ただしこれを行うと計算速度が落ちるため、それほど正確をきさないの
であれば、Xn>2又はXn<−2、Yn>2、Yn<−2で近似しても差し支え
ないでしょう。
これをC++言語で例を示します。
double x1,x2,y1,y2; //上記数式のXn,Xn+1,Yn,Yn+1に相当します
double cx=-2; //Cx
double cy=-2; //Cy
int x,y; //描画のためのスクリーンに対応する座標です
int seido = 100; //この例では100回計算しても2以上にならなければ
//「真」と判定します。
double dx; //画面1ドットに対するCx,Cyの変化量を示します。
〜 // 200*200のウインドウの作成などの処理
〜 //
〜
dx = 4/200; //クリーン上の1ドットが複素平面上のいくつに相当するか
//計算しておきます。スクリーンは200*200とします
//複素平面の範囲はcx,cyとも−2から2までとします。
for ( y=0;y<200;y++)
{
cx = -2;
cy = cy + dx ;
for ( x=0;x<200;x++) //平面を描くためのx,yによる2重ループです
{
x1=0; //x1,y1の初期値は0と決まっています
y1=0; //
for (int i=0;i<seido;i++) //精度はこのseidoの大きさによります
{
x2=x1*x1 - y1*y1 + cx; //x1は次の式でも使用するので壊さない
//ようにします。
y1=2*x1*y1 + cy; //
x1=x2;
if (x1*x1 + y1*y1 >=4) //円の方程式によって発散を判定
break; //円の外に出た場合は直ちにループから
//抜け出します。
}
if (i>=seido-1) //発散か収束かの判定をiで行います
{
//SetPixel等でx,yに集合の真の色を描画します。
//「フラク太郎」では黒固定です。通常は黒が多いようです。
}
else
{
//setPixel等でx,yの座標に偽の色をつけます。白が一番
//簡単です。「フラク太郎」ではiの値によって色を変えています。
}
cx=cx+dx;
}
}
描画の中心となる処理はこれだけです。とにかく表示させるためにはこれに少々
ウインドウの生成を付け加えれば一応は動くものができるでしょう。
参考文献:
ダイヤモンド社 「フラクタルって何だろう」 高安秀樹+高安美佐子著
全面的に上記著書を参考にしています。何気なくこの本を手にとったのが運のつ
き(^_^!)でした。特にコンピュータへの適応は詳しくは解説されておりませんが、
フラクタルの基本的な考え方がわかりやすく説明されており、だれが読んで楽しみ
ながら理解できるように工夫されています。著作者であられる高安秀樹さん、高安
美佐子さんに謝辞申し上げます。
配布に関して
このソフトウェアの配布は自由とします。ただし下記の条件にしたがって下さい。
・ダウンロードした状態のままで手を加えず配布して下さい。できればメールをい
ただければ幸いです。
・本ソフトによって発生した障害については一切作者は責任を負わないものとしま
す(本当に気をつけて下さいね)。また作者はバグを修正する義務も追いません。
(ただし報告していただければ幸いです)
・本ソフトウェアの著作権は作成と同時に作者に帰属しています。
Copyright (C) 1995.1996 All Right Reserved HGB02554 Θ記号士Θ
□