All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.mathiewz.slick.util.FastTrig Maven / Gradle / Ivy

Go to download

The main purpose of this libraryis to modernize and maintain the slick2D library.

The newest version!
package com.github.mathiewz.slick.util;

/**
 * Utility to handle Java's odd trig performance issues
 *
 * @author JeffK
 */
public class FastTrig {
    /**
     * Fast Trig functions for x86.
     * This forces the trig functiosn to stay within the safe area on the x86 processor (-45 degrees to +45 degrees)
     * The results may be very slightly off from what the Math and StrictMath trig functions give due to
     * rounding in the angle reduction but it will be very very close.
     *
     * @param radians
     *            The original angle
     * @return The reduced Sin angle
     */
    private static double reduceSinAngle(double radians) {
        radians %= Math.PI * 2.0; // put us in -2PI to +2PI space
        if (Math.abs(radians) > Math.PI) { // put us in -PI to +PI space
            radians = radians - Math.PI * 2.0;
        }
        if (Math.abs(radians) > Math.PI / 2) {// put us in -PI/2 to +PI/2 space
            radians = Math.PI - radians;
        }

        return radians;
    }

    /**
     * Get the sine of an angle
     *
     * @param radians
     *            The angle
     * @return The sine of the angle
     */
    public static double sin(double radians) {
        radians = reduceSinAngle(radians); // limits angle to between -PI/2 and +PI/2
        if (Math.abs(radians) <= Math.PI / 4) {
            return Math.sin(radians);
        } else {
            return Math.cos(Math.PI / 2 - radians);
        }
    }

    /**
     * Get the cosine of an angle
     *
     * @param radians
     *            The angle
     * @return The cosine of the angle
     */
    public static double cos(double radians) {
        return sin(radians + Math.PI / 2);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy