Here is my code
/**
* Sigmoid Function Generator
* @author
* @version
*/
/*
*<applet code="Sigmoid" width=500 height=500></applet>
*/
import java.awt.*;
public class Sigmoid extends java.applet.Applet implements Runnable
{
private static final long serialVersionUID = 5622349801036468572L;
boolean finished = false; //indicates when the curve has been completed
double k = .025; //non-linearity constant
double y = k / 4; //output value
double x = 0; //input value
double dx = k / 10; //plotting (or look-up table) increment
int s = 200; //pixels per unit real (scaling factor)
int H = 0, V = s - 1; //window co-ordinate of graphical origin
int X, Y; //dimensions (in pixels) of the applet window
Image I = null; //reference for an off-screen image I
Graphics i = null; //graphics context for the off-screen image
long TF = 50; //total Time Frame for plotting update cycle
long T; //time at which the next new cycle is due to begin
Thread plotting; //declare a thread reference variable
Font font; //and a font reference for annotations
Color tr; //trace colour
boolean TypeFlag = false; //set for unipolar presentation
public void init()
{ //INITIALISE THE APPLET
int Xy, Yx; //co-ords of axis labels
tr = new Color( 0, 128, 64); //create special dark green for trace
font = new Font("Dialog", Font.PLAIN, 12); //choose the lettering font for this applet
Dimension d = getSize(); // instead of size() use this method, get size of window as given in HTML applet tag
X = d.width; Y = d.height; //establish window width and height
I = createImage(X, Y); //create the off-screen image I
i = I.getGraphics(); //graphics context reference for off-screen image
if(getParameter("type").equals("bipolar"))
{ //if applet parameter 'type' = 'bipolar'
TypeFlag = true; //set the TypeFlag true;
k = .011; //non-linearity constant
y = 0; //output value
x = 0; //input value
dx = .0025; //plotting (or look-up table) increment
s = 100; //pixels per unit real (scaling factor)
H = 100; V = 100; //window co-ordinate of graphical origin
Xy = V + 10; Yx = H - 10; //co-ords of axis letters
}
else
{ //if doing a unipolar graph
Xy = V - 5; Yx = H + 5; //co-ords of axis letters
}
i.setColor(Color.lightGray); //set background colour for the off-screen image
i.fillRect(0, 0, X, Y); //paint background of off-screen image
i.setFont(font); //set up the annotation font
i.setColor(Color.gray); //set colour for drawing the graph axes
i.drawLine(0, V, X, V); //draw x axis
i.drawLine(H, 0, H, Y); //draw y axis
i.setColor(Color.black); //set colour for lettering
i.drawString("X", X - 10, Xy);
i.drawString("Y", Yx, 10); //print the X and Y axis letters
i.setColor(tr); //set colour to paint the trace on image
T = System.currentTimeMillis() + TF; //set end time for current update time frame
}
public void paint(Graphics g)
{ //set up the graphics
g.drawImage(I, 0, 0, null); //(re)draw from the off-screen image I
}
public void update(Graphics g)
{ //PLOT THE SIGMOID GRAPH
if(x > 1 || y > 1) //if plot has reached edge of graph
finished = true; //set the 'finished' flag
else { //if not yet finished plotting graph
int h = (int)(s * x); //convert horizontal plot to pixels
int v = (int)(s * y); //convert vertical plot to pixels
g.setColor(tr); //set colour to paint the trace on screen
int a = h, b, c = V - v, d; //simplify pixel co-ordinates
if(TypeFlag)
{
a = H - h; b = H + h; //simplify pixel co-ordinates
c = V + v; d = V - v;
g.drawLine(b, d, b, d); //do next plot in lower left quadrant
i.drawLine(b, d, b, d); //do next plot in lower left quadrant
y += k * (1 - y); //advance the output difference equation
} else
y += k * y * (1 - y); //advance the output difference equation
x += dx; //advance the input value
g.drawLine(a, c, a, c); //do next plot in upper right quadrant
i.drawLine(a, c, a, c); //do next plot in upper right quadrant
}
}
public void run() { //run the plotting thread
while(true) { //permanent loop broken by external event
if(!finished) repaint(); //if not yet finished, do next plot
long s = T - System.currentTimeMillis(); //get time remaining in this cycle's time frame
if (s < 5) s = 5; //in case host PC is too slow for ideal trace speed
try {
Thread.currentThread().sleep(s); //sleep for remaining time
}
catch (InterruptedException e)
{
System.out.println(e);
//allow browser events to break the thread
} //happens if you return to applet's HTML page
T = System.currentTimeMillis() + TF; //set finish time of next time frame
}
}
public void start() { //Start program thread by
plotting = new Thread(this); //creating the thread object
plotting.start(); //and starting it running
} //[returns a call to run()]
// public void stop() {plotting.stop();} //Stop program thread
private volatile Thread blinker;
public void stop() { // new method to stop thread
blinker = null;
}
}