import java.applet.Applet; import java.awt.Panel; import java.awt.Canvas; import java.awt.Label; import java.awt.Color; import java.awt.Image; import java.awt.Font; import java.awt.Graphics; import java.awt.Dimension; import java.awt.LayoutManager; import java.awt.Scrollbar; import java.awt.Button; import java.awt.Checkbox; import java.awt.BorderLayout; import java.awt.FontMetrics; import java.awt.FlowLayout; import java.awt.image.MemoryImageSource; import java.awt.event.AdjustmentListener; import java.awt.event.ActionListener; import java.awt.event.ItemListener; import java.awt.event.AdjustmentEvent; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.util.Random; import java.util.StringTokenizer; public class poly extends Applet implements Runnable { public static int SLIDER_COUNT = 6; public PolyControls controlsPanel; public PolyCanvas canvas; public Label footlabel = null; public int[] coeffs = null; public static final int YSCALES_COUNT = 10; public static final int[][] YSCALES = { { 5, 1 }, { 10, 1 }, { 20, 2 }, { 40, 5 }, { 60, 5 }, { 80, 10 }, { 100, 10 }, { 150, 10 }, { 200, 20 }, { 400, 40 } }; public static final int[][] XSCALES = { { 4, 1 }, { 4, 1 }, { 4, 1 }, { 4, 1 }, { 5, 1 }, { 5, 1 }, { 6, 1 }, { 10, 1 }, { 15, 1 }, { 20, 2 } }; public int y_scale_slider = 2; public boolean logScale = false; public boolean doContour = false; public boolean calcComplete = false; public boolean calcRunning = false; public boolean calcAbort = false; public Color backcolor = new Color(255,255,240); public Color plotcolor = Color.blue; public int minCoeff = -10; public int maxCoeff = 10; public double plotXDelta = 0.1; private final static String PARAM_backcolor = "backcolor"; private final static String PARAM_plotcolor = "plotcolor"; private final static String PARAM_mincoeff = "mincoeff"; private final static String PARAM_maxcoeff = "maxcoeff"; //---------------------------------------------------------------------------------------------- public String[][] getParameterInfo() { String[][] info = { { PARAM_backcolor, "String", "Background color: r,g,b" }, { PARAM_plotcolor, "String", "Plot line color: r,g,b" }, { PARAM_mincoeff, "Int", "Minimum polynomial term coefficient" }, { PARAM_maxcoeff, "Int", "Maximum polynomial term coefficient" } }; return info; } //---------------------------------------------------------------------------------------------- public String getAppletInfo() { return "Greg Keogh's Polynomial Plotter 1.2 "; } //---------------------------------------------------------------------------------------------- public void init() { String param = null; param = getParameter(PARAM_backcolor); if (param != null) backcolor = rgbToColor(param); param = getParameter(PARAM_plotcolor); if (param != null) plotcolor = rgbToColor(param); param = getParameter(PARAM_mincoeff); if (param != null) minCoeff = Integer.parseInt(param); param = getParameter(PARAM_maxcoeff); if (param != null) maxCoeff = Integer.parseInt(param); coeffs = new int[SLIDER_COUNT]; randomCoefficients(); setLayout(new BorderLayout()); controlsPanel = new PolyControls(this); footlabel = new Label("Footer"); footlabel.setBackground(Color.white); add("North", controlsPanel); add("Center", canvas = new PolyCanvas(this)); add("South",footlabel); } //---------------------------------------------------------------------------------------------- public Color rgbToColor(String rgb) { int r=0,g=0,b=0,seq=0; StringTokenizer st = new StringTokenizer(rgb,","); while (st.hasMoreTokens()) { String tok = st.nextToken(); switch (seq++) { case 0 : r=Integer.parseInt(tok); break; case 1 : g=Integer.parseInt(tok); break; case 2 : b=Integer.parseInt(tok); break; } } return new Color(r,g,b); } //---------------------------------------------------------------------------------------------- public void randomCoefficients() { int range = (maxCoeff - minCoeff)/2; coeffs[0] = 1; for (int i=1; i0 ? " + " : " - "); if (c==1 || c==-1) sb.append("x"); else sb.append(Math.abs(c) + "x"); break; default : if (i > 0) sb.append(c>0 ? " + " : " - "); if (c==1 || c==-1) sb.append("x^"); else sb.append(Math.abs(c) + "x^"); sb.append(pow); break; } } //sb.append(" Y-Scale=(" + yscale0 + "," + yscale1 + ")"); //sb.append(" X-Scale=(" + xscale0 + "," + xscale1 + ")"); parentApplet.footlabel.setText(sb.toString()); // ** Draw the polynomial graph double lastx = Double.MAX_VALUE; double lasty = 0.0; g.setColor(parentApplet.plotcolor); for (x=-xscale0; x