/* Koch-curve */ import java.applet.*; import java.awt.*; /* **************************************************************: */ public class Koch extends java.applet.Applet{ int n=5; public void init() { String data; setBackground(Color.lightGray); if( (data = getParameter("n")) != null) n = Integer.parseInt(data); } /* **************************************************************: */ public void paint(Graphics g) { KochCurv koch = new KochCurv(); g.setColor(Color.black); koch.setPoint(30.0, 140.); // 端点の座標指定 koch.setangle(0.0); double leng = 400 * Math.pow(0.33333, n); koch.draw(n, leng, g); // コッホ曲線描画 } } /* ---------------- コッホ曲線のクラス ---------------- */ class KochCurv{ double x0,y0, angle; KochCurv() { } public void draw(int i,double leng, Graphics gr) { if ( i == 0) { double rd = 3.1415927/180.; double x = leng * Math.cos(rd * angle) + x0 ; double y = -leng * Math.sin(rd * angle) + y0; gr.drawLine((int)x0,(int)y0,(int)x, (int)y); x0 = x; y0 = y; } else { draw(i - 1, leng, gr); angle += 60.; draw(i - 1, leng, gr); angle -= 120.; draw(i - 1, leng, gr); angle += 60.;; draw(i - 1, leng, gr); } } public void setPoint(double lpx, double lpy) { x0= lpx ; y0 = lpy ; } public void setangle(double a) { angle = a; } }