Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
at develop 44 lines 1.8 kB view raw
1package org.bukkit.craftbukkit; 2 3/** 4 * Credits for this class goes to user aioobe on stackoverflow.com 5 * Source: http://stackoverflow.com/questions/4454630/j2me-calculate-the-the-distance-between-2-latitude-and-longitude 6 */ 7public class TrigMath { 8 9 static final double sq2p1 = 2.414213562373095048802e0; 10 static final double sq2m1 = .414213562373095048802e0; 11 static final double p4 = .161536412982230228262e2; 12 static final double p3 = .26842548195503973794141e3; 13 static final double p2 = .11530293515404850115428136e4; 14 static final double p1 = .178040631643319697105464587e4; 15 static final double p0 = .89678597403663861959987488e3; 16 static final double q4 = .5895697050844462222791e2; 17 static final double q3 = .536265374031215315104235e3; 18 static final double q2 = .16667838148816337184521798e4; 19 static final double q1 = .207933497444540981287275926e4; 20 static final double q0 = .89678597403663861962481162e3; 21 static final double PIO2 = 1.5707963267948966135E0; 22 23 private static double mxatan(double arg) { 24 double argsq = arg * arg, value; 25 26 value = ((((p4 * argsq + p3) * argsq + p2) * argsq + p1) * argsq + p0); 27 value = value / (((((argsq + q4) * argsq + q3) * argsq + q2) * argsq + q1) * argsq + q0); 28 return value * arg; 29 } 30 31 private static double msatan(double arg) { 32 return arg < sq2m1 ? mxatan(arg) : arg > sq2p1 ? PIO2 - mxatan(1 / arg) : PIO2 / 2 + mxatan((arg - 1) / (arg + 1)); 33 } 34 35 public static double atan(double arg) { 36 return arg > 0 ? msatan(arg) : -msatan(-arg); 37 } 38 39 public static double atan2(double arg1, double arg2) { 40 if (arg1 + arg2 == arg1) return arg1 >= 0 ? PIO2 : -PIO2; 41 arg1 = atan(arg1 / arg2); 42 return arg2 < 0 ? arg1 <= 0 ? arg1 + Math.PI : arg1 - Math.PI : arg1; 43 } 44}