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