シルビンスキーのガスケット(3)
(b)最初の3角形の頂点座標を設定(図中P0、P1、P2)。
(c) 最初の3角形を描画し、3角形を作成するメソッド(triangle)を呼ぶ。
(c)triangleでは、内側の 3角形を描画し、nが1になるまで自分自身を再帰呼び出し。
(c.1) 外側の3角形の各辺の中点座標を計算する(図中Q1、Q2、Q3)。
(c.3)3角形の頂点を置き換えて、3つの3角形(図中T1,T2,T3)の頂点を置き換えて、再帰呼び出しする。
public void triangle(Graphics g,int nn, Point P0, Point P1, Point P2){
int [] Qx =new int[4]; // 3角形頂点配列の生成
int [] Qy =new int[4]; // 3角形頂点配列の生成
Qx[0]=(P0.x+P1.x)/2; Qy[0]=(P0.y+P1.y)/2; //新しい中点
Qx[1]=(P1.x+P2.x)/2; Qy[1]=(P1.y+P2.y)/2; //
Qx[2]=(P0.x+P2.x)/2; Qy[2]=(P0.y+P2.y)/2; //
g.drawPolygon(Qx,Qy,3); // 三角形の描画
triangle(g,nn-1,new Point(Qx[0],Qy[0]),P1,new Point(Qx[1],Qy[1]));
triangle(g,nn-1,new Point(Qx[2],Qy[2]),new Point(Qx[1],Qy[1]),P2);
triangle(g,nn-1,P0,new Point(Qx[0],Qy[0]),new Point(Qx[2],Qy[2]));