import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
public abstract class XYGrapher extends Frame implements WindowListener{
private int xpixelStart;
private int ypixelStart;
private int pixelshigh;
private int pixelswide;
abstract protected Coordinate xyStart(); // Where the graph will start (LLC)
abstract protected double xRange(); // Width + height of graphing area
abstract protected double yRange();
abstract protected Coordinate getPoint(int pointNum);
public void init(){
this.setVisible(true);
}
public void windowClosed(WindowEvent e){
//System.exit(0);
}
public void windowClosing(WindowEvent e){
//System.exit(0);
}
public void drawGraph(int xPixelStart,
int yPixelStart, int pixelsWide,
int pixelsHigh){
/*xpixelStart = xPixelStart;
ypixelStart = yPixelStart;
pixelswide = pixelsWide;
pixelshigh = pixelsHigh;
int yPixelStart = ypixelStart;
int xPixelStart = xpixelStart;
int pixelsWide = pixelswide;
int pixelsHigh = pixelshigh;*/
yPixelStart = yPixelStart + 10;
this.setSize(pixelsWide + xPixelStart, pixelsHigh+ yPixelStart);
pixelsWide = pixelsWide + xPixelStart;
pixelsHigh = pixelsHigh + yPixelStart;
this.setVisible(true); // Make a new applet pWxpH
Coordinate point = getPoint(0); // Get the first point
int pointNum = 0;
Graphics gr = getGraphics();
double xRange = xRange(); // Range of x and y on the graph
double yRange = yRange();
double xStart = xyStart().getX(); // Starting value of x and y in
double yStart = xyStart().getY(); // lower left hand corner
gr.setColor(Color.green);
if((xStart < 0) && (xStart + xRange > 0)){ //Graph the yAxis if possible
gr.drawLine( // y axis
getInt(xPixelStart-(xStart*(pixelsWide/xRange))),
getInt(yPixelStart - 10),
getInt(xPixelStart-(xStart*(pixelsWide/xRange))),
getInt(yPixelStart + pixelsHigh));
}
if((yStart < 0) && (yStart + yRange > 0)){ //Graph the xAxis if possible
gr.drawLine(
getInt(xPixelStart),
getInt(yPixelStart + (yStart+yRange)*(pixelsHigh/yRange)),
getInt(xPixelStart + pixelsWide),
getInt(yPixelStart + (yStart+yRange)*(pixelsHigh/yRange)));
}
gr.setColor(Color.black);
int lastx = 0; // initialize last coordinates
int lasty = 0;
while(point != null){ // As long as the point exists...
double X = point.getX(); // X = x coord
double Y = point.getY(); // Y = y coord
int xPixel = getInt( // map x to xPixel
xPixelStart + (X-xStart)*(pixelsWide/xRange));
int yPixel = getInt( // map y to yPixel
yPixelStart + (yStart+yRange-Y)*(pixelsHigh/yRange));
//gr.drawLine(xPixel,yPixel,xPixel+1,yPixel+1); //Draw the point
if(pointNum != 0){ // if not first point, draw line
gr.drawLine(lastx, lasty, xPixel, yPixel);
}
pointNum++; //update pointNum
point = getPoint(pointNum);
lastx = xPixel;
lasty = yPixel;
}
}
private int getInt(double doub){
int count = 0;
while(doub > 1){
count++;
doub--;
}
return count;
}
}