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:
parent
d8ed505128
commit
66a52a118e
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue