//****************************************************************************** // Recursive.java: アプレット // //****************************************************************************** import java.applet.*; import java.awt.*; //============================================================================== // アプレット Recursive のメインクラス // //============================================================================== public class Recursive extends Applet { Graphics g; double LPX, LPY, ANGLE, scale, branch; // Recursive クラスのコンストラクタ //-------------------------------------------------------------------------- public Recursive() { // TODO: この位置に構築用のコードを追加してください } // アプレット情報のサポート: // getAppletInfo() メソッドはアプレットの作者、著作権 年月日またはその他の情報を説明するための // 文字列を返します。 //-------------------------------------------------------------------------- public String getAppletInfo() { return "名前: Recursive\r\n" + "著作者: Toshiaki Higuchi\r\n" + "Microsoft Visual J++ Version 1.0 で作成されました"; } // init() メソッドはアプレットが最初にロードされた場合または再ロードされる場合に AWT // によって呼び出されます。 データ構造体、イメージまたはフォントのロード、フレーム // ウィンドウの作成、レイアウト マネージャの設定または UI コンポーネントの追加のような // アプレットが必要とするすべての初期化処理の際にこのメソッドをオーバーライドしてくだ // さい。 //-------------------------------------------------------------------------- public void init() { // リソース ウィザードが生成した "コントロール作成" クラスをアプレット内 // にコントロールを配置するために使用している場合は、このメソッドの中から // CreateControls() メソッドを呼び出す可能性があります。 // CreateControls() の呼び出しを追加する前に以下の resize() の呼び出しを削除してください; // CreateControls() は独自のサイズ変更を行います。 //---------------------------------------------------------------------- resize(400, 300); // TODO: この位置に特別な初期化処理コードを追加してください g = getGraphics(); } // この位置に特別なアプレットの後処理用コードを追加してください。destroy() はアプレットが終了する場合 // およびアンロードされる場合に呼び出されます。 //------------------------------------------------------------------------- public void destroy() { // TODO: この位置にアプレットの後処理用コードを記述してください } // Recursive 描画ハンドラ //-------------------------------------------------------------------------- public void paint(Graphics g) { // g.drawString("Microsoft Visual J++ Version 1.0 で作成されました", 10, 20); int n; double x0, y0, leng, angle; n = 8; x0 = 200.0; y0 = 0.0; leng = 80.0; angle = 90.0; scale = 1.4; branch = 20.0; tree(n, x0, y0, leng, angle); } // start() メソッドはアプレットを含むページが最初に画面上に現れる場合に呼び出 // されます。このメソッド用のアプレット ウィザードの初期インプリメンテーション // はアプレットのスレッドの実行を開始します。 //-------------------------------------------------------------------------- public void start() { // TODO: この位置に特別なアプレットの開始処理コードを追加してください } // stop() メソッドはアプレットを含むページが画面上に既に存在しない場合に呼び出 // されます。このメソッド用のアプレット ウィザードの初期インプリメンテーション // はアプレットのスレッドの実行を中止します。 //-------------------------------------------------------------------------- public void stop() { } // TODO: この位置に特別なアプレット用コードを記述してください public void tree(int n, double x0, double y0, double leng, double angle) { if (n==0) return; LPX = x0; LPY = y0; ANGLE = angle; move(leng); x0 = LPX; y0 = LPY; tree( n-1, x0, y0, leng/scale, angle-branch); tree( n-1, x0, y0, leng/scale, angle+branch); } public void move(double l) { double x, y, rd = 3.14159/180; x = l * Math.cos(rd*ANGLE); y = l * Math.sin(rd*ANGLE); g.drawLine((int)LPX, 300-(int)LPY, (int)(LPX+x), 300-(int)(LPY+y)); LPX += x; LPY += y; } }