PIZiadasgráficas

PIZiadasgráficas

私の世界はインチです.

再帰的なフラクタル: シェルピンスキーの三角形 [JAVA]

triangulo_sierpinski我々はと呼ばれる最初のプログラムを見てきました “DrawWorld” 我々は、Javaプログラミング指向のグラフィックスを導入. 基本的な再帰的なフラクタルを生成するには、この基本的なプログラムを変更してみましょう: ザ シェルピンスキーの三角形.

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

これは、辺の中点で分割されている三角形から再帰的に構築されているフラクタルです. これらの新たなポイントで, と前, 新しい三角形は以前と同様に構成されている.

私たちは、三角形ABCからスタートし、その辺の中点を取得する場合 (MNP), 再帰の次のレベルは以下の3つの三角形を構築していきます: APN, PBMとNMC.

シェルピンスキーの三角形は持って ハウスドルフ-Besicovitchのフラクタル次元 SUのフラクタル次元と一致 homotecia に等しい: 1,58496… (W)

これらヌエボスの三角形の各々は、3つの時間のsuに分割されている場合, 我再帰obteniendo UNAヌエバフィギュア. 我々は一つの変数で制御することができます再帰の新しいレベルを持っています (nivel_de_recursividad) デストロプログラム.

一つの関数を定義しています “paintRecursivo” (このメソッドからそのラマ “ペイント”) それは三角ベースのポイントにそれらを渡したとして、それ, 再帰の彼はレベル. この関数は、それらの三角形の頂点を計算し、それ, 図を描くとラマ自身が三回MISMO場合, それらsubtriángulosそれぞれ1対1.

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

インポート する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)/2.;
  ダブル DY =(yp22-yp12)/2.;
  ダブル XP32 XP12   = DX-DY * 2 * sin60;
  ダブル yp12 yp32 =  2 * DX   DY * sin60;

  ダブル DX1 =(Xp22   XP12)/2.;
  ダブル DY1 =(yp22   yp12)/2.;
  ダブル DX2 =(XP32   Xp22)/2.;
  ダブル DY2 =(yp32   yp22)/2.;
  ダブル DX3 =(XP12   XP32)/2.;
  ダブル DY3 =(yp12   yp32)/2.;

  もし(私<= 0){
   g.drawLine((int型)XP12,(int型)yp12,(int型)Xp22,(int型)yp22);
   g.drawLine((int型)Xp22,(int型)yp22,(int型)XP32,(int型)yp32);
   g.drawLine((int型)XP32,(int型)yp32,(int型)XP12,(int型)yp12);
  }
  ほかに{
   paintRecursivo(G,I-1、XP12、yp12、DX1、DY1);
   paintRecursivo(G,I-1、DX1、DY1、Xp22、yp22);
   paintRecursivo(G,I-1、DX3、DY3、DX2、DY2);
  }

 }
}
JAVA

JAVAコース