WallSeg.java
import java.awt.*; public class WallSeg { int pt0[]; int pt1[]; Color color; String str; double kx, ky, scl; WallSeg() { pt0 = new int[] {250, 200}; pt1 = new int[] {150, 50}; color = Color.black; setup(); } public void setup() { kx = pt1[0]-pt0[0]; ky = pt1[1]-pt0[1]; scl = Math.sqrt(kx*kx+ky*ky); kx = kx/scl; ky = ky/scl; } public void draw(Graphics g) { g.setColor(color); g.drawLine(pt0[0],pt0[1],pt1[0],pt1[1]); } public double intersect(Ball ball, double tstep) { // distance to pt0 double px = ball.px - pt0[0]; double py = ball.py - pt0[1]; double dist, q; double d[] = new double[3]; d[0] = Math.sqrt(px*px+py*py)/ball.radius; // distance to pt1 double qx = ball.px - pt1[0]; double qy = ball.py - pt1[1]; d[1] = Math.sqrt(qx*qx+qy*qy)/ball.radius; // distance to line d[2] = (kx*py - ky*px)/ball.radius; q = (px*kx+py*ky)/scl; if (d[2]<0) { d[0] = -d[0]; d[1] = -d[1]; } if (q>1) dist = d[1]; else if (q<0) dist = d[0]; else dist = d[2]; str = String.format("dist %6.1f q %6.1f",dist,q); if (Math.abs(dist)<=1.0) ball.color = Color.RED; else ball.color = Color.YELLOW; return -1; } }
Maintained by John Loomis, updated Mon Nov 11 15:59:58 2013