/** * Constructor for tables with * * @param steps */ public FullTable(int steps) { super(steps); final double radstep = Math.toRadians(360. / steps); this.costable = new double[steps]; this.sintable = new double[steps]; double ang = 0.; final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine for (int i = 0; i < steps; i++, ang += radstep) { this.sintable[i] = FastMath.sinAndCos(ang, tmp); this.costable[i] = tmp.value; } }
/** * Constructor for tables with * * @param steps */ public FullTable(int steps) { super(steps); final double radstep = Math.toRadians(360. / steps); this.costable = new double[steps]; this.sintable = new double[steps]; double ang = 0.; final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine for (int i = 0; i < steps; i++, ang += radstep) { this.sintable[i] = FastMath.sinAndCos(ang, tmp); this.costable[i] = tmp.value; } }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { (EARTH_RADIUS + h) * clat * clng, (EARTH_RADIUS + h) * clat * slng, (EARTH_RADIUS + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { EARTH_RADIUS * clat * clng, EARTH_RADIUS * clat * slng, EARTH_RADIUS * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { EARTH_RADIUS * clat * clng, EARTH_RADIUS * clat * slng, EARTH_RADIUS * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { (EARTH_RADIUS + h) * clat * clng, (EARTH_RADIUS + h) * clat * slng, (EARTH_RADIUS + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { (EARTH_RADIUS + h) * clat * clng, (EARTH_RADIUS + h) * clat * slng, (EARTH_RADIUS + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { EARTH_RADIUS * clat * clng, EARTH_RADIUS * clat * slng, EARTH_RADIUS * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { EARTH_RADIUS * clat * clng, EARTH_RADIUS * clat * slng, EARTH_RADIUS * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { (EARTH_RADIUS + h) * clat * clng, (EARTH_RADIUS + h) * clat * slng, (EARTH_RADIUS + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { (EARTH_RADIUS + h) * clat * clng, (EARTH_RADIUS + h) * clat * slng, (EARTH_RADIUS + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { (EARTH_RADIUS + h) * clat * clng, (EARTH_RADIUS + h) * clat * slng, (EARTH_RADIUS + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { EARTH_RADIUS * clat * clng, EARTH_RADIUS * clat * slng, EARTH_RADIUS * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Then to sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; return new double[] { EARTH_RADIUS * clat * clng, EARTH_RADIUS * clat * slng, EARTH_RADIUS * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; final double v = a / FastMath.sqrt(1 - esq * slat * slat); return new double[] { (v + h) * clat * clng, (v + h) * clat * slng, ((1 - esq) * v + h) * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; final double v = a / FastMath.sqrt(1 - esq * slat * slat); return new double[] { v * clat * clng, v * clat * slng, (1 - esq) * v * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng) { // Sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; final double v = a / FastMath.sqrt(1 - esq * slat * slat); return new double[] { v * clat * clng, v * clat * slng, (1 - esq) * v * slat }; }
@Override public double[] latLngRadToECEF(double lat, double lng, double h) { // Sine and cosines: final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slat = FastMath.sinAndCos(lat, tmp), clat = tmp.value; final double slng = FastMath.sinAndCos(lng, tmp), clng = tmp.value; final double v = a / FastMath.sqrt(1 - esq * slat * slat); return new double[] { (v + h) * clat * clng, (v + h) * clat * slng, ((1 - esq) * v + h) * slat }; }
/** * Compute the bearing from start to end. * * @param latS Start latitude, in radians * @param lngS Start longitude, in radians * @param latE End latitude, in radians * @param lngE End longitude, in radians * @return Bearing in degree */ public static double bearingRad(double latS, double lngS, double latE, double lngE) { final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slatS = sinAndCos(latS, tmp), clatS = tmp.value; final double slatE = sinAndCos(latE, tmp), clatE = tmp.value; return atan2(-sin(lngS - lngE) * clatE, clatS * slatE - slatS * clatE * cos(lngS - lngE)); } }
/** * Compute the bearing from start to end. * * @param latS Start latitude, in radians * @param lngS Start longitude, in radians * @param latE End latitude, in radians * @param lngE End longitude, in radians * @return Bearing in degree */ public static double bearingRad(double latS, double lngS, double latE, double lngE) { final DoubleWrapper tmp = new DoubleWrapper(); // To return cosine final double slatS = sinAndCos(latS, tmp), clatS = tmp.value; final double slatE = sinAndCos(latE, tmp), clatE = tmp.value; return atan2(-sin(lngS - lngE) * clatE, clatS * slatE - slatS * clatE * cos(lngS - lngE)); } }