PIZiadasgráficas

PIZiadasgráficas

私の世界はインチです.

再帰的なフラクタル: コッホ曲線 [JAVA]

curva-de-koch-triangulo-completo-150我々はと呼ばれる最初のプログラムを見てきました “DrawWorld” 我々は、Javaプログラミング指向のグラフィックスを導入. このモジュールのプログラミングは最初のを見て私たちを助けています フラクタル再帰: トライアングルSierpisnkiから.

新しい基本的な再帰的なフラクタルを生成するには、この基本的なプログラムを変更しましょう: ザ curva de Kuch.

(見る と再帰的なフラクタルを生成する)

これは、直線から再帰的に構築されているフラクタルです. その辺を3等分に分割され、中央セグメントは、2つの等しい成形によって変更される 60 以前とIF度.

クルバ·ド·コッホ, 雪片は、いわゆると異なる方法によって得ることができるフラクタルであるとしても知られている IFS機能システム 反復 (で決定的), ルールベースシステム, 等.

再帰アルゴリズム また、密接に関連付けられているフラクタル概念を表すの美徳を持っている: 無限. 曲線自体は非常にシンプルな形を記述するために再帰の本質. 今度は別の、これが含まれている宇宙は小さい規模でパターンをコピー (そう収縮) 際限なく繰り返し配列.

コッホ曲線に属し 自己相似フラクタル[1], 決定論を得る方法である.

curva-de-koch-0

イニシエータ

curva-de-koch-1

第一反復

フラクタル次元

次元 オブジェクトが配置されるか、またはオブジェクトを分類するトポロジカルな概念である 距離空間. いわゆるフラクタル次元で全体の次元スペースの衝突を直感的概念, 実際の値をとる.

ペアノの雌犬 埋めることのできる曲線である. あなたは、したがって、二次元を持っていますか?, 1不思議.

粗さのフラクタル次元に関連付けられています, フラグメンテーション, その, 大きな寸法は、よりラフやギザギザを提示するように. いずれの場合においても特徴付けるその複雑さに関する情報を提供する.

コッホ曲線は比を有する S = 1/3, ととも​​に N = 4, そのフラクタル次元であるので、:

D = ln4/ln3〜 1.269

これらの新しいセグメントの各々が再び再帰的に分割されている場合ホックが得られた曲線

curva-de-koch-2

クルバ·ド·コッホパラn = 2の

.

curva de koch para n=3

クルバコッホパラn = 3の

curva de koch para n=4

クルバコッホパラメータn = 4

我々は3つのラインを使用する場合, 代わりにイニシエータとして1つの, 正三角形の形フォームが表示され、古典的な雪の結晶, この構成はフ​​ラクタル知られていると名前.

curva-de-koch-triangulo

コッホのクルバ : スノーフレーク

ジェネレータアルゴリズム

一つの関数を定義しています “paintRecursivo” (このメソッドからそのラマ “ペイント”) ラインのポイントや三角形の行を費やし, 再帰の彼はレベル. 関数は、新しいセグメントの頂点を計算する, 図形を描画し、それ自体が再び再帰呼び出しを減らす.

故に, 関数の呼び出しごとに再帰の値を減少させ, それがあるときにゼロ仕上げは再帰を運ぶように.

インポート するjava.applet.Applet;
インポート java.awt.Graphics;
/**
* @著者ホセ·フアン·アリアガ
*/
公共 クラス MainAppは 拡張 アプレット {
 ダブル XP1 = 300;
 ダブル P1 = 300;
 ダブル XP2 = 10;
 ダブル P2 = 300;
 ダブル sin60 =数学。罪(3.14/3.);
 int型 nivel_de_recursividad = 6;

 公共 MainAppは() { }

 公共 静的 ボイド メイン(文字列[] 引数) { }

 公共空間 ペイント(グラフィックG){
   paintRecursivo(G,nivel_de_recursividad,XP1、p1は、XP2、p2は);
 }

 プライベート空間 paintRecursivo(グラフィックG, int型 私, ダブル XP12, ダブル yp12, ダブル Xp22, ダブル yp22 ) {
 ダブル DX =(Xp22-XP12)/3.;
 ダブル DY =(yp22-yp12)/3.;
 ダブル XX = xp12  3 * dx/2.-dy * sin60;
 ダブル YY = yp12  3 * DY / 2   DX * sin60;
 もし(私<= 0){
      g.drawLine((int型)XP12,(int型)yp12,(int型)Xp22,(int型)yp22);
 }
 ほかに{
     paintRecursivo(G,I-1、xp12、yp12、xp12   DX,yp12 dy);
     paintRecursivo(G,I-1、xp12   DX,yp12 dy,20,YY);
     paintRecursivo(G,I-1、XX,YY,xp22-DX,yp22-dy);
     paintRecursivo(G,I-1、xp22-DX,yp22-dy,xp22、yp22);
 }
} }
JAVA

JAVAコース