// シルピンスキーのギャスケット import java.applet.Applet; import java.awt.*; //import java.awt.event.*; // JDK 1.1 public class gasket extends Applet { // implements ItemListener { // JDK 1.1 int n=2; //繰り返しの数の初期値 Button b1,b2; // ========= ロード時の初期化(ボタン設定) ========= public void init(){ add(b1 = new Button(" step ")); add(b2 = new Button(" clear ")); } // ========= ボタン処理 ========= public boolean action(Event evt,Object obj){ if (evt.target == b1) { // Check step_button n++; if( n > 10) n = 1; repaint(); }else if (evt.target == b2) { // Check clear_button n=1; repaint(); } return true; } //============= グラフィックスの表示  ============== public void paint( Graphics g ){ Dimension appsize = size(); // int w=getSize().width-10; // 横の大きさJDK 1.1 int w =appsize.width-10; int [] x={ 5, w+5,w/2+5,5}; //  三角形の初期値 int [] y={w+40,w+40, 40,w+40}; //  三角形の初期値 g.drawString(" step = "+n, 25,40); // n を表示 g.setColor(Color.black); // g.drawPolygon(x,y,3); // 三角形の描画 g.drawPolygon(x,y,4); // 三角形の描画 triangle(g,n,new Point(x[0],y[0]),new Point(x[1],y[1]),new Point(x[2],y[2])); // 再帰呼び出し } //========= 三角形を再帰的に作成 ================ public void triangle(Graphics g,int nn, Point P0, Point P1, Point P2){ if(nn<=1){return;} 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; // Qx[3]=Qx[0]; Qy[3]=Qy[0]; g.drawPolygon(Qx,Qy,4); // 三角形の描画 // P1を含む三角形を描く(再帰呼び出し) triangle(g,nn-1,new Point(Qx[0],Qy[0]),P1,new Point(Qx[1],Qy[1])); // P2を含む三角形を描く(再帰呼び出し) triangle(g,nn-1,new Point(Qx[2],Qy[2]),new Point(Qx[1],Qy[1]),P2); // P0を含む三角形を描く(再帰呼び出し) triangle(g,nn-1,P0,new Point(Qx[0],Qy[0]),new Point(Qx[2],Qy[2])); } }