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;
}
}
}