/* line graph written by Fr. Chris Thiel, OFMCap 29 May 2000 */ import java.awt.*; import java.applet.Applet; import java.awt.Graphics; import java.awt.event.*; import java.lang.Math; public class linegraph extends Applet { //Globals double dx = 0.0; // delta x double dy = 0.0; // delta y double m = 0.0; // computed slope double b = 0.0; // y intercept String mouseLocation=""; boolean s1Moving, s2Moving, s3Moving, s4Moving, s5Moving; public void init() { dy=0.0; b=0.0; repaint(); } private int newX (double x) { return (int)(225+13.8*x); } private int newY (double y) { return (int)(25+138-13.8*y); } public void paint( Graphics g ) { g.setColor(Color.orange); g.fillRect ( 450, 20, 145, 275); g.setColor(new Color(0x108000)); //green background from (0,20) to (450,295) g.fillRect ( 0, 20, 450, 276); g.setColor(new Color(0x08602F)); //lines //for(int i = 0; i< 46; i++) g.drawLine( i*10,20,i*10 ,295); //for(int i = 0; i< 43; i++) g.drawLine( 0, i*10, 450,i*10 ); for(int i = -16; i< 17; i++) g.drawLine( newX(i),20,newX(i) ,295); // horizontals for(int i = -10; i< 11; i++) g.drawLine( 0, newY(i), 450,newY(i) ); //virticals g.setColor(Color.black); g.drawLine( 0, newY(0), 450,newY(0) ); // x-axis g.drawLine( newX(0),20,newX(0) ,295); // y=axis for(int i = 2; i< 10; i+=2) g.drawString(i+" ", newX(i)-3, newY(0)+9); for(int i = 10; i< 17; i+=2) g.drawString(i+" ", newX(i)-6, newY(0)+9); for(int i = -8; i< 0; i+=2) g.drawString(i+" ", newX(i)-8, newY(0)+9); for(int i = -14; i< -9; i+=2) g.drawString(i+" ", newX(i)-12, newY(0)+9); for(int i = 2; i< 10; i+=2) g.drawString(i+" ", newX(0)-9, newY(i)+4); for(int i = -8; i< 0; i+=2) g.drawString(i+" ", newX(0)-15, newY(i)+4); g.setColor(Color.yellow); if (dx == 0) { g.drawLine( newX(b), newY(-10), newX(b),newY(10)); // no slope } else { g.drawLine( newX(-16), newY(dy*-16/dx+b), newX(16),newY(dy*16/dx+b)); } //g.drawString( "y = ("+dy+"/"+dx+")x + "+b, 30, 30 ); g.setColor(Color.black); if ((dx == 0)) { g.drawString( "x = "+b, 100, 18 ); } else { if ((dx != 0) && (dy == 0)) { g.drawString( "y = "+b, 100, 18 ); }else{ if (b > 0) g.drawString( "y = ("+m+")x + "+b, 100, 18 ); if (b < 0) g.drawString( "y = ("+m+")x "+b, 100, 18 ); if (b == 0) g.drawString( "y = ("+m+")x ", 100, 18 ); }} g.drawString("Control Sliders", 479, 18); g.drawString(mouseLocation, 250, 18); g.drawString("Equation: ", 40, 18); //g.drawString("dots", 200+12, 18); g.drawString("run", 464, 30); g.drawString("Æx", 464, 40); g.drawString("rise", 498, 30); g.drawString("Æy", 498, 40); g.drawString("y intercept", 533, 30); g.drawString("b", 533, 40); //g.drawString("separation", 540, 30); // Rails for controling sliders g.drawLine ( 475, 50, 475, 270); g.drawLine ( 505, 50, 505, 270); g.drawLine ( 535, 50, 535, 270); /* g.drawLine ( 555, 50, 555, 270); g.drawLine ( 580, 50, 580, 270); */ // labels for the sliders g.drawString (" "+dx, 460, 290); g.drawString (" "+dy, 492, 290); g.drawString (" "+b, 525, 290); /* g.drawString (" "+df, 542, 290); g.drawString (" "+sep, 570, 290); */ g.setColor(Color.black); g.fillOval(472,50+(int)(11.0*(10-dx)), 7,5); g.setColor(Color.blue); g.fillOval(502,50+(int)(11.0*(10-dy)), 7,5); g.setColor(Color.red); g.fillOval(532,50+(int)(11.0*(10-b)), 7,5); /* g.fillOval(552,50+(int)(55.0*(2+df)), 7,5); g.setColor(Color.gray); g.fillOval(577,50+(sep), 7,5); */ } /* * Mouse methods */ public boolean mouseDown(java.awt.Event evt, int x, int y) { // Find out if user is manipulating a slider if ( s1Moving || s2Moving || s3Moving || s4Moving || s5Moving) { s1Moving =false; s2Moving =false; s3Moving =false; s4Moving =false; s5Moving =false; } else { if ( x > 470 && x < 480 ) { s1Moving =true; } if ( x > 500 && x < 510 ) { s2Moving =true; } if ( x > 530 && x < 540 ) { s3Moving =true; } if ( x > 550 && x < 560 ) { s4Moving = true; } if ( x > 575 && x < 585 ) { s5Moving = true; } } /* if (boxbox.inside(x,y) ) box=!box; if (dotbox.inside(x,y) ) dot=!dot; */ repaint(); return true; } public boolean mouseMove(java.awt.Event evt, int x, int y) { double mx, my; // mouse location mouseLocation=""; if (x < 470) { mx = Math.floor((x-225)/1.38)/10; my = Math.floor((163-y)/1.38)/10; mouseLocation="last mouse click: (" + mx + ", " + my + ")"; } getAppletContext().showStatus(mouseLocation); // transform slider movement in terms of the varible it controls // y varies from 50 to 270, a range of 220 if (s1Moving){ requestFocus(); dx = 10-(y-50)/11.0; repaint(); } else { if (s2Moving){ requestFocus(); dy = 10-(y-50)/11.0; repaint(); }else { if (s3Moving){ requestFocus(); b = 10-(y-50)/11.0; repaint(); } else { if (s4Moving){ //requestFocus(); //df = -2+(y-50)/55.0; //yl = df; //yr = df; //repaint(); }else { if (s5Moving){ //requestFocus(); //sep = y - 50; //repaint(); }}}}} //check for limits if (dx > 10) dx=10; if (dx < -10) dx=-10; if (dy > 10) dy=10; if (dy < -10) dy=-10; if (b > 10) b = 10.0; if (b < -10) b =-10.0; /* if (df > 2) df = 2.0; if (df < -2) df = -2.0; if (sep > 220) sep=220; if (sep < 0) sep =0; */ //smooth the reals dy = (int)(dy*10)/10.0; dx = (int)(dx*10)/10.0; b = (int)(b*10)/10.0; m = Math.round(dy*100/dx)/100.0; return true; } public void mouseEnter() { repaint(); } public void mouseExit() { repaint(); } }