// Capacitor.java import java.awt.*; import java.awt.geom.*; public class Capacitor { String name; double value; Color color; double angle, phi; double xpos, ypos; AffineTransform tr = new AffineTransform(); Capacitor() { color = Color.RED; xpos = 0.0; ypos = 0.0; setAngle(0.0); } void setAngle(double angle) { this.angle = angle; phi = angle*Math.PI/180.0; } void setPosition(double x, double y) { xpos = x; ypos = y; } public String toString() { String out = "Capacitor " + xpos +", " + ypos + " angle " + angle; return out; } // converts screen (pixel) coordinates to object coordinates // returns true if inside the object public boolean getLocation(Point2D src, Point2D dst) { tr.transform(src,dst); if (Math.abs(dst.getX())>3.1) return false; if (Math.abs(dst.getY())>1.6) return false; return true; } public void draw(Graphics g) { int i; double u; double scl = 0.1; Graphics2D g2 = (Graphics2D) g; Stroke saveStroke = g2.getStroke(); AffineTransform saveXform = g2.getTransform(); // use minus sign to switch to book/image coordinate system g2.translate(xpos,-ypos); g2.rotate(-phi); g2.scale(scl,scl); try { tr.setToTranslation(xpos,-ypos); tr.rotate(-phi); tr.scale(scl,scl); tr = tr.createInverse(); } catch(Exception e) { System.err.println(e); } g2.setStroke(new BasicStroke(0.25f,BasicStroke.CAP_ROUND,BasicStroke.JOIN_ROUND)); Paint savePaint = g2.getPaint(); g2.setPaint(color); GeneralPath p = new GeneralPath(); double [] xp = { 0.5, 0.7, 0.9 }; double [] yp = { 1.3, 1.4, 1.5 }; p.moveTo(-3.0,0.0); p.lineTo(-0.5,0.0); p.moveTo(-0.5,-1.5); p.lineTo(-0.5,1.5); p.moveTo(0.5,-1.0); p.lineTo(0.5, 1.0); p.curveTo(xp[0],yp[0],xp[1],yp[1],xp[2],yp[2]); p.moveTo(0.5,-1.0); p.curveTo(xp[0],-yp[0],xp[1],-yp[1],xp[2],-yp[2]); p.moveTo(0.5,0.0); p.lineTo(3.0,0.0); g2.draw(p); g2.setStroke(saveStroke); g2.setPaint(savePaint); g2.setTransform(saveXform); } }
Maintained by John Loomis, updated Thu Feb 20 14:45:49 2020