code clean

This commit is contained in:
Patrick Haßel 2024-12-05 15:21:15 +01:00
parent ceb9800f38
commit 45f8520ad1
24 changed files with 82 additions and 82 deletions

View File

@ -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);
}

View File

@ -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());
}
}

View File

@ -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;

View File

@ -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++) {

View File

@ -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);

View File

@ -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();
};
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}

View File

@ -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;