WallSeg.javaimport 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