diff --git a/.idea/workspace.xml b/.idea/workspace.xml index a5801a7..e9cd0cb 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -46,11 +46,11 @@ - + - - + + @@ -61,8 +61,8 @@ - - + + @@ -80,11 +80,11 @@ - + - - + + @@ -139,9 +139,9 @@ @@ -230,6 +230,9 @@ + + + @@ -512,16 +515,16 @@ 1423576956527 - - + @@ -534,7 +537,7 @@ - + @@ -611,14 +614,6 @@ - - - - - - - - @@ -649,26 +644,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -679,16 +654,44 @@ - - + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + diff --git a/out/production/Fractals/PythagorasTree$PythagorasTreeVariant.class b/out/production/Fractals/PythagorasTree$PythagorasTreeVariant.class index 9e59bd9..576f4e8 100644 Binary files a/out/production/Fractals/PythagorasTree$PythagorasTreeVariant.class and b/out/production/Fractals/PythagorasTree$PythagorasTreeVariant.class differ diff --git a/out/production/Fractals/PythagorasTree.class b/out/production/Fractals/PythagorasTree.class index 20467c3..784452f 100644 Binary files a/out/production/Fractals/PythagorasTree.class and b/out/production/Fractals/PythagorasTree.class differ diff --git a/out/production/Fractals/PythagorasTreeQueue.class b/out/production/Fractals/PythagorasTreeQueue.class index c8fcd6c..6ebc61d 100644 Binary files a/out/production/Fractals/PythagorasTreeQueue.class and b/out/production/Fractals/PythagorasTreeQueue.class differ diff --git a/out/production/Fractals/TurtleState.class b/out/production/Fractals/TurtleState.class new file mode 100644 index 0000000..1dfdda8 Binary files /dev/null and b/out/production/Fractals/TurtleState.class differ diff --git a/src/PythagorasTree.java b/src/PythagorasTree.java index c4128f1..24f6df7 100644 --- a/src/PythagorasTree.java +++ b/src/PythagorasTree.java @@ -15,6 +15,7 @@ public class PythagorasTree { private double size; private int momentaryDepth; private int maximalDepth; + private TurtleState turtleState; public PythagorasTree(PythagorasTreeVariant variant, PythagorasTriangleList triangles, Turtle turtle, double size, int momentaryDepth, int maximalDepth) { this.variant = variant; @@ -23,41 +24,29 @@ public class PythagorasTree { this.size = size; this.momentaryDepth = momentaryDepth; this.maximalDepth = maximalDepth; + this.turtleState = new TurtleState(turtle); } - public void addPythagorasTree(PythagorasTreeQueue queue) { - if (momentaryDepth + 1 >= maximalDepth) return; - - turtle.forward(size); - + public void addSubTrees(PythagorasTreeQueue queue) { turtle.pushState(); turtle.right(triangles.getLeftAngle(momentaryDepth)); - PythagorasTree treeOne = queue.remove(); - treeOne.drawPythagorasTree(queue); - - - turtle.popState(); - - - - turtle.setPenColor(drawColor(momentaryDepth, maximalDepth)); - - turtle.left(triangles.getRightAngle(momentaryDepth)); - turtle.forward(size * triangles.getRightSizeFactor(momentaryDepth)); - PythagorasTree treeTwo = queue.remove(); - treeTwo.drawPythagorasTree(queue); - treeOne.addPythagorasTree(queue); - treeTwo.addPythagorasTree(queue); - } - - public void drawPythagorasTree(PythagorasTreeQueue queue) { rightSubTree = new PythagorasTree(variant, triangles, turtle, size * triangles.getRightSizeFactor(momentaryDepth), momentaryDepth + 1, maximalDepth); queue.add(rightSubTree); + + turtle.popState(); + turtle.left(triangles.getRightAngle(momentaryDepth)); + turtle.forward(size * triangles.getRightSizeFactor(momentaryDepth)); leftSubTree = new PythagorasTree(variant, triangles, turtle, size * triangles.getLeftSizeFactor(momentaryDepth), momentaryDepth + 1, maximalDepth); queue.add(leftSubTree); + } + public boolean drawPythagorasTree(PythagorasTreeQueue queue) { + turtle.setPenColor(drawColor(momentaryDepth, maximalDepth)); + turtleState.returnToState(turtle); DrawingTools.drawSquare(turtle, size); - + if (momentaryDepth + 1 >= maximalDepth) return false; + addSubTrees(queue); + return true; } public static Color drawColor(int momentaryDepth, int maximalDepth) { diff --git a/src/PythagorasTreeQueue.java b/src/PythagorasTreeQueue.java index 61cb404..19cde44 100644 --- a/src/PythagorasTreeQueue.java +++ b/src/PythagorasTreeQueue.java @@ -9,8 +9,10 @@ public class PythagorasTreeQueue extends LinkedList { public PythagorasTreeQueue(PythagorasTree.PythagorasTreeVariant variant, PythagorasTriangleList triangles, Turtle turtle, double size, int momentaryDepth, int maximalDepth) { super(); add(new PythagorasTree(variant, triangles, turtle, size, momentaryDepth, maximalDepth)); - PythagorasTree tree = remove(); - tree.drawPythagorasTree(this); - tree.addPythagorasTree(this); + boolean finished = false; + while (!finished) { + PythagorasTree tree = remove(); + finished = tree.drawPythagorasTree(this); + } } } diff --git a/src/TurtleState.java b/src/TurtleState.java index 87579c0..6e69140 100644 --- a/src/TurtleState.java +++ b/src/TurtleState.java @@ -13,4 +13,10 @@ public class TurtleState { y = turtle.getY(); heading = turtle.heading(); } + + public void returnToState(Turtle turtle) { + turtle.setX(x); + turtle.setY(y); + turtle.heading(heading); + } }