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