diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8e073c1a3641d5a6040b55eaeb505c17cefa9889 --- /dev/null +++ b/README.md @@ -0,0 +1,178 @@ +# Portfolio project IDATT2003 - 2024 + +GROUP ID = "0019" + +STUDENT NAME = "Vetle Solheim Hodne" +<br> +STUDENT ID = "10013" + + +STUDENT NAME = "Edvard Berdal Eek" +<br> +STUDENT ID = "10036" + + +## Project description + +This project revolves around visual representation of fractals. +The chaos game is a method for creating fractals by randomly placing points +in a plane and then moving a point towards the randomly placed points. +With affine transformations, the chaos game can be used to create fractals such as the Sierpinski triangle and the Barnsley fern. +Here the points are applied a random transformation from a set of transformations. + +Chaos Julia-transformations are can be created by iterating a complex through a function, which takes the square root of +the sum of the complex number and another a constant complex number then randomly selects the +sign to be positive or negative, and then plotting the result. + +## Project structure + + +- `IDATT2003-2024-0019-ChaosGame` + - `src/` (folder for source files) + - `main/` + - `java/` + - `edu.ntnu.stud/` + - `controller` (package for controller classes) + - `interfaces` (package for interfaces in controller package) + - `GameController.java` (interface for game controllers) + - `Observer.java` (interface for observer implementation) + - `Subject.java` (interface for subject implementation) + - `ChaosGameController.java` (controller for chaos game) + - `ChaosGameDescriptionFactory.java` (factory pattern for chaos game descriptions) + - `ChaosGameFileHandler.java` (file handler for chaos games) + - `ExploreGameController.java` (controller for explore game) + - `HomeController.java` (controller for home page) + - `PageController.java` (controller for pages) + - `model` (package for running the program) + - `chaos` (package for fractal game related entity classes) + - `ChaosCanvas.java` (class for chaos canvas) + - `ChaosGame.java` (class for chaos game) + - `ChaosGameDescription.java` (class for chaos game description) + - `ChaosGameType.java` (enum for chaos game type) + - `ExploreGame.java` (class for explore game) + - `linalg` (package for linear algebra related classes) + - `Complex.java` (class for complex numbers) + - `Matrix2x2.java` (class for 2x2 matrices) + - `Vector2D.java` (class for 2D vectors) + - `transformations` (package for transformations related classes) + - `AffineTransform2D.java` (class for affine transformations) + - `ExploreJulia.java` (class for explore julia) + - `JuliaTransform.java` (class for julia transformations) + - `Trandsform2D.java` (interface for 2D transformations) + - `view` (package for view classes) + - `ChaosPage.java` (view class for chaos game) + - `ExplorePage.java` (view class for explore game) + - `GamePage.java` (abstract class for game pages) + - `HomePage.java` (view class for the home page) + - `module-info.java` (module info file) + - `resources/` (folder for resources) + - `media/` (folder for css files) + - `ChaosVideoFinal.mp4` (image for chaos game) + - `ExploreVideoFinal.mp4` (image for explore game) + - `White-home-icon.png` (image for home page) + - `stylesheets/` (folder for fxml files) + - `style.css` (css file for styling the application) + - `testFiles/` (folder for images) + - `barnsley.txt` (text file for barnsley fern) + - `juila.txt` (text file for julia set) + - `sierpinski.txt` (text file for sierpinski triangle) + + - `test/` (folder for JUnit-tests) + - `java/` + - `edu.ntnu.stud/` + - `controller` (package for controller classes) + - `interfaces` (package for interfaces in controller package) + - `GameControllerTest.java` (interface for game controllers) + - `ObserverTest.java` (interface for observer implementation) + - `SubjectTest.java` (interface for subject implementation) + - `ChaosGameControllerTest.java` (controller for chaos game) + - `ChaosGameDescriptionFactoryTest.java` (factory pattern for chaos game descriptions) + - `ChaosGameFileHandlerTest.java` (file handler for chaos games) + - `ExploreGameControllerTest.java` (controller for explore game) + - `HomeControllerTest.java` (controller for home page) + - `PageControllerTest.java` (controller for pages) + - `model` (package for running the program) + - `chaos` (package for fractal game related entity classes) + - `ChaosCanvasTest.java` (class for chaos canvas) + - `ChaosGameTest.java` (class for chaos game) + - `ChaosGameDescriptionTest.java` (class for chaos game description) + - `ChaosGameTypeTest.java` (enum for chaos game type) + - `ExploreGameTest.java` (class for explore game) + - `linalg` (package for linear algebra related classes) + - `ComplexTest.java` (class for complex numbers) + - `Matrix2x2Test.java` (class for 2x2 matrices) + - `Vector2DTest.java` (class for 2D vectors) + - `transformations` (package for transformations related classes) + - `AffineTransform2DTest.java` (class for affine transformations) + - `ExploreJuliaTest.java` (class for explore julia) + - `JuliaTransformTest.java` (class for julia transformations) +## Link to repository +[//]: # (TODO: Include a link to your repository here.) +> https://gitlab.stud.idi.ntnu.no/idatt2003-19/chaosgame + + +## How to run the project + +[//]: # (TODO: Describe how to run your project here. What is the main class? What is the main method? +What is the input and output of the program? What is the expected behaviour of the program?) + +To run the program, run the main method in the MainApp class in the IDE of your choise. + +Or use the following command your terminal: + +``` +mvn javafx:run +``` +The program runs from the Main-class. +<p>Go to ChaosGame -> src -> main -> java -> edu.ntnu.stud -> Main and press run. + +This runs the main method in the MainApp class which then runs the launch method for the application. + +The user is presented with a home page that is split in the middle, one for the chaos game and one for the explore game. +when the user hovers over the chaos game, a video of the chaos game is displayed. +When the user hovers over the explore game, a video of the explore game is displayed. +The user can click on the chaos game to play the chaos game, or click on the explore game to play the explore game. + +In the chaos game the user can choose between displaying julia sets or affine fractals. +The user types in the amount of iterations the game should attempt to place a pixel. +They can also create their own fractals +The user can choose between displaying julia sets or affine fractals with a so-called chaos game. + +In the explore game the user can explore the julia set by sliding the real and imaginary part sliders +changing the parts of the complex number which is used to display the fractal. +The zoom is used by scrolling and works both with and without a mouse. +In addition, there buttons to zoom in and out, +reset the image and a color picker allowing the user to change the color of the fractal + +For each page the user can choose to go back to the home page by clicking the home icon in the top left corner. + +On the home page there is a exit button in the bottom center of the application + +## How to run the tests + +[//]: # (TODO: Describe how to run the tests here.) +Tests can be run by typing the following in the terminal: + +``` +mvn test +``` +or + +``` +mvn clean test +``` + +<br> +With IntelliJ IDEA, the tests can be run by right-clicking the edu.ntnu.stud package, either within the test or main folder, +and selecting "Run 'Tests in edu.ntnu.stud'". If you want to run tests with coverage, +right-click the edu.ntnu.stud package and select "More Run/Debug" and then "Run 'Tests in edu.ntnu.stud' with Coverage". +The same can be done specific classes within the package. +## References + + +## References +[//]: # (TODO: Include references here, if any. For example, if you have used code from the course book, include a reference to the chapter. +Or if you have used code from a website or other source, include a link to the source.) + +- [Chaos Game (wikipedia)](https://en.wikipedia.org/wiki/Chaos_game) +- [Julia Set (wikipedia)](https://en.wikipedia.org/wiki/Julia_set)