Java cos to sin cosToSin(double angle, double cos)

Here you can find the source of cosToSin(double angle, double cos)

Description

Fast way of computing sin(x) from x and cos(x).

License

Open Source License

Parameter

Parameter Description
angle Input angle x
cos Cosine of x.

Return

Sine of x

Declaration

public static double cosToSin(double angle, double cos) 

Method Source Code

//package com.java2s;
/*/*from   w w  w .  j  a va 2 s  . co  m*/
 This file is part of ELKI:
 Environment for Developing KDD-Applications Supported by Index-Structures
    
 Copyright (C) 2015
 Ludwig-Maximilians-Universit?t M?nchen
 Lehr- und Forschungseinheit f?r Datenbanksysteme
 ELKI Development Team
    
 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU Affero General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.
    
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU Affero General Public License for more details.
    
 You should have received a copy of the GNU Affero General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

public class Main {
    /**
     * Two times Pi.
     */
    public static final double TWOPI = 2. * Math.PI;

    /**
     * <b>Fast</b> way of computing sin(x) from x and cos(x).
     *
     * @param angle Input angle x
     * @param cos Cosine of x.
     * @return Sine of x
     */
    public static double cosToSin(double angle, double cos) {
        // Numerics of the formula below aren't too good.
        if ((-1e-5 < cos && cos < 1e-5) || cos > 0.99999 || cos < -0.99999) {
            return Math.sin(angle);
        }
        angle = normAngle(angle);
        final double s = Math.sqrt(1 - cos * cos);
        return (angle < Math.PI) ? s : -s;
    }

    /**
     * Normalize an angle to [0:2pi[
     *
     * @param x Input angle
     * @return Normalized angle
     */
    public static double normAngle(double x) {
        x %= TWOPI;
        return (x > 0) ? x : x + TWOPI;
    }
}