1
0
Fork 0
pythagoreantree/src/Fractals/PythagorasTree/PythagorasTriangle.java

122 lines
3.4 KiB
Java

package Fractals.PythagorasTree;
import Fractals.NumberCalculation.Fibonacci;
/**
* Class Fractals.PythagorasTree.PythagorasTriangle
*
* @author Jan Christian Grünhage
*/
public class PythagorasTriangle {
private double leftSizeFactor;
private double leftAngle;
private double rightSizeFactor;
private double rightAngle;
boolean irregularRandom;
public PythagorasTriangle(PythagorasTree.PythagorasTreeVariant variant, int momentaryDepth, Fibonacci fibonacci, Double angle) {
irregularRandom = false;
switch (variant) {
case SymetricPythagorasTree:
leftAngle = 45;
break;
case AsymetricPythagorasTree:
if (angle < 0 || angle > 90) return;
leftAngle = angle;
break;
case RegularRandomPythagorasTree:
leftAngle = Math.random() * 50 + 20;
break;
case RandomPythagorasTree:
leftAngle = 0;
irregularRandom = true;
//Calculation in here doesn't matter, will get overridden later.
break;
case PisanoPythagorasTreeOne:
leftAngle = (fibonacci.calcFibonacci(momentaryDepth) % 4) * 10 + 30;
break;
case PisanoPythagorasTreeTwo:
leftAngle = (fibonacci.calcFibonacci(momentaryDepth) % 2) * 30 + 30;
break;
case PisanoPythagorasTreeThree:
leftAngle = (fibonacci.calcFibonacci(momentaryDepth) % 7) * 5 + 30;
break;
case PisanoPythagorasTreeFour:
leftAngle = (fibonacci.calcFibonacci(momentaryDepth) % 31) + 30;
break;
case PisanoPythagorasTreeFive:
leftAngle = (fibonacci.calcFibonacci(momentaryDepth) % 9) * 4 + 29;
break;
case KilianEhrmannPythagorasTree:
leftAngle = kilianEhrmannAngle(momentaryDepth);
break;
default:
leftAngle = 45;
break;
}
rightAngle = (double) 90 - leftAngle;
leftSizeFactor = Math.sin(Math.toRadians(leftAngle));
rightSizeFactor = Math.sin(Math.toRadians(rightAngle));
}
private double kilianEhrmannAngle(int index) {
if (index == 0 || index == 1) index = 2;
double result_1;
double result_2;
result_1 = 100000000 * Math.pow(index, (1 / 13));
result_2 = 70000 % index;
result_2 = Math.cos(Math.tan(result_2));
result_2 = index - Math.pow(result_2, 3);
result_2 *= index + (1 / (Math.pow(index, (1 / 17.3))));
result_2 = Math.pow(result_2, (1 / index));
result_1 /= result_2;
result_1 = result_1 % 30;
result_1 += 30;
System.out.println("Calculationdepth: " + index);
return result_1;
}
public double getLeftSizeFactor() {
return leftSizeFactor;
}
public double getLeftAngle() {
if (irregularRandom) {
leftAngle = Math.random() * 50 + 20;
rightAngle = (double) 90 - leftAngle;
leftSizeFactor = Math.sin(Math.toRadians(leftAngle));
rightSizeFactor = Math.sin(Math.toRadians(rightAngle));
}
return leftAngle;
}
public double getRightSizeFactor() {
return rightSizeFactor;
}
public double getRightAngle() {
return rightAngle;
}
}