/**********************************************************************************
* *
* Diamond diagram Applet *
* ( Diamond.java ) *
* Author : Seiichi Inoue *
**********************************************************************************/
/********************** << Imported package class definition >> *******************/
import java.applet.Applet; /* Applet packages */
import java.awt.*; /* All of the Abstract Windowing Toolkit packages */
import java.lang.Math; /* Math packages */
/************************** <<Oneself of class definition>> ***********************/
// Class name : Diamond
// Access control : public( Access possibility even from which class )
// Extends class : Applet
// Implements class: Runnable( Use of Thread is enabled )
// Input parameter : NAME="r" ( Radius )
// NAME="node" ( Node number )
public class Diamond extends Applet implements Runnable {
/************************* << Class attribute of definition >> ********************/
Thread kicker=null; /* Thread(Initial value:suspension) */
Dimension d; /* Display range */
Image offs; /* Off screen */
Graphics grf; /* Drawing range */
Color color; /* Color of line */
int red,green,blue; /* Color of line parameter */
String param; /* Parameter reading */
int r; /* Drawing radius */
int n; /* Node number */
int x; /* Drawing offset (horizontal) */
int y; /* Drawing offset (vertical) */
int k; /* Starting position counter */
int x1; /* Starting horizontal axis (x) */
int y1; /* Starting vertical axis (y) */
int j; /* Ending position counter */
int x2; /* Ending horizontal axis (x) */
int y2; /* Ending vertical axis (y) */
/***************** << Class of method (implementation procedure) >> ***************/
//
/******** Initialization (init) method *********/
public void init() {
d = size(); /* Set display screen size */
offs = createImage(d.width,d.height); /* Off scr area preparation */
grf = offs.getGraphics(); /* Graphics object extraction */
grf.setColor(Color.white); /* Set display back color */
grf.fillRect(0,0,d.width,d.height); /* Display range is applied */
param = getParameter("r"); /* Radius parameter reading */
r = (param != null)? /* Input determination */
Integer.parseInt(param): 100;
param = getParameter("node"); /* Node number parameter reading */
n = (param != null)? /* Input determination */
Integer.parseInt(param): 16;
}
/************ Start (start) method *************/
public void start() {
if ( kicker == null ) { /* Kicker is null? ( Suspension? )*/
kicker = new Thread(this); /* YES: kicker setting */
kicker.start(); /* Setting of start */
}
} /* End of start method */
/*********** Repeatedly (run) method ***********/
public void run() {
Thread.currentThread().setPriority(Thread.NORM_PRIORITY-3);
while( kicker != null) { /* Repeat until kicker becomes null */
try { /* Interruption confirmation */
red = (int) ( Math.random()*256 ); /* Red component generation */
green = (int) ( Math.random()*256); /* Green component generation */
blue = (int) (Math.random()*256); /* Blue component generation */
color = new Color( red,green,blue );/* Line color assembly */
double rd=3.14159/180; /* Angle value is made 64 bit */
for ( k=0; k<=n-2; k++ ) { /* Drawing start point calculation*/
x1 = (int) ( r*Math.cos( k*360/n*rd ) + r ); /* Start x axis */
y1 = (int) ( r*Math.sin( k*360/n*rd ) + r ); /* Start y axis */
x = ( d.width - r*2 )/2; /* Offset calculation */
if ( x <= 0 ) /* Offset determination(negative?)*/
x = 0; /* YES: Zero setting */
x1 += x; /* Start offset addition */
y = ( d.height - r*2 )/2; /* Offset calculation */
if ( y <= 0 ) /* Offset determination(negative?)*/
y = 0; /* YES: Zero setting */
y1 += y; /* Start offset addition */
for ( j=k+1; j<=n-1; j++ ) {/* Drawing end point calculation */
x2 = (int) ( r*Math.cos( j*360/n*rd ) + r );/* End x axis */
y2 = (int) ( r*Math.sin( j*360/n*rd ) + r );/* End y axis */
x2 += x; /* End offset addition */
y2 += y; /* End offset addition */
kicker.sleep(20); /* Line drawing waiting (20mSEC) */
repaint(); /* Drawing method calling */
}
}
kicker.sleep(2000); /* Next drawing waiting time:2sec */
} catch(InterruptedException e) {} /* Interruption processing */
}
kicker = null; /* Repeate process completion set */
} /* End of run method */
/*********** Renewal (update) method ***********/
public void update(Graphics g) { /* Lost of screen flickering */
paint(g); /* Drawing */
} /* End of update method */
/*********** Drawing (paint) method ************/
public void paint(Graphics g) {
grf.setColor( color ); /* Line color setting */
grf.drawLine( x1,y1,x2,y2 ); /* Display information setting */
g.drawImage(offs,0,0,this); /* Drawing setting */
}
/************ Stop (stop) method ***************/
public void stop() {
if( kicker != null ) { /* Kicker is not null?( action? ) */
kicker.stop(); /* Set kicker to suspension */
kicker = null; /* Set kicker suspension condition*/
}
} /* End of stop method */
} /* End of class setting */
/**********************************************************************************
* End of Diamond diagram Applet *
**********************************************************************************/