2018-02-04 12:18:34 -05:00
|
|
|
import java.awt.Point;
|
|
|
|
import java.util.Random;
|
|
|
|
import Jama.Matrix;
|
|
|
|
|
|
|
|
public class Randomizer {
|
|
|
|
|
|
|
|
Random random;
|
|
|
|
|
|
|
|
public Randomizer() {
|
|
|
|
random = new Random();
|
|
|
|
}
|
|
|
|
|
2018-02-04 15:34:27 -05:00
|
|
|
public int nextGaussianWithinRange(double rangeBegin, double rangeEnd) {
|
|
|
|
double rangeMean = (rangeEnd - rangeBegin) / 2.0;
|
|
|
|
double rangeSTD = (rangeEnd - rangeMean) / 3.0;
|
|
|
|
double result = random.nextGaussian() * rangeSTD + rangeMean;
|
|
|
|
while (result > rangeEnd || result < rangeBegin) {
|
|
|
|
result = random.nextGaussian() * rangeSTD + rangeMean;
|
2018-02-04 12:18:34 -05:00
|
|
|
}
|
2018-02-04 15:34:27 -05:00
|
|
|
return (int) result;
|
2018-02-04 12:18:34 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
public Point generatePeakForTransformationParabola(int pathDistance) {
|
|
|
|
double maxTransformationScale = 0.2;
|
2018-02-04 15:34:27 -05:00
|
|
|
int peakX = nextGaussianWithinRange(0, pathDistance);
|
|
|
|
int peakY = nextGaussianWithinRange(0, pathDistance * maxTransformationScale);
|
2018-02-04 12:18:34 -05:00
|
|
|
return new Point(peakX, peakY);
|
|
|
|
}
|
|
|
|
|
|
|
|
public double[] generateParabolaEquation(int pathDistance, Point peakPoint) {
|
|
|
|
double[][] lhsMatrix = {{0, 0, 1}, {peakPoint.x * peakPoint.x, peakPoint.x, 1}, {pathDistance * pathDistance, pathDistance, 1}};
|
|
|
|
double[][] rhsMatrix = {{0, peakPoint.y, 0}};
|
|
|
|
|
|
|
|
Matrix lhs = new Matrix(lhsMatrix);
|
|
|
|
Matrix rhs = new Matrix(rhsMatrix);
|
|
|
|
Matrix ans = lhs.solve(rhs);
|
|
|
|
|
|
|
|
double[] result = {ans.get(0, 0), ans.get(1, 0), ans.get(2, 0)};
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
|
|
|
//public Point transformPoint
|
|
|
|
}
|