package hirondelle.starfield.physics;
final class Boost {
BoostedStar applyBoostTo(Star aStar, double aBeta){
BoostedStar result = new BoostedStar();
double theta = Math.PI/2 - aStar.Declination; double thetaPrime= aberrationDecr(theta, aBeta);
double dopplerFactor = doppler(aBeta, thetaPrime);
result.Magnitude = aStar.Magnitude + deltaMagnitude(dopplerFactor, aStar.Temperature);
result.ThetaPrime = thetaPrime;
result.Temperature = dopplerFactor * aStar.Temperature;
return result;
}
private double aberrationDecr(double aTheta, double aBeta){
double costhetaprime = (Math.cos(aTheta) + aBeta)/(1.0D+aBeta*Math.cos(aTheta));
return Math.acos(costhetaprime);
}
private double gamma(double aBeta){
double radical = 1 - aBeta*aBeta;
return 1.0D/Math.sqrt(radical);
}
private double doppler(double aBeta, double aTheta){
double gammaVal=gamma(aBeta);
double denom=gammaVal*(1-aBeta*Math.cos(aTheta));
return 1.0D/denom;
}
private double deltaMagnitude(double aDoppler, double aTemperature){
return 2.5*Math.log10(aDoppler) - 26000*(1/aTemperature - 1/(aDoppler*aTemperature));
}
}