import java.awt.*;
import java.applet.*;
import java.lang.*;
public class Onevarnl extends Applet
{
Graphics bG;
Graphics sG;
Image bI;
Graphics cG;
Image cI;
Color back = new Color(247, 243, 234);
Color pback = new Color(192, 255, 192);
Color plines = new Color(0, 255, 0);
Color tback = new Color(192, 192, 255);
Color tlines = new Color(0, 0, 255);
Color black = new Color(0, 0, 0);
Color origin = new Color(255, 0, 255);
Color pcolor = new Color(255, 0, 0);
double pstart = 0.5;
double h = 0.02;
int ip;
int running = 0;
double[] pts = {0.5, 0.25, 0.0, -0.25, -0.50,
-0.30, -0.10, 0.10, 0.30, 0.50, 0.30};
double a, b;
int ix;
public void init()
{
bI = createImage(this.size().width, this.size().height);
bG = bI.getGraphics();
cI = createImage(this.size().width, this.size().height);
cG = cI.getGraphics();
drawback();
}
public void paint(Graphics g)
{
g.drawImage(bI, 0, 0, this);
sG = getGraphics();
}
public void update(Graphics g)
{
g.drawImage(bI, 0, 0, this);
}
public int fscale(double y)
{
int k;
k = (int) java.lang.Math.round(100 - 100 * y);
return k;
}
public int leftpscale(double y)
{
int k;
k = (int) java.lang.Math.round(100.0 + 100.0 * y);
return k;
}
public int rightpscale(double y)
{
int k;
k = (int) java.lang.Math.round(100.0 - 100.0 * y);
return k;
}
public double foo(double p)
{
int j;
double t;
double fout = 0.0;
j = (int) java.lang.Math.floor((p + 1)/0.20);
j = java.lang.Math.max(0, j);
j = java.lang.Math.min(10, j);
if (j < 10)
{
t = (p + 1)/0.20 - j;
fout = pts[j] * (1 - t) + pts[j + 1] * t;
}
if (j == 10) fout = pts[10];
return fout;
}
public void drawback()
{
bG.setColor(back);
bG.fillRect(0, 0, 501, 251);
bG.setColor(pback);
bG.fillRect(0, 0, 201, 201);
bG.setColor(tlines);
bG.fillRect(250, 220, 251, 21);
bG.setColor(tback);
bG.fillRect(253, 223, 245, 15);
bG.setColor(tback);
bG.fillRect(250, 0, 251, 201);
bG.setColor(pcolor);
bG.drawLine(0, 100, 201, 100);
bG.drawLine(0, 220, 201, 220);
bG.drawLine(250, 0, 250, 200);
for (int i = 0; i < 201; i = i + 20)
{
bG.setColor(tlines);
bG.drawLine(250, i, 500, i);
bG.setColor(plines);
bG.drawLine(i, 0, i, 200);
}
for (int i = 0; i < 10; i= i + 1)
{
bG.setColor(black);
bG.drawLine(20 * i, fscale(pts[i]),
20 * i + 20, fscale(pts[i + 1]));
if ((pts[i] > 0) && (pts[i + 1] > 0))
{
bG.setColor(black);
bG.drawLine(20 * i + 4, 240, 20 * i + 16, 240);
bG.drawLine(20 * i + 14, 238, 20 * i + 16, 240);
bG.drawLine(20 * i + 14, 242, 20 * i + 16, 240);
}
if ((pts[i] < 0) && (pts[i + 1] < 0))
{
bG.setColor(black);
bG.drawLine(20 * i + 4, 240, 20 * i + 16, 240);
bG.drawLine(20 * i + 4, 240, 20 * i + 6, 238);
bG.drawLine(20 * i + 4, 240, 20 * i + 6, 242);
}
if ((pts[i] == 0) && (pts[i + 1] > 0))
{
bG.setColor(black);
bG.drawLine(20 * i + 4, 240, 20 * i + 16, 240);
bG.drawLine(20 * i + 14, 238, 20 * i + 16, 240);
bG.drawLine(20 * i + 14, 242, 20 * i + 16, 240);
bG.setColor(origin);
bG.fillOval(20 * i - 2, 238, 5, 5);
bG.fillOval(20 * i - 2, 98, 5, 5);
bG.fillOval(248, 198 - 20 * i, 5, 5);
}
if ((pts[i] == 0) && (pts[i + 1] < 0))
{
bG.setColor(black);
bG.drawLine(20 * i + 4, 240, 20 * i + 16, 240);
bG.drawLine(20 * i + 4, 240, 20 * i + 6, 238);
bG.drawLine(20 * i + 4, 240, 20 * i + 6, 242);
bG.setColor(origin);
bG.fillOval(20 * i - 2, 238, 5, 5);
bG.fillOval(20 * i - 2, 98, 5, 5);
bG.fillOval(248, 198 - 20 * i, 5, 5);
}
if ((pts[i] > 0) && (pts[i + 1] == 0))
{
bG.setColor(black);
bG.drawLine(20 * i + 4, 240, 20 * i + 16, 240);
bG.drawLine(20 * i + 14, 238, 20 * i + 16, 240);
bG.drawLine(20 * i + 14, 242, 20 * i + 16, 240);
bG.setColor(origin);
bG.fillOval(20 * i + 18, 238, 5, 5);
bG.fillOval(20 * i + 18, 98, 5, 5);
bG.fillOval(248, 178 - 20 * i, 5, 5);
}
if ((pts[i] < 0) && (pts[i + 1] == 0))
{
bG.setColor(black);
bG.drawLine(20 * i + 4, 240, 20 * i + 16, 240);
bG.drawLine(20 * i + 4, 240, 20 * i + 6, 238);
bG.drawLine(20 * i + 4, 240, 20 * i + 6, 242);
bG.setColor(origin);
bG.fillOval(20 * i + 18, 238, 5, 5);
bG.fillOval(20 * i + 18, 98, 5, 5);
bG.fillOval(248, 178 - 20 * i, 5, 5);
}
if ((pts[i] == 0) && (pts[i + 1] == 0))
{
bG.setColor(origin);
bG.fillOval(20 * i + 18, 238, 5, 5);
bG.fillOval(20 * i + 18, 98, 5, 5);
bG.fillOval(20 * i - 2, 238, 5, 5);
bG.fillOval(20 * i - 2, 98, 5, 5);
bG.fillOval(248, 198 - 20 * i, 5, 5);
bG.fillOval(248, 178 - 20 * i, 5, 5);
bG.drawLine(20 * i, 238, 20 * i + 20, 238);
bG.drawLine(20 * i, 239, 20 * i + 20, 239);
bG.drawLine(20 * i, 240, 20 * i + 20, 240);
bG.drawLine(20 * i, 241, 20 * i + 20, 241);
bG.drawLine(20 * i, 242, 20 * i + 20, 242);
bG.drawLine(20 * i, 98, 20 * i + 20, 98);
bG.drawLine(20 * i, 99, 20 * i + 20, 99);
bG.drawLine(20 * i, 100, 20 * i + 20, 100);
bG.drawLine(20 * i, 101, 20 * i + 20, 101);
bG.drawLine(20 * i, 102, 20 * i + 20, 102);
bG.drawLine(248, 200 - 20 * i, 248, 180 - 20 * i);
bG.drawLine(249, 200 - 20 * i, 249, 180 - 20 * i);
bG.drawLine(250, 200 - 20 * i, 250, 180 - 20 * i);
bG.drawLine(251, 200 - 20 * i, 251, 180 - 20 * i);
bG.drawLine(252, 200 - 20 * i, 252, 180 - 20 * i);
}
if ((pts[i] * pts[i + 1]) < 0)
{
a = java.lang.Math.abs(pts[i]);
b = java.lang.Math.abs(pts[i + 1]);
ix = (int) java.lang.Math.round(20.0 * a / (a + b));
bG.setColor(origin);
bG.fillOval(i * 20 + ix - 2, 238, 5, 5);
bG.fillOval(248, 198 - (i * 20 + ix), 5, 5);
bG.fillOval(i * 20 + ix - 2, 98, 5, 5);
}
}
bG.setColor(black);
ip = leftpscale(pstart);
bG.drawLine(ip, 216, ip, 208);
bG.drawLine(ip, 216, ip + 2, 214);
bG.drawLine(ip, 216, ip - 2, 214);
ip = rightpscale(pstart);
bG.drawLine(238, ip, 246, ip);
bG.drawLine(244, ip + 2, 246, ip);
bG.drawLine(244, ip - 2, 246, ip);
}
public boolean mouseDown(Event evt, int mx, int my)
{
if (running == 1)
{
return true;
}
if ((my > 210) && (mx < 201))
{
pstart = (mx - 100)/100.0;
drawback();
sG.drawImage(bI, 0, 0, this);
}
if ((mx > 225) && (mx < 270) && (my < 201))
{
pstart = (100 - my)/100.0;
drawback();
sG.drawImage(bI, 0, 0, this);
}
if ((my > 219) && (my < 241) && (mx > 249))
{
simulate();
}
if (my < 201)
{ for (int i = 0; i < 11; i = i + 1)
if ((mx > 20 * i - 3) && (mx < 20 * i + 3))
{
pts[i] = (100.0 - my)/100.0;
drawback();
sG.drawImage(bI, 0, 0, this);
}
}
return true;
}
public void simulate()
{
double op, np;
op = pstart;
np = pstart;
running = 1;
drawback();
cG.drawImage(bI, 0, 0, this);
cG.setColor(black);
cG.fillOval(leftpscale(pstart) - 3, 217, 7, 7);
sG.drawImage(cI, 0, 0, this);
for(int i = 1; i < 251; i = i + 1)
{
np = op + h * foo(op);
bG.setColor(black);
bG.drawLine(249 + i, rightpscale(op),
250 + i, rightpscale(np));
cG.drawImage(bI, 0, 0, this);
cG.setColor(black);
cG.fillOval(248 + i, rightpscale(np) - 2, 5, 5);
cG.fillOval(leftpscale(np) - 3, 217, 7, 7);
sG.drawImage(cI, 0, 0, this);
op = np;
if (java.lang.Math.abs(np) > 1) i = 300;
}
running = 0;
}
}
Copyright c 1997 by
Frank Wattenberg, Department of Mathematics, Montana State University,
Bozeman, MT 59717