// GravField // 5/20/1999 // (c) 1999 steven r. loomis // http://www.monkey.sbay.org/~srl // shows gravity field strength and vectors for a given set of masses. import java.applet.*; import java.awt.*; import java.util.*; class Mass { public int x; public int y; public int m; public Mass(int xx, int yy, int mm) { x = xx; y = yy; m = mm; } }; public class GravField extends Applet { //public static final double G = 0.0000000000667; // real life public static final double G = 1; // :) !! private TextField massField; private Vector masses; // GRRRRRRRRRRRRRRRRRRRRRRRR double gx = 0; double gy = 0; double gnet = 0; public void init() { this.setBackground(Color.white); massField = new TextField("8000",10); this.add(new Label("Mass: ")); this.add(massField); masses = new Vector(); } public boolean mouseDown(Event e, int x, int y) { try { masses.addElement( new Mass(x,y, new Integer(massField.getText()).intValue())); repaint(); } catch ( Throwable t ) { System.out.println("click failed: " + t.toString()); } return true; } public void paint(Graphics gr) { //System.out.println("hello 1"); Rectangle rect = this.bounds(); gr.setColor(this.getBackground()); gr.fillRect(rect.x,rect.y,rect.width,rect.height); gr.setColor(Color.blue); //System.out.println("hello 2"); Mass m = null; Mass massar[] = new Mass[masses.size()]; int i = 0; int numMasses; for ( Enumeration e = masses.elements() ; e.hasMoreElements() ; ) { m = (Mass)e.nextElement(); //System.out.println("hello in enum"); gr.fillRect(m.x,m.y,3,3); //System.out.println("done with enum"); massar[i++] = m; } numMasses = i; gr.setColor(Color.red); int h,v; double gmin = 999999999; double gmax = 0; for(v=40;v gmax ) { gmax = gnet; } if ( gnet < gmin ) { gmin = gnet; } } } } System.out.println("Gmax = " + gmax + ", Gmin = " + gmin); /* now that we know min and max, let's paint! */ double logmax = Math.log(gmax); double logmin = Math.log(gmin); double logspread = logmax - logmin; if (( gmax == 0) || ( logspread == 0)) { gr.drawString("Even field", 10,20); } else { // first the field for(v=40;vm[i] ] */ double rhaty = m.y-h; rhatx /= r; rhaty /= r; double g = (G * m.m)/rsquared; gnet += g; /* add up net g */ gx += (rhatx * g); gy += (rhaty * g); } };