1
0
Fork 0

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.
This commit is contained in:
Jan Christian Grünhage 2015-02-11 11:41:10 +01:00
parent d8ed505128
commit 66a52a118e
2 changed files with 23 additions and 22 deletions

View File

@ -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;
}

View File

@ -9,10 +9,10 @@ public class PythagorasTreeQueue extends LinkedList<PythagorasTree> {
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);
}
}
}