pythagoreantree/src/PythagorasTree.java
Jan Christian Grünhage f73687b6d6 Changes to PythagorasTree implementation, still not working
Changes to the implementation, is still not workin
2015-02-10 18:13:13 +01:00

72 lines
2.7 KiB
Java

import ch.aplu.turtle.Turtle;
import java.awt.*;
import java.util.LinkedList;
/**
* Created by Christian on 10.02.2015.
*/
public class PythagorasTree {
private PythagorasTree rightSubTree;
private PythagorasTree leftSubTree;
private PythagorasTreeVariant variant;
private PythagorasTriangleList triangles;
private Turtle turtle;
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;
this.triangles = triangles;
this.turtle = turtle;
this.size = size;
this.momentaryDepth = momentaryDepth;
this.maximalDepth = maximalDepth;
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);
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) {
double colorFactor = 255 / maximalDepth;
int red = (int) (colorFactor * (maximalDepth - momentaryDepth));
if (red > 139) red = 139;
if (red < 0) red = 0;
int green = 255 - (int) (colorFactor * (maximalDepth - momentaryDepth));
if (green < 69) green = 69;
int blue = (int) (colorFactor * ((maximalDepth - momentaryDepth) / 5));
if (blue > 19) blue = 19;
return new Color(red, green, blue);
}
public enum PythagorasTreeVariant {
SymetricPythagorasTree, AsymetricPythagorasTree, RegularRandomPythagorasTree,
PisanoPythagorasTreeOne, PisanoPythagorasTreeTwo, PisanoPythagorasTreeThree, PisanoPythagorasTreeFour, PisanoPythagorasTreeFive,
unselected,
}
}