diff --git a/src/main/java/edu/ntnu/stud/chaosgame/Main.java b/src/main/java/edu/ntnu/stud/chaosgame/Main.java index c949136e3cc2a92dc3b5799dfbb77f4920a8a53a..7acd279c91a67f1e9fc62d81d01a93129f59341a 100644 --- a/src/main/java/edu/ntnu/stud/chaosgame/Main.java +++ b/src/main/java/edu/ntnu/stud/chaosgame/Main.java @@ -22,12 +22,22 @@ public class Main { Vector2D minCoords = new Vector2D(0, 0); Vector2D maxCoords = new Vector2D(1, 1); - Matrix2x2 transformMatrix = new Matrix2x2(0, 0.5, 0, 0.5); - Vector2D translationVector = new Vector2D(0.5, 0); - AffineTransform2D affineTransform = new AffineTransform2D(transformMatrix, translationVector); + Matrix2x2 transformMatrix1 = new Matrix2x2(0.5, 0, 0, 0.5); + + + Vector2D translationVector1 = new Vector2D(0, 0); + Vector2D translationVector2 = new Vector2D(0.25, 0.5); + Vector2D translationVector3 = new Vector2D(0.5, 0); + + AffineTransform2D affineTransform1 = new AffineTransform2D(transformMatrix1, translationVector1); + AffineTransform2D affineTransform2 = new AffineTransform2D(transformMatrix1, translationVector2); + AffineTransform2D affineTransform3 = new AffineTransform2D(transformMatrix1, translationVector3); + List<Transform2D> transforms = new ArrayList<>(); - transforms.add(affineTransform); + transforms.add(affineTransform1); + transforms.add(affineTransform2); + transforms.add(affineTransform3); ChaosGameDescription description = null; // Declare description ChaosGame game = null; @@ -36,13 +46,14 @@ public class Main { //ChaosGameDescription description = new ChaosGameFileHandler().readFromFile(path); description = new ChaosGameDescription(minCoords, maxCoords, transforms); System.out.println("MaxCoords-object of description: " + description.getMaxCoords()); - ChaosCanvas canvas = new ChaosCanvas(100, 100, minCoords, maxCoords); // Create canvas + ChaosCanvas canvas = new ChaosCanvas(100, 100, description.getMinCoords(), description.getMaxCoords()); // Create canvas game = new ChaosGame(description, canvas); } catch (Exception e) { System.out.println(e.getMessage()); // TODO: Alter error handling } - game.runSteps(100); + game.runSteps(100000); + } diff --git a/src/main/java/edu/ntnu/stud/chaosgame/model/Matrix2x2.java b/src/main/java/edu/ntnu/stud/chaosgame/model/Matrix2x2.java index 3db0c55fb8cc2e7b5d62612c25172bb25f4c4e57..a45d3692eac79a2768984717b119a1a301ac5ae3 100644 --- a/src/main/java/edu/ntnu/stud/chaosgame/model/Matrix2x2.java +++ b/src/main/java/edu/ntnu/stud/chaosgame/model/Matrix2x2.java @@ -56,6 +56,7 @@ public class Matrix2x2 { public double getA00() { return a00; } + /** * Getter method for {@link edu.ntnu.stud.chaosgame.game.ChaosGameDescription} * @return a matrix component. @@ -63,6 +64,7 @@ public class Matrix2x2 { public double getA01() { return a01; } + /** * Getter method for {@link edu.ntnu.stud.chaosgame.game.ChaosGameDescription} * @return a matrix component. @@ -70,6 +72,7 @@ public class Matrix2x2 { public double getA10() { return a10; } + /** * Getter method for {@link edu.ntnu.stud.chaosgame.game.ChaosGameDescription} * @return a matrix component. diff --git a/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosCanvas.java b/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosCanvas.java index c6f620b6b3f1efbdc2dd195abe1a93106db3e734..69dc7dfa9c8b9223169409569879475eb610559d 100644 --- a/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosCanvas.java +++ b/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosCanvas.java @@ -13,17 +13,17 @@ public class ChaosCanvas { /** * Table representing the canvas. */ - private int[][] canvas; + private final int[][] canvas; /** * Width of the canvas */ - private int width; + private final int width; /** * Height of the canvas */ - private int height; + private final int height; /** * The minimum coordinates of the canvas. @@ -54,14 +54,17 @@ public class ChaosCanvas { this.minCoords = minCoords; this.maxCoords = maxCoords; - this.canvas = new int[width][height]; + this.canvas = new int[height][width]; // Define the affine transformation that maps coordinates to indices in the canvas. + /*this.transformCoordsToIndices = new AffineTransform2D( + new Matrix2x2(0, (height - 1) / (minCoords.getX1() - maxCoords.getX1()), (width - 1) / (maxCoords.getX0() - minCoords.getX0()), 0), + new Vector2D((((height - 1) * maxCoords.getX1()) / (maxCoords.getX1() - minCoords.getX1())), + ((width - 1) * minCoords.getX0()) / (minCoords.getX0() - maxCoords.getX0())) + );*/ this.transformCoordsToIndices = new AffineTransform2D( - new Matrix2x2(0, height - 1, width - 1, 0), - new Vector2D((((height - 1) * maxCoords.getX0()) / maxCoords.getX1()), - ((width - 1) * minCoords.getX1()) / maxCoords.getX1()) - ); + new Matrix2x2(0, (height-1) / (minCoords.getX1() - maxCoords.getX1()), (width-1) / (maxCoords.getX0() - minCoords.getX0()), 0), + new Vector2D(((height-1)* maxCoords.getX1()) / (maxCoords.getX1() - minCoords.getX1()), (width-1)* minCoords.getX0() / (minCoords.getX0() - maxCoords.getX0()))); } /** @@ -71,7 +74,7 @@ public class ChaosCanvas { * @return the pixel */ public int getPixel(Vector2D point) { - return canvas[(int) transformCoordsToIndices.transform(point).getX0()] + return canvas[ (int) transformCoordsToIndices.transform(point).getX0()] [(int) transformCoordsToIndices.transform(point).getX1()]; } @@ -99,4 +102,20 @@ public class ChaosCanvas { } } + /** + * Prints the current state of the canvas to the console. + * Populated points are represented by 'x', unpopulated points by ' '. + */ + public void printCanvas() { + for (int i = 0; i < width; i++) { + for (int j = 0; j < height; j++) { + if (canvas[i][j] == 1) { + System.out.print('x'); + } else { + System.out.print(' '); + } + } + System.out.println(); + } + } } diff --git a/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosGame.java b/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosGame.java index 5e6c8de1b83f8a20597525fcaee441170c2bf647..4d7275fd52ea8943b11fb7d792686aa5d4090c45 100644 --- a/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosGame.java +++ b/src/main/java/edu/ntnu/stud/chaosgame/model/handling/ChaosGame.java @@ -61,10 +61,11 @@ public class ChaosGame { public void runSteps(int n) { for (int i = 0; i < n; i++) { int j = this.random.nextInt(0, this.numOfTransforms); - j = 0; this.currentPoint = this.description.getTransforms().get(j).transform(currentPoint); + System.out.println(currentPoint.getX0() + " " + currentPoint.getX1()); this.canvas.putPixel(currentPoint); } + this.canvas.printCanvas(); } }