/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.cepmuvakkit.times.posAlgo; public class Equatorial { public double α; //right ascension (α) -also RA-, or hour angle (H) -also HA- public double δ; //declination (δ) public double Δ; //distance to the earth(Δ) in km Equatorial() { } Equatorial(double sunRightAscension, double sunDeclination) { this.α = sunRightAscension; this.δ = sunDeclination; } Equatorial(double sunRightAscension, double sunDeclination, double radius) { this.α = sunRightAscension; this.δ = sunDeclination; this.Δ = radius; } public Horizontal Equ2Topocentric(double longitude, double latitude, double Height, double jd, double ΔT) { double ϕ = Math.toRadians(latitude); double ρsinϕPr = ρsinϕPrime(ϕ, Height); double ρCosϕPr = ρCosϕPrime(ϕ, Height); //Calculate the Sidereal time //double ΔT = AstroLib.calculateTimeDifference(jd); double theta = SolarPosition.calculateGreenwichSiderealTime(jd, ΔT); //Convert to radians double δrad = Math.toRadians(δ); double cosδ = Math.cos(δrad); // 4.26345151167726E-5 //Calculate the Parallax double π = getHorizontalParallax(Δ); double sinπ = Math.sin(π); //Calculate the hour angle double H = Math.toRadians(AstroLib.limitDegrees(theta + longitude - α)); double cosH = Math.cos(H); double sinH = Math.sin(H); //Calculate the adjustment in right ascension double Δα = MATH.atan2(-ρCosϕPr * sinπ * sinH, cosδ - ρCosϕPr * sinπ * cosH); Horizontal horizontal; horizontal = new Horizontal(); // CAA2DCoordinate Topocentric; // double αPrime =Math.toRadians(α)+Δα; double δPrime = MATH.atan2((Math.sin(δrad) - ρsinϕPr * sinπ) * Math.cos(Δα), cosδ - ρCosϕPr * sinπ * cosH); double HPrime = H - Δα; horizontal.Az = Math.toDegrees(MATH.atan2(Math.sin(HPrime), Math.cos(HPrime) * Math.sin(ϕ) - Math.tan(δPrime) * Math.cos(ϕ)) + Math.PI); horizontal.h = Math.toDegrees(MATH.asin(Math.sin(ϕ) * Math.sin(δPrime) + Math.cos(ϕ) * Math.cos(δPrime) * Math.cos(HPrime))); return horizontal; } double ρsinϕPrime(double ϕ, double Height) { double U = MATH.atan(0.99664719 * Math.tan(ϕ)); return 0.99664719 * Math.sin(U) + (Height / 6378149 * Math.sin(ϕ)); } double ρCosϕPrime(double ϕ, double Height) { //Convert from degress to radians double U = MATH.atan(0.99664719 * Math.tan(ϕ)); return Math.cos(U) + (Height / 6378149 * Math.cos(ϕ)); } double getHorizontalParallax(double RadiusVector) { return MATH.asin(6378.14 / RadiusVector); } }