// 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