/************************** * Document: GrCanvas.java **************************/ import java.awt.*; public class GrCanvas extends Canvas { final int K = 400; //number of steps used to draw graph final int MaxN = 100; //Maximum number of subintervals Dimension d; double[] xarray = new double[K+1]; double[] yarray = new double[K+1]; double[] xArray = new double[MaxN+1]; double[] yArray = new double[MaxN+1]; double[] tarray = new double[K+1]; double[] parray = new double[K+1]; double aD, bD, ymin, ymax, w; int phase = -1, tick, deltaTick, nI, Kp, firstj, tempInt; public void paint(Graphics g) { if (phase != -1) { d = this.size(); g.setColor(Color.black); g.drawLine(0, yScaler(0.0), d.width, yScaler(0.0)); //x-axis if (aD*bD < 0) g.drawLine(xScaler(0.0), 0, xScaler(0.0), d.height - 6); //y-axis tick = (int)aD; // start of x-ticks deltaTick = 1 + (int)(bD - aD)/14; do { if (tick != 0) { g.drawString(tick+"", xScaler(tick) - 4, yScaler(0.0) + 11); g.drawLine(xScaler(tick), yScaler(0.0) - 2, xScaler(tick), yScaler(0.0)); } tick = tick + deltaTick; } while (tick <= bD); //end of x-ticks for (int j = 0; j < K; j++) { g.drawLine(xScaler(xarray[j]), yScaler(yarray[j]), xScaler(xarray[j+1]), yScaler(yarray[j+1])); } } //end of if if (phase == 1) { g.setColor(Color.lightGray); for (int i = 0; i <= nI; i++) { g.drawLine(xScaler(xArray[i]), yScaler(0.0), xScaler(xArray[i]), yScaler(yArray[i])); } for (int j = 0; j < K; j++) { w = 2.0*K/nI; tempInt = (int)Math.ceil(j/w); if (tempInt%2 == 0) g.setColor(Color.red); else g.setColor(Color.magenta); g.drawLine(xScaler(tarray[j]), yScaler(parray[j]), xScaler(tarray[j+1]), yScaler(parray[j+1])); } for (int i = 0; i <= nI; i++) { g.setColor(Color.black); g.fillOval(xScaler(xArray[i]) - 1, yScaler(yArray[i]) - 1, 3, 3); } } //end of if } private int xScaler(double x) { return (int)(5 + (d.width - 10)*(x - aD)/(bD - aD)); } private int yScaler(double y) { return (int)((d.height - 11)*(ymax - y)/(ymax - ymin)); } }