Tree

このプログラムは”Javaによる図形処理入門” 工学図書株式会社 を参考にしました。アニメーションの機能を追加しました。風に揺れる木をイメージしたのですが。

/*
    A basic extension of the java.applet.Applet class
*/

import java.awt.*;
import java.applet.*;

public class Applet1 extends Applet implements Runnable
{
    double scale=0.6;
    int angle=30;
    Thread th;
    boolean Flag=true;

    public void init()
    {
        // Take out this line if you don't use symantec.itools.net.RelativeURL or                           symantec.itools.awt.util.StatusScroller
        symantec.itools.lang.Context.setApplet(this);
   
        // This code is automatically generated by Visual Cafe when you add
        // components to the visual environment. It instantiates and initializes
        // the components. To modify the code, only use code syntax that matches
        // what Visual Cafe can generate, or Visual Cafe may be unable to back
        // parse your Java file into its visual environment.
        //{{INIT_CONTROLS
        setLayout(null);
        setSize(426,266);
        //}}
    }
   
    //{{DECLARE_CONTROLS
    //}}
   
    public void start()
    {
        if(th==null)
        {
            th=new Thread(this);
            th.start();
        }
    }
   
    public void run()
    {
        while(Flag)
        {
            repaint();
            try
            {
            Thread.sleep(1000);
            }
            catch (InterruptedException e)
            {
            }
        }
    }
   
   
    public void paint (Graphics g)
    {
        g.setColor(Color.black);
        g.drawLine(150,300,260,300);
        rtree(g,6,200,0,100,90);   
    }
    public void rtree(Graphics g,int n,double x0,double y0,double len,double ang)
    {
        if (n<=0){return;}
        if (n==1){g.setColor(Color.yellow);}
        double x,y;
        final double RAD=Math.PI/180.0;
        x=len*Math.cos(RAD*ang)+x0;
        y=len*Math.sin(RAD*ang)+y0;
        g.drawLine((int)x0,(int)(300-y0),(int)x,(int)(300-y));
        int ang_r1=(int)(Math.random()*50);
        int ang_r2=(int)(Math.random()*50);
        int ang_r3=(int)(Math.random()*50)-25;
        rtree(g,n-1,x,y,len*scale,ang-ang_r1);//右枝
        rtree(g,n-1,x,y,len*scale,ang+ang_r2);//左枝
        rtree(g,n-1,x,y,len*scale,ang+ang_r3);
        g.setColor(Color.black);
   
    }
   
    public void stop()
    {
        if(th !=null)
        {
            th.stop();
            th=null;


        }
    }
}

BACK >>