// 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. package us.ca.sj.monkey.srl; import java.applet.*; import java.awt.*; import java.util.*; import java.lang.*; class Mass { public double x; public double y; public double dx; public double dy; public double m; public boolean fixed; public Mass(double xx, double yy, double dxx, double dyy, double mm,boolean ff) { x = xx; y = yy; m = mm; dx = dxx; dy = dyy; fixed = ff; } public void Draw(Graphics g) { int r = (int)(m); if(fixed == true) g.setColor(Color.black); else g.setColor(Color.blue); g.fillOval((int) (x-(r/2)), (int)(y-(r/2)), r,r); if(fixed == false) { g.setColor(Color.red); g.drawLine( (int) (x), (int)(y) , (int) (x+dx), (int)(y+dy) ); } } public void Erase(Graphics g) { int r = (int)(m); g.setColor(Color.white); g.fillRectl((int) (x-(r/2)), (int)(y-(r/2)), r,r); } public void doIdle() { x += dx; y += dy; } }; public class GSim1 extends Applet implements Runnable { //public static final double G = 0.0000000000667; // real life public static final double G = 20; // :) !! private TextField massField; private TextField dxField; private TextField dyField; private Vector masses; private Thread fThread = null; // GRRRRRRRRRRRRRRRRRRRRRRRR double gx = 0; double gy = 0; double gnet = 0; public void run() { for(;;) { Mass m = null; Mass massar[] = new Mass[masses.size()]; int i = 0; int k; int numMasses; for ( Enumeration e = masses.elements() ; e.hasMoreElements() ; ) { m = (Mass)e.nextElement(); m.doIdle(); massar[i++] = m; } numMasses = i; for(i=0;i 0)); repaint(); } catch ( Throwable t ) { System.out.println("click failed: " + t.toString()); } return true; } int n = 4; 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); Mass m = null; for ( Enumeration e = masses.elements() ; e.hasMoreElements() ; ) { m = (Mass)e.nextElement(); m.Draw(gr); } } private void calculateForce(Mass m1, Mass m2 ) /* force of m1 on m2 */ { // RETURNS it's result by adding to gnet/gx/gy double rsquared = ((m1.x-m2.x)*(m1.x-m2.x)) + ((m1.y-m2.y)*(m1.y-m2.y)); double r = /* distance */ java.lang.Math.sqrt( rsquared ); double rhatx = m2.x-m1.x; /* x and y components of rhat [point p->m[i] ] */ double rhaty = m2.y-m1.y; rhatx /= r; rhaty /= r; double g = - (G * m1.m * m2.m)/rsquared; gnet += g; /* add up net g */ gx += (rhatx * g); gy += (rhaty * g); } };