From 66a52a118e57f5a3f391e6576579ae386f96953b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Christian=20Gr=C3=BCnhage?= Date: Wed, 11 Feb 2015 11:41:10 +0100 Subject: [PATCH] complete recreation of the method drawing the pythagoras Tree. Still has some bugs, and it won't work recursively for large trees, so it is in a while loop. --- src/PythagorasTree.java | 37 ++++++++++++++++++------------------ src/PythagorasTreeQueue.java | 8 ++++---- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/PythagorasTree.java b/src/PythagorasTree.java index 7e7bc67..affcba7 100644 --- a/src/PythagorasTree.java +++ b/src/PythagorasTree.java @@ -27,26 +27,27 @@ public class PythagorasTree { this.turtleState = new TurtleState(turtle); } - public void addSubTrees(PythagorasTreeQueue queue) { - turtle.pushState(); - turtle.right(triangles.getLeftAngle(momentaryDepth)); - rightSubTree = new PythagorasTree(variant, triangles, turtle, size * triangles.getRightSizeFactor(momentaryDepth), momentaryDepth + 1, maximalDepth); - queue.add(rightSubTree); + public static boolean drawNextTree(PythagorasTreeQueue queue) { + PythagorasTree tree = queue.remove(); - 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); - } + tree.turtle.setPenColor(drawColor(tree.momentaryDepth, tree.maximalDepth)); + tree.turtleState.returnToState(tree.turtle); + DrawingTools.drawSquare(tree.turtle, tree.size); - public boolean drawPythagorasTree(PythagorasTreeQueue queue) { - turtle.setPenColor(drawColor(momentaryDepth, maximalDepth)); - turtleState.returnToState(turtle); - DrawingTools.drawSquare(turtle, size); - turtle.forward(size); - if (momentaryDepth + 1 >= maximalDepth) return false; - addSubTrees(queue); + if (tree.momentaryDepth + 1 >= tree.maximalDepth) return false; + + tree.turtle.forward(tree.size); + + tree.turtle.pushState(); + tree.turtle.right(tree.triangles.getLeftAngle(tree.momentaryDepth)); + tree.rightSubTree = new PythagorasTree(tree.variant, tree.triangles, tree.turtle, tree.size * tree.triangles.getRightSizeFactor(tree.momentaryDepth), tree.momentaryDepth + 1, tree.maximalDepth); + queue.add(tree.rightSubTree); + + tree.turtle.popState(); + tree.turtle.left(tree.triangles.getRightAngle(tree.momentaryDepth)); + tree.turtle.forward(tree.size * tree.triangles.getRightSizeFactor(tree.momentaryDepth)); + tree.leftSubTree = new PythagorasTree(tree.variant, tree.triangles, tree.turtle, tree.size * tree.triangles.getLeftSizeFactor(tree.momentaryDepth), tree.momentaryDepth + 1, tree.maximalDepth); + queue.add(tree.leftSubTree); return true; } diff --git a/src/PythagorasTreeQueue.java b/src/PythagorasTreeQueue.java index 19cde44..256bde9 100644 --- a/src/PythagorasTreeQueue.java +++ b/src/PythagorasTreeQueue.java @@ -9,10 +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)); - boolean finished = false; - while (!finished) { - PythagorasTree tree = remove(); - finished = tree.drawPythagorasTree(this); + boolean running = true; + while (running) { + running = PythagorasTree.drawNextTree(this); } + } }