From da01de063baa03718f2a079955bdf3abf703e015 Mon Sep 17 00:00:00 2001 From: Guyslain <guyslain.naves@lis-lab.fr> Date: Mon, 23 Oct 2023 16:24:47 +0200 Subject: [PATCH] =?UTF-8?q?section=208=20NextGenerationInitializer=20non-t?= =?UTF-8?q?est=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/model/NextGenerationInitializer.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/main/java/model/NextGenerationInitializer.java b/src/main/java/model/NextGenerationInitializer.java index ad03fdf..73cd613 100644 --- a/src/main/java/model/NextGenerationInitializer.java +++ b/src/main/java/model/NextGenerationInitializer.java @@ -15,7 +15,7 @@ import java.util.List; */ public class NextGenerationInitializer<S extends State<S>> implements MatrixInitializer<S> { - //TODO: ajouter les propriétés nécessaires + private final CellularAutomatonSimulation<S> simulation; /** Create a {@link MatrixInitializer} to compute the next generation in * a 2D cellular automaton. @@ -23,13 +23,17 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit * @param simulation the {@link Simulation} representing the cellular automaton. */ public NextGenerationInitializer(CellularAutomatonSimulation<S> simulation) { - //TODO: à compléter + this.simulation = simulation; } @Override public S initialValueAt(Coordinate coordinate) { - //TODO: à compléter - return null; + List<Coordinate> neighbours = coordinate.orthodiagonalNeighbours(); + List<S> states = new ArrayList<>(); + for (Coordinate neighbour : neighbours) { + states.add(this.simulation.at(wrap(neighbour)).get()); + } + return this.simulation.at(coordinate).get().update(states); } /** Computes the grid {@link Coordinate} for an arbitrary {@link Coordinate}, even outside @@ -41,10 +45,10 @@ public class NextGenerationInitializer<S extends State<S>> implements MatrixInit * @return a corresponding {@link Coordinate}, that is inside the grid. */ Coordinate wrap(Coordinate coordinate) { - //TODO: à compléter - //Il faut recalculer les coordonnées x et y modulo les dimensions de la grille. - //Pour le modulo, utiliser la fonction ci-dessous, qui s'assure que le résultat est positif. - return null; + return new Coordinate( + modulo(coordinate.x(),this.simulation.numberOfColumns()), + modulo(coordinate.y(),this.simulation.numberOfRows()) + ); } /** The non-negative remainder of n divided by d. -- GitLab