add iteration state logging

This commit is contained in:
Timo Ley 2023-05-18 21:50:31 +02:00
parent 4e04ff5fce
commit 702200b220
6 changed files with 77 additions and 0 deletions

View file

@ -35,5 +35,6 @@ public class App {
System.out.println(t.getP1());
System.out.println(t.getP2());
System.out.println(t.getP3());
System.out.println("Iterations needed: " + calc.getStateLog().size());
}
}

View file

@ -1,5 +1,8 @@
package ma2tetr.api;
import java.util.List;
import ma2tetr.model.IterationState;
import ma2tetr.model.Tetrahedron;
public interface ITetrahedronCoordCalculator {
@ -11,5 +14,7 @@ public interface ITetrahedronCoordCalculator {
void calculate();
Tetrahedron getTetrahedron();
List<IterationState> getStateLog();
}

View file

@ -0,0 +1,31 @@
package ma2tetr.impl;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ma2tetr.model.Coords3D;
import ma2tetr.model.IterationState;
import ma2tetr.model.Vector3D;
public class StateLogger {
private Coords3D center;
private Set<Coords3D> points;
private List<IterationState> log;
public StateLogger(Coords3D center, Set<Coords3D> points, List<IterationState> log) {
this.center = center;
this.points = points;
this.log = log;
}
public void logState() {
Set<Coords3D> coords = new HashSet<>();
for (Coords3D point : points) {
coords.add(Vector3D.createFromPoints(center, point));
}
log.add(new IterationState(coords));
}
}

View file

@ -1,12 +1,15 @@
package ma2tetr.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import ma2tetr.api.ITetrahedronCoordCalculator;
import ma2tetr.invariant.RadiusInvariant;
import ma2tetr.invariant.TetrahedronInvariant;
import ma2tetr.model.Coords3D;
import ma2tetr.model.IterationState;
import ma2tetr.model.Point3D;
import ma2tetr.model.Tetrahedron;
import ma2tetr.model.Vector3D;
@ -15,6 +18,7 @@ public class TetrahedronMovingCalculator implements ITetrahedronCoordCalculator
private double radius = 1.0;
private Tetrahedron tetrahedron = null;
private List<IterationState> log = new ArrayList<>();
@Override
public void setRadius(double radius) {
@ -32,6 +36,7 @@ public class TetrahedronMovingCalculator implements ITetrahedronCoordCalculator
points.add(triangle.getP1());
points.add(triangle.getP2());
points.add(triangle.getP3());
StateLogger logger = new StateLogger(center, points, log);
RadiusInvariant rinv = new RadiusInvariant(points, center, radius);
TetrahedronInvariant tinv = new TetrahedronInvariant(top, triangle.getP1(), triangle.getP2(), triangle.getP3());
double scaling = radius / 10;
@ -45,6 +50,7 @@ public class TetrahedronMovingCalculator implements ITetrahedronCoordCalculator
triangle.move(-scaling);
scaling = scaling / 10;
}
logger.logState();
}
tetrahedron = new Tetrahedron(top, triangle.getP1(), triangle.getP2(), triangle.getP3());
}
@ -58,5 +64,10 @@ public class TetrahedronMovingCalculator implements ITetrahedronCoordCalculator
public double getRadius() {
return this.radius;
}
@Override
public List<IterationState> getStateLog() {
return log;
}
}

View file

@ -1,9 +1,13 @@
package ma2tetr.impl;
import java.util.ArrayList;
import java.util.List;
import ma2tetr.api.ITetrahedronCoordCalculator;
import ma2tetr.invariant.RadiusInvariant;
import ma2tetr.invariant.TetrahedronInvariant;
import ma2tetr.model.Coords3D;
import ma2tetr.model.IterationState;
import ma2tetr.model.Tetrahedron;
import ma2tetr.model.Vector3D;
@ -11,6 +15,7 @@ public class TetrahedronScalingCalculator implements ITetrahedronCoordCalculator
private double radius = 1.0;
private Tetrahedron tetrahedron = null;
private List<IterationState> log = new ArrayList<>();
@Override
public void setRadius(double radius) {
@ -21,6 +26,7 @@ public class TetrahedronScalingCalculator implements ITetrahedronCoordCalculator
public void calculate() {
Coords3D center = new Vector3D(0, 0, 0);
tetrahedron = new Tetrahedron(0, radius, 0);
StateLogger logger = new StateLogger(center, tetrahedron.getPointsSet(), log);
TetrahedronInvariant tinv = new TetrahedronInvariant(tetrahedron);
RadiusInvariant rinv = new RadiusInvariant(tetrahedron.getPointsSet(), center, radius);
double scaling = radius / 10;
@ -34,6 +40,7 @@ public class TetrahedronScalingCalculator implements ITetrahedronCoordCalculator
tetrahedron.scale(-scaling);
scaling = scaling / 10;
}
logger.logState();
}
}
@ -47,4 +54,9 @@ public class TetrahedronScalingCalculator implements ITetrahedronCoordCalculator
return this.radius;
}
@Override
public List<IterationState> getStateLog() {
return log;
}
}

View file

@ -0,0 +1,17 @@
package ma2tetr.model;
import java.util.Set;
public class IterationState {
Set<Coords3D> points;
public IterationState(Set<Coords3D> points) {
this.points = points;
}
public Set<Coords3D> getPoints() {
return points;
}
}