//CarLight.java import java.awt.Graphics; import java.awt.Image; import java.awt.Color; import java.awt.MediaTracker; public class CarLight extends EinsteinObject { Einstein EIN; Image im = null; boolean good = true; int LightInterval = 60; double u = .3; public CarLight(double v, Einstein e) { super(v,e); EIN = e; } public void draw(boolean whichFrame, Graphics g) { Reality displayReality; double position; double theTime; double gamma; double velocity; if (whichFrame == Reality.OBJECT_FRAME) { displayReality = getReality(); position = displayReality.myX; theTime = displayReality.myTime; gamma = 1; velocity = 0; } else { displayReality = EIN.getReality(); velocity = displayReality.getV(); position = displayReality.theirX; theTime = displayReality.theirTime; gamma = displayReality.gamma; } g.drawImage(im,EIN.space.mapX(position)-im.getWidth(EIN),EIN.space.mapY(0)-(int)(im.getHeight(EIN)*.5),EIN); double theta = Math.PI/5; int[] xP = {EIN.space.mapX(position),EIN.space.mapX(theTime),EIN.space.mapX(theTime)}; int[] yP = {EIN.space.mapY(0),EIN.space.mapY(theTime * Math.tan(theta)),EIN.space.mapY(-theTime*Math.tan(theta))}; g.setColor(Color.yellow); g.fillPolygon(xP,yP,3); if (!good) EIN.showStatus("Not good"); if (im== null) EIN.showStatus("nutz"); } public void setCar(Image i) { if (i == null) good = false; MediaTracker mt = new MediaTracker(EIN); im = i; mt.addImage(im,0); try { mt.waitForAll(); } catch (InterruptedException ie) {} } public void timeDraw(boolean whichFrame,Graphics g) { Color color1=null,color2=null; Reality real = EIN.getReality(); boolean object = false; if (EIN.frame == Reality.OBJECT_FRAME) { real = EIN.mover.getReality(); color1 = Color.blue; color2 = Color.red; object = true; } else { color1 = Color.red; color2 = Color.blue; } EIN.offscr2.setColor(color1); EIN.time.drawPoint(real.myX,real.myTime,g); EIN.time.drawLine(0,0,real.myX,real.myTime,g); EIN.offscr2.setColor(color2); EIN.time.drawPoint(real.theirX,real.myTime,g); EIN.time.drawLine(0,0,real.theirX,real.myTime,g); g.setColor(Color.yellow); double dist = Math.sqrt(real.myX*real.myX + real.myTime*real.myTime); double numLights = (int) Math.floor(dist / LightInterval); for (int loop=0;loop <= numLights;loop++) { if ((real.getV() == 0) || object) { g.setColor(Color.yellow); EIN.time.drawPoint(real.myTime-LightInterval*loop,real.myTime,g); EIN.time.drawLine(0,LightInterval*loop,real.myTime-LightInterval*loop,real.myTime,g); //g.setColor(Color.cyan); //EIN.time.drawPoint(real.myTime-LightInterval*loop,real.myTime,g); //EIN.time.drawLine(0,LightInterval*loop,real.myTime-LightInterval*loop,real.myTime,g); } else { g.setColor(Color.yellow); double theta = Math.atan(1/real.getV()); double LenDiff = real.myTime - LightInterval*loop*Math.sin(theta); //if (loop == numLights) EIN.showStatus("LenDiff= "+LenDiff); EIN.time.drawPoint(LightInterval*loop*Math.cos(theta)+LenDiff,LightInterval*loop*Math.sin(theta)+LenDiff,g); EIN.time.drawLine(LightInterval*loop*Math.cos(theta),LightInterval*loop*Math.sin(theta),LightInterval*loop*Math.cos(theta)+LenDiff,LightInterval*loop*Math.sin(theta)+LenDiff,g); /*g.setColor(Color.cyan); double v_combo = (real.getV()- .3)/(1 - (.3*real.getV())); double theta2 = Math.atan(1/v_combo); double LenDifft = real.myTime - LightInterval*(loop+.5)*Math.sin(theta); double LenDiffx = v_combo*LenDifft+LightInterval*(loop+.5)*Math.cos(theta); //if (loop == numLights) EIN.showStatus("LenDiff= "+LenDiff); EIN.time.drawPoint(LightInterval*(loop+.5)*Math.cos(theta)+theta2*LenDiffx,LightInterval*(loop+.5)*Math.sin(theta)+LenDifft,g); EIN.time.drawLine(0,0,LightInterval*loop*Math.cos(theta)+LenDiffx,LightInterval*loop*Math.sin(theta)+LenDifft,g); */ } } } }