diff --git a/src/Fractals/Main.java b/src/Fractals/Main.java index 68a011a..57405b3 100644 --- a/src/Fractals/Main.java +++ b/src/Fractals/Main.java @@ -117,6 +117,8 @@ public class Main { variant = PythagorasTree.PythagorasTreeVariant.AsymetricPythagorasTree; } else if (input.equalsIgnoreCase("RegularRandomPythagorasTree")) { variant = PythagorasTree.PythagorasTreeVariant.RegularRandomPythagorasTree; + } else if (input.equalsIgnoreCase("RandomPythagorasTree")) { + variant = PythagorasTree.PythagorasTreeVariant.RandomPythagorasTree; } else if (input.equalsIgnoreCase("PisanoPythagorasTreeOne")) { variant = PythagorasTree.PythagorasTreeVariant.PisanoPythagorasTreeOne; } else if (input.equalsIgnoreCase("PisanoPythagorasTreeTwo")) { @@ -129,7 +131,7 @@ public class Main { variant = PythagorasTree.PythagorasTreeVariant.PisanoPythagorasTreeFive; } else if (input.equalsIgnoreCase("KilianEhrmannPythagorasTree")) { variant = PythagorasTree.PythagorasTreeVariant.KilianEhrmannPythagorasTree; - } else variant = PythagorasTree.PythagorasTreeVariant.unselected; + } else variant = variantFromArg(input); return variant; } @@ -140,8 +142,10 @@ public class Main { variant = PythagorasTree.PythagorasTreeVariant.SymetricPythagorasTree; } else if (input.equalsIgnoreCase("2")) { variant = PythagorasTree.PythagorasTreeVariant.AsymetricPythagorasTree; - } else if (input.equalsIgnoreCase("3")) { + } else if (input.equalsIgnoreCase("31")) { variant = PythagorasTree.PythagorasTreeVariant.RegularRandomPythagorasTree; + } else if (input.equalsIgnoreCase("32")) { + variant = PythagorasTree.PythagorasTreeVariant.RandomPythagorasTree; } else if (input.equalsIgnoreCase("41")) { variant = PythagorasTree.PythagorasTreeVariant.PisanoPythagorasTreeOne; } else if (input.equalsIgnoreCase("42")) { @@ -206,14 +210,14 @@ public class Main { } public static void variantHelp() { - System.out.println("SymetricPythagorasTree:"); + System.out.println("SymetricPythagorasTree (1):"); System.out.println(""); System.out.println("This creates a normal symetric Pythagoras Tree."); System.out.println(""); System.out.println(""); System.out.println(""); - System.out.println("AsymetricPythagorasTree:"); + System.out.println("AsymetricPythagorasTree (2):"); System.out.println(""); System.out.println("This creates an asymetric Pythagoras Tree."); System.out.println("The used angle will be adjustable later."); @@ -221,7 +225,7 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("RegularRandomPythagorasTree:"); + System.out.println("RegularRandomPythagorasTree (3.1):"); System.out.println(""); System.out.println("This creates an asymetric Pythagoras Tree."); System.out.println("Each level of the tree will have it's own randomly generated angle."); @@ -230,7 +234,16 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("PisanoPythagorasTreeOne:"); + System.out.println("RandomPythagorasTree (3.2):"); + System.out.println(""); + System.out.println("This creates an asymetric Pythagoras Tree."); + System.out.println("Each triangle of the tree will have it's own randomly generated angle."); + System.out.println("The generated angles will be between 20 and 70 degree."); + System.out.println(""); + System.out.println(""); + System.out.println(""); + + System.out.println("PisanoPythagorasTreeOne (4.1):"); System.out.println(""); System.out.println("This creates an asymetric Pythagoras Tree."); System.out.println("The angles used in this tree are generated from the Fractals.NumberCalculation.Fibonacci Numbers."); @@ -242,7 +255,7 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("PisanoPythagorasTreeTwo:"); + System.out.println("PisanoPythagorasTreeTwo: (4.2)"); System.out.println(""); System.out.println("The angles of this variant calculated like this: "); System.out.println("Fractals.NumberCalculation.Fibonacci number of the Level modulo 2 multiplied by 30 plus 30"); @@ -250,7 +263,7 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("PisanoPythagorasTreeThree:"); + System.out.println("PisanoPythagorasTreeThree: (4.3)"); System.out.println(""); System.out.println("The angles of this variant calculated like this: "); System.out.println("Fractals.NumberCalculation.Fibonacci number of the Level modulo 7 multiplied by 5 plus 30"); @@ -258,7 +271,7 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("PisanoPythagorasTreeFour:"); + System.out.println("PisanoPythagorasTreeFour: (4.4)"); System.out.println(""); System.out.println("The angles of this variant calculated like this: "); System.out.println("Fractals.NumberCalculation.Fibonacci number of the Level modulo 31 plus 30"); @@ -266,7 +279,7 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("PisanoPythagorasTreeFive:"); + System.out.println("PisanoPythagorasTreeFive: (4.5)"); System.out.println(""); System.out.println("The angles of this variant calculated like this: "); System.out.println("Fractals.NumberCalculation.Fibonacci number of the Level modulo 9 multiplied by 4 plus 29"); @@ -274,7 +287,7 @@ public class Main { System.out.println(""); System.out.println(""); - System.out.println("KilianEhrmannPythagorasTree:"); + System.out.println("KilianEhrmannPythagorasTree: (5)"); System.out.println(""); System.out.println("The angles of this variant calculated like this: "); System.out.println("(Don't ask why, just one of my classmates having fun...) "); diff --git a/src/Fractals/NumberCalculation/Fibonacci.java b/src/Fractals/NumberCalculation/Fibonacci.java index 1858755..0097ea4 100644 --- a/src/Fractals/NumberCalculation/Fibonacci.java +++ b/src/Fractals/NumberCalculation/Fibonacci.java @@ -6,7 +6,7 @@ import java.util.LinkedList; * Created by Christian on 10.02.2015. */ public class Fibonacci { - LinkedList fibonacci = new LinkedList(); + private LinkedList fibonacci = new LinkedList(); public Fibonacci() { fibonacci.add((long) 1); diff --git a/src/Fractals/PythagorasTree/PythagorasTree.java b/src/Fractals/PythagorasTree/PythagorasTree.java index 0defb3a..be31c31 100644 --- a/src/Fractals/PythagorasTree/PythagorasTree.java +++ b/src/Fractals/PythagorasTree/PythagorasTree.java @@ -5,6 +5,7 @@ import ch.aplu.turtle.Turtle; import Fractals.TurtleTools.TurtleState; import java.awt.*; + import static Fractals.TurtleTools.DrawingTools.drawSquare; /** @@ -19,6 +20,7 @@ public class PythagorasTree { private double size; private int momentaryDepth; private int maximalDepth; + private int minimalSize = 1; private TurtleState turtleState; public PythagorasTree(PythagorasTreeVariant variant, PythagorasTriangleList triangles, Turtle turtle, double size, int momentaryDepth, int maximalDepth) { @@ -35,15 +37,18 @@ public class PythagorasTree { if (queue.size() == 0) return false; PythagorasTree tree = queue.remove(); - if (tree.momentaryDepth > tree.maximalDepth) return true; - + if (tree.momentaryDepth > tree.maximalDepth && tree.size <= tree.minimalSize) { + return true; + } tree.turtle.getFrame().setTitle("Pythagoras Tree - Depth: " + tree.momentaryDepth + " - Target Depth: " + tree.maximalDepth + " - Queuesize: " + queue.size()); tree.turtle.setPenColor(drawColor(tree.momentaryDepth, tree.maximalDepth)); tree.turtleState.returnToState(tree.turtle); drawSquare(tree.turtle, tree.size); - if (tree.momentaryDepth >= tree.maximalDepth) return true; + if (tree.momentaryDepth >= tree.maximalDepth && tree.size < tree.minimalSize) { + return true; + } tree.turtle.forward(tree.size); @@ -65,6 +70,7 @@ public class PythagorasTree { return true; } + public static Color drawColor(int momentaryDepth, int maximalDepth) { double colorFactor = 255 / maximalDepth; @@ -73,14 +79,16 @@ public class PythagorasTree { if (red > 139) red = 139; if (red < 0) red = 0; int green = 255 - (int) (colorFactor * (maximalDepth - momentaryDepth)); + if (green > 255) green = 255; if (green < 69) green = 69; int blue = (int) (colorFactor * ((maximalDepth - momentaryDepth) / 5)); if (blue > 19) blue = 19; + if (blue < 0) blue = 0; return new Color(red, green, blue); } public enum PythagorasTreeVariant { - SymetricPythagorasTree, AsymetricPythagorasTree, RegularRandomPythagorasTree, + SymetricPythagorasTree, AsymetricPythagorasTree, RegularRandomPythagorasTree, RandomPythagorasTree, PisanoPythagorasTreeOne, PisanoPythagorasTreeTwo, PisanoPythagorasTreeThree, PisanoPythagorasTreeFour, PisanoPythagorasTreeFive, KilianEhrmannPythagorasTree, unselected, diff --git a/src/Fractals/PythagorasTree/PythagorasTriangle.java b/src/Fractals/PythagorasTree/PythagorasTriangle.java index e546ee0..f3ee846 100644 --- a/src/Fractals/PythagorasTree/PythagorasTriangle.java +++ b/src/Fractals/PythagorasTree/PythagorasTriangle.java @@ -12,9 +12,12 @@ public class PythagorasTriangle { private double leftAngle; private double rightSizeFactor; private double rightAngle; + boolean irregularRandom; public PythagorasTriangle(PythagorasTree.PythagorasTreeVariant variant, int momentaryDepth, Fibonacci fibonacci, Double angle) { + irregularRandom = false; + switch (variant) { @@ -34,6 +37,13 @@ public class PythagorasTriangle { break; + case RandomPythagorasTree: + leftAngle = 0; + irregularRandom = true; + //Calculation in here doesn't matter, will get overridden later. + break; + + case PisanoPythagorasTreeOne: leftAngle = (fibonacci.calcFibonacci(momentaryDepth) % 4) * 10 + 30; break; @@ -92,6 +102,12 @@ public class PythagorasTriangle { } public double getLeftAngle() { + if (irregularRandom) { + leftAngle = Math.random() * 50 + 20; + rightAngle = (double) 90 - leftAngle; + leftSizeFactor = Math.sin(Math.toRadians(leftAngle)); + rightSizeFactor = Math.sin(Math.toRadians(rightAngle)); + } return leftAngle; } diff --git a/src/Fractals/PythagorasTree/PythagorasTriangleList.java b/src/Fractals/PythagorasTree/PythagorasTriangleList.java index 65df442..0a7e0ad 100644 --- a/src/Fractals/PythagorasTree/PythagorasTriangleList.java +++ b/src/Fractals/PythagorasTree/PythagorasTriangleList.java @@ -10,14 +10,21 @@ import Fractals.NumberCalculation.Fibonacci; public class PythagorasTriangleList { private LinkedList triangles = new LinkedList(); private Fibonacci fibonacci = new Fibonacci(); + private PythagorasTree.PythagorasTreeVariant variant; + private double angle; - public PythagorasTriangleList(PythagorasTree.PythagorasTreeVariant variant, double maximalDepth, double angle) { + public PythagorasTriangleList(PythagorasTree.PythagorasTreeVariant variant, int maximalDepth, double angle) { + this.variant = variant; + this.angle = angle; for (int i = 0; i < maximalDepth; i++) { triangles.add(new PythagorasTriangle(variant, i, fibonacci, angle)); } } public double getLeftAngle(int index) { + if (index >= triangles.size()) { + triangles.add(new PythagorasTriangle(variant, index, fibonacci, angle)); + } return triangles.get(index).getLeftAngle(); }