summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictorD <victor.danell@gmail.com>2011-02-20 23:16:05 +0100
committerVictorD <victor.danell@gmail.com>2011-02-20 23:16:05 +0100
commitcec04a7360ef0baf7dfdc3cc2af2be02c54403c9 (patch)
treed89b1839787df3691ed2a1df0538869725094eb7
parent4f249b585cc01777619884598c35c55c8861b369 (diff)
downloadcraftbukkit-cec04a7360ef0baf7dfdc3cc2af2be02c54403c9.tar
craftbukkit-cec04a7360ef0baf7dfdc3cc2af2be02c54403c9.tar.gz
craftbukkit-cec04a7360ef0baf7dfdc3cc2af2be02c54403c9.tar.lz
craftbukkit-cec04a7360ef0baf7dfdc3cc2af2be02c54403c9.tar.xz
craftbukkit-cec04a7360ef0baf7dfdc3cc2af2be02c54403c9.zip
Added null pointer check and switched to a faster arctan method
-rw-r--r--src/main/java/org/bukkit/craftbukkit/TrigMath.java45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main/java/org/bukkit/craftbukkit/TrigMath.java b/src/main/java/org/bukkit/craftbukkit/TrigMath.java
new file mode 100644
index 00000000..0d207b37
--- /dev/null
+++ b/src/main/java/org/bukkit/craftbukkit/TrigMath.java
@@ -0,0 +1,45 @@
+package org.bukkit.craftbukkit;
+/**
+ * Got this code from a post by user aioobe on stackoverflow.com
+ *
+ */
+public class TrigMath {
+
+ static final double sq2p1 = 2.414213562373095048802e0;
+ static final double sq2m1 = .414213562373095048802e0;
+ static final double p4 = .161536412982230228262e2;
+ static final double p3 = .26842548195503973794141e3;
+ static final double p2 = .11530293515404850115428136e4;
+ static final double p1 = .178040631643319697105464587e4;
+ static final double p0 = .89678597403663861959987488e3;
+ static final double q4 = .5895697050844462222791e2;
+ static final double q3 = .536265374031215315104235e3;
+ static final double q2 = .16667838148816337184521798e4;
+ static final double q1 = .207933497444540981287275926e4;
+ static final double q0 = .89678597403663861962481162e3;
+ static final double PIO2 = 1.5707963267948966135E0;
+
+ private static double mxatan(double arg) {
+ double argsq = arg * arg, value;
+ value = ((((p4 * argsq + p3) * argsq + p2) * argsq + p1) * argsq + p0);
+ value = value / (((((argsq+q4)*argsq+q3)*argsq+q2)*argsq+q1)*argsq+q0);
+ return value * arg;
+ }
+
+ private static double msatan(double arg) {
+ return arg < sq2m1 ? mxatan(arg)
+ : arg > sq2p1 ? PIO2 - mxatan(1 / arg)
+ : PIO2 / 2 + mxatan((arg - 1) / (arg + 1));
+ }
+
+ public static double atan(double arg) {
+ return arg > 0 ? msatan(arg) : -msatan(-arg);
+ }
+
+ public static double atan2(double arg1, double arg2) {
+ if (arg1 + arg2 == arg1)
+ return arg1 >= 0 ? PIO2 : -PIO2;
+ arg1 = atan(arg1 / arg2);
+ return arg2 < 0 ? arg1 <= 0 ? arg1 + Math.PI : arg1 - Math.PI : arg1;
+ }
+} \ No newline at end of file