pythagoreantree/src/PythagorasTree.java
Jan Christian Grünhage dfd1841e2f PythagorasTree impementation, not working
New pythagoras Tree implementation, not fully working yet
2015-02-10 17:51:44 +01:00

83 lines
2.8 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;
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;
}
public void addPythagorasTree(PythagorasTreeQueue queue) {
if (momentaryDepth + 1 >= maximalDepth) return;
turtle.forward(size);
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);
leftSubTree = new PythagorasTree(variant, triangles, turtle, size * triangles.getLeftSizeFactor(momentaryDepth), momentaryDepth + 1, maximalDepth);
queue.add(leftSubTree);
DrawingTools.drawSquare(turtle, size);
}
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,
}
}