diff --git a/src/main/java/ma2tetr/App.java b/src/main/java/ma2tetr/App.java index d143df9..f933a85 100644 --- a/src/main/java/ma2tetr/App.java +++ b/src/main/java/ma2tetr/App.java @@ -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()); } } diff --git a/src/main/java/ma2tetr/api/ITetrahedronCoordCalculator.java b/src/main/java/ma2tetr/api/ITetrahedronCoordCalculator.java index f8e4977..bc2bd11 100644 --- a/src/main/java/ma2tetr/api/ITetrahedronCoordCalculator.java +++ b/src/main/java/ma2tetr/api/ITetrahedronCoordCalculator.java @@ -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 getStateLog(); } diff --git a/src/main/java/ma2tetr/impl/StateLogger.java b/src/main/java/ma2tetr/impl/StateLogger.java new file mode 100644 index 0000000..5442297 --- /dev/null +++ b/src/main/java/ma2tetr/impl/StateLogger.java @@ -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 points; + private List log; + + public StateLogger(Coords3D center, Set points, List log) { + this.center = center; + this.points = points; + this.log = log; + } + + public void logState() { + Set coords = new HashSet<>(); + for (Coords3D point : points) { + coords.add(Vector3D.createFromPoints(center, point)); + } + log.add(new IterationState(coords)); + } + +} diff --git a/src/main/java/ma2tetr/impl/TetrahedronMovingCalculator.java b/src/main/java/ma2tetr/impl/TetrahedronMovingCalculator.java index a656692..28f2e77 100644 --- a/src/main/java/ma2tetr/impl/TetrahedronMovingCalculator.java +++ b/src/main/java/ma2tetr/impl/TetrahedronMovingCalculator.java @@ -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 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 getStateLog() { + return log; + } } diff --git a/src/main/java/ma2tetr/impl/TetrahedronScalingCalculator.java b/src/main/java/ma2tetr/impl/TetrahedronScalingCalculator.java index 35a716b..8f74d2d 100644 --- a/src/main/java/ma2tetr/impl/TetrahedronScalingCalculator.java +++ b/src/main/java/ma2tetr/impl/TetrahedronScalingCalculator.java @@ -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 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 getStateLog() { + return log; + } + } diff --git a/src/main/java/ma2tetr/model/IterationState.java b/src/main/java/ma2tetr/model/IterationState.java new file mode 100644 index 0000000..45b0d91 --- /dev/null +++ b/src/main/java/ma2tetr/model/IterationState.java @@ -0,0 +1,17 @@ +package ma2tetr.model; + +import java.util.Set; + +public class IterationState { + + Set points; + + public IterationState(Set points) { + this.points = points; + } + + public Set getPoints() { + return points; + } + +}