// Particle.java import java.awt.Color; import java.awt.Graphics; class Particle { Particle() { xpts = new int[3]; ypts = new int[3]; gray = new int[3]; npts = 0; phase = 0; counter = -1; skipSegment = -1; resetFlag = false; exists = false; } void set(float f, float f1, Singularity singularity) { s = singularity; dx = f; dy = f1; x = s.x + dx; y = s.y + dy; npts = 0; phase = 0; counter = -1; skipSegment = -1; resetFlag = false; exists = true; } public synchronized void addPoint(int i, int j, int k) { xpts[phase] = i; ypts[phase] = j; gray[phase] = k; if(resetFlag) {skipSegment = phase; counter = 3; resetFlag = false;} phase = (phase + 1) % 3; npts = Math.min(3, npts + 1); } public synchronized void drawSimple(Graphics g) { g.setColor(Color.white); int i = xpts[0]; int j = ypts[0]; g.drawLine(i, j, i, j); } public synchronized void draw(Graphics g) { int i2 = 2; boolean flag = false; if(npts < 3) { i2 = npts - 1; int l2 = 42 / npts; int i = xpts[0]; int k = ypts[0]; for(int l3 = 0; l3 < i2; l3++) { int j2 = l3 + 1; int j3 = gray[j2] + j2 * l2; g.setColor(new Color(j3, j3, j3)); int i1; int k1; g.drawLine(i, k, i1 = xpts[j2], k1 = ypts[j2]); i = i1; k = k1; } if(skipSegment > -1) counter--; if(counter == 0) skipSegment = -1; } else { int j = xpts[phase]; int l = ypts[phase]; int i3 = 42 / i2; for(int i4 = 0; i4 < i2; i4++) { int k2 = (i4 + 1 + phase) % 3; int k3 = gray[k2] + (i4 + 1) * i3; g.setColor(new Color(k3, k3, k3)); int j1 = xpts[k2]; int l1 = ypts[k2]; if(k2 != skipSegment && Math.abs(j1 - j) < 10 && Math.abs(l1 - l) < 10) g.drawLine(j, l, j1, l1); j = j1; l = l1; } if(skipSegment > -1) counter--; if(counter == 0) skipSegment = -1; } } public void reset() {x = s.x + dx; y = s.y + dy; resetFlag = true;} private static final int MAXPTS = 3; private static final int MAXLINES = 2; private static final int COLOR_HEADROOM = 42; private boolean resetFlag; private int skipSegment; private int counter; private int xpts[]; private int ypts[]; private int gray[]; private int npts; private int phase; public boolean exists; Singularity s; float x, y; float dx, dy; }