code clean
This commit is contained in:
parent
ceb9800f38
commit
45f8520ad1
@ -11,12 +11,6 @@ public class CONFIG {
|
||||
|
||||
public static final double MAX_RESISTANCE = 1 / NO_RESISTANCE;
|
||||
|
||||
public static boolean SHOW_WIRE_DETAILS = true;
|
||||
|
||||
public static boolean SHOW_NODE_VOLTAGES = false;
|
||||
|
||||
public static boolean SHOW_NODE_NAMES = false;
|
||||
|
||||
public static final double VOLTAGE_HIGH_MIN = 0.1;
|
||||
|
||||
public static final int RASTER = 200;
|
||||
@ -81,6 +75,12 @@ public class CONFIG {
|
||||
|
||||
public static final BasicStroke SWITCH_STROKE = new BasicStroke(15);
|
||||
|
||||
public static boolean SHOW_WIRE_DETAILS = true;
|
||||
|
||||
public static boolean SHOW_NODE_VOLTAGES = false;
|
||||
|
||||
public static boolean SHOW_NODE_NAMES = false;
|
||||
|
||||
public static Point ALIGN(final Point position) {
|
||||
return new Point(position.x / RASTER * RASTER, position.y / RASTER * RASTER);
|
||||
}
|
||||
|
||||
@ -36,6 +36,11 @@ public class Window extends JFrame {
|
||||
setVisible(true);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
final Window window = new Window();
|
||||
window.setCircuit(Demos.potiAndVoltmeter());
|
||||
}
|
||||
|
||||
public void setCircuit(final Circuit circuit) {
|
||||
circuitPanel.setCircuit(circuit);
|
||||
}
|
||||
@ -51,9 +56,4 @@ public class Window extends JFrame {
|
||||
setLocation(screenBounds.x, screenBounds.y);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
final Window window = new Window();
|
||||
window.setCircuit(Demos.potiAndVoltmeter());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package de.ph87.electro.circuit;
|
||||
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.Orientation;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.geom.AffineTransform;
|
||||
|
||||
@ -36,20 +36,6 @@ public class Calculation {
|
||||
|
||||
private RealVector potentials = null;
|
||||
|
||||
public static List<Calculation> calculate(final Circuit circuit) {
|
||||
final List<Calculation> calculations = new ArrayList<>();
|
||||
final List<Battery> batteries = new ArrayList<>(circuit.streamParts().flatMap(Battery::filterCast).toList());
|
||||
while (!batteries.isEmpty()) {
|
||||
final Battery pivot = batteries.removeFirst();
|
||||
final Set<Node> connectedNodes = new HashSet<>();
|
||||
pivot.getPlus().collectConnectedNodes(connectedNodes);
|
||||
pivot.getMinus().collectConnectedNodes(connectedNodes);
|
||||
connectedNodes.stream().filter(n -> n instanceof PartNode).map(n -> (PartNode) n).map(PartNode::getPart).flatMap(Battery::filterCast).forEach(batteries::remove);
|
||||
calculations.add(new Calculation(connectedNodes, pivot));
|
||||
}
|
||||
return calculations;
|
||||
}
|
||||
|
||||
public Calculation(final int numNodes) {
|
||||
matrix = new Array2DRowRealMatrix(numNodes, numNodes);
|
||||
currents = new ArrayRealVector(numNodes);
|
||||
@ -74,6 +60,20 @@ public class Calculation {
|
||||
toSchematic();
|
||||
}
|
||||
|
||||
public static List<Calculation> calculate(final Circuit circuit) {
|
||||
final List<Calculation> calculations = new ArrayList<>();
|
||||
final List<Battery> batteries = new ArrayList<>(circuit.streamParts().flatMap(Battery::filterCast).toList());
|
||||
while (!batteries.isEmpty()) {
|
||||
final Battery pivot = batteries.removeFirst();
|
||||
final Set<Node> connectedNodes = new HashSet<>();
|
||||
pivot.getPlus().collectConnectedNodes(connectedNodes);
|
||||
pivot.getMinus().collectConnectedNodes(connectedNodes);
|
||||
connectedNodes.stream().filter(n -> n instanceof PartNode).map(n -> (PartNode) n).map(PartNode::getPart).flatMap(Battery::filterCast).forEach(batteries::remove);
|
||||
calculations.add(new Calculation(connectedNodes, pivot));
|
||||
}
|
||||
return calculations;
|
||||
}
|
||||
|
||||
private void fromSchematic() {
|
||||
wires.forEach(
|
||||
wire -> addResistor(wire.getA(), wire.getB(), CONFIG.NO_RESISTANCE)
|
||||
@ -194,12 +194,12 @@ public class Calculation {
|
||||
@Getter
|
||||
private static final class Format {
|
||||
|
||||
private final String format;
|
||||
|
||||
private int integer;
|
||||
|
||||
private int decimal;
|
||||
|
||||
private final String format;
|
||||
|
||||
public Format(final RealMatrix matrix) {
|
||||
for (int r = 0; r < matrix.getRowDimension(); r++) {
|
||||
for (int c = 0; c < matrix.getColumnDimension(); c++) {
|
||||
|
||||
@ -26,10 +26,10 @@ public class Node {
|
||||
private final String name;
|
||||
|
||||
@NonNull
|
||||
protected Point position;
|
||||
private final Set<Wire> wires = new HashSet<>();
|
||||
|
||||
@NonNull
|
||||
private final Set<Wire> wires = new HashSet<>();
|
||||
protected Point position;
|
||||
|
||||
@NonNull
|
||||
@ToString.Include
|
||||
@ -38,13 +38,6 @@ public class Node {
|
||||
@NonNull
|
||||
private Color color = VOLTAGE_UNKNOWN_COLOR;
|
||||
|
||||
@NonNull
|
||||
@ToString.Include
|
||||
@SuppressWarnings("unused") // lombok toString
|
||||
public List<String> destinations() {
|
||||
return wires.stream().map(wire -> wire.getOpposite(this)).map(Node::getUuid).toList();
|
||||
}
|
||||
|
||||
public Node(@NonNull final String name, @NonNull final Point position) {
|
||||
this.uuid = UUID.randomUUID().toString();
|
||||
this.name = name;
|
||||
@ -57,6 +50,13 @@ public class Node {
|
||||
this.position = position;
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@ToString.Include
|
||||
@SuppressWarnings("unused") // lombok toString
|
||||
public List<String> destinations() {
|
||||
return wires.stream().map(wire -> wire.getOpposite(this)).map(Node::getUuid).toList();
|
||||
}
|
||||
|
||||
public void setVoltage(final double voltage) {
|
||||
this.voltage = voltage;
|
||||
this.color = Double.isNaN(voltage) ? VOLTAGE_UNKNOWN_COLOR : ((voltage >= VOLTAGE_HIGH_MIN) ? VOLTAGE_HIGH_COLOR : VOLTAGE_LOW_COLOR);
|
||||
|
||||
@ -25,6 +25,12 @@ public abstract class Part {
|
||||
@ToString.Include
|
||||
private final String uuid;
|
||||
|
||||
@NonNull
|
||||
private final List<PartNode> nodes = new ArrayList<>();
|
||||
|
||||
@NonNull
|
||||
protected Orientation orientation = Orientation.R0;
|
||||
|
||||
@NonNull
|
||||
@Setter
|
||||
@ToString.Include
|
||||
@ -33,12 +39,6 @@ public abstract class Part {
|
||||
@NonNull
|
||||
private Point position;
|
||||
|
||||
@NonNull
|
||||
protected Orientation orientation = Orientation.R0;
|
||||
|
||||
@NonNull
|
||||
private final List<PartNode> nodes = new ArrayList<>();
|
||||
|
||||
@NonNull
|
||||
private AffineTransform transform = new AffineTransform();
|
||||
|
||||
@ -57,6 +57,23 @@ public abstract class Part {
|
||||
updateTransform();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Part fromDto(@NonNull final PartDto abstractDto) {
|
||||
return switch (abstractDto) {
|
||||
case final BatteryDto dto -> new Battery(dto);
|
||||
case final ConnectorCornerDto dto -> new ConnectorCorner(dto);
|
||||
case final ConnectorEdgeDto dto -> new ConnectorEdge(dto);
|
||||
case final ConnectorMiddleDto dto -> new ConnectorMiddle(dto);
|
||||
case final LightDto dto -> new Light(dto);
|
||||
case final Switch1x1Dto dto -> new Switch1x1(dto);
|
||||
case final Switch1x2Dto dto -> new Switch1x2(dto);
|
||||
case final SwitchCrossDto dto -> new SwitchCross(dto);
|
||||
case final PotiDto dto -> new Poti(dto);
|
||||
case final VoltmeterDto dto -> new Voltmeter(dto);
|
||||
case null, default -> throw new RuntimeException();
|
||||
};
|
||||
}
|
||||
|
||||
public void setPosition(@NonNull final Point position) {
|
||||
this.position = position;
|
||||
updateTransform();
|
||||
@ -136,21 +153,4 @@ public abstract class Part {
|
||||
return nodes.stream().filter(node -> node.intersects(position)).findFirst();
|
||||
}
|
||||
|
||||
@NonNull
|
||||
public static Part fromDto(@NonNull final PartDto abstractDto) {
|
||||
return switch (abstractDto) {
|
||||
case final BatteryDto dto -> new Battery(dto);
|
||||
case final ConnectorCornerDto dto -> new ConnectorCorner(dto);
|
||||
case final ConnectorEdgeDto dto -> new ConnectorEdge(dto);
|
||||
case final ConnectorMiddleDto dto -> new ConnectorMiddle(dto);
|
||||
case final LightDto dto -> new Light(dto);
|
||||
case final Switch1x1Dto dto -> new Switch1x1(dto);
|
||||
case final Switch1x2Dto dto -> new Switch1x2(dto);
|
||||
case final SwitchCrossDto dto -> new SwitchCross(dto);
|
||||
case final PotiDto dto -> new Poti(dto);
|
||||
case final VoltmeterDto dto -> new Voltmeter(dto);
|
||||
case null, default -> throw new RuntimeException();
|
||||
};
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.InnerConnection;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,9 +1,9 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.InnerConnection;
|
||||
import de.ph87.electro.circuit.part.Orientation;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.InnerConnection;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.InnerConnection;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -1,8 +1,8 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import de.ph87.electro.circuit.part.InnerConnection;
|
||||
import de.ph87.electro.circuit.part.Part;
|
||||
import de.ph87.electro.circuit.node.Node;
|
||||
import lombok.Getter;
|
||||
import lombok.ToString;
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.ToString;
|
||||
|
||||
@ -34,6 +34,8 @@ public class Voltmeter extends Part {
|
||||
|
||||
private final Node b;
|
||||
|
||||
double x = 0;
|
||||
|
||||
@Setter
|
||||
private double min = -3;
|
||||
|
||||
@ -56,7 +58,9 @@ public class Voltmeter extends Part {
|
||||
postCalculate(); // TODO remove
|
||||
}
|
||||
|
||||
double x = 0;
|
||||
public static Point P(final RealVector anchor) {
|
||||
return new Point((int) round(anchor.getEntry(0)), (int) round(anchor.getEntry(1)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void _render(final Graphics2D g) {
|
||||
@ -75,10 +79,6 @@ public class Voltmeter extends Part {
|
||||
drawCircle(g, P(ANCHOR), P03, 0, 360, null, null, Color.black);
|
||||
}
|
||||
|
||||
public static Point P(final RealVector anchor) {
|
||||
return new Point((int) round(anchor.getEntry(0)), (int) round(anchor.getEntry(1)));
|
||||
}
|
||||
|
||||
private double getVoltage() {
|
||||
return !Double.isNaN(b.getVoltage()) && !Double.isNaN(a.getVoltage()) ? b.getVoltage() - a.getVoltage() : 0.0;
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package de.ph87.electro.circuit.part.parts;
|
||||
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import de.ph87.electro.circuit.node.NodeDto;
|
||||
import de.ph87.electro.circuit.part.PartDto;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user