package nl.tudelft.simulation.language.d2;
import java.awt.geom.Point2D;
/**
* The Angle class presents a number of mathematical utility functions on the angle. For now, the class only implements
* static helper methods. No instances of the class should be made now.
*
* Copyright (c) 2002-2018 Delft University of Technology, Jaffalaan 5, 2628 BX Delft, the Netherlands. All rights
* reserved.
*
* See for project information www.simulation.tudelft.nl.
*
* The DSOL project is distributed under the following BSD-style license:
* Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
* following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice, this list of conditions and the following
* disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
* following disclaimer in the documentation and/or other materials provided with the distribution.
* - Neither the name of Delft University of Technology, nor the names of its contributors may be used to endorse or
* promote products derived from this software without specific prior written permission.
*
* This software is provided by the copyright holders and contributors "as is" and any express or implied warranties,
* including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are
* disclaimed. In no event shall the copyright holder or contributors be liable for any direct, indirect, incidental,
* special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or
* services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability,
* whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use
* of this software, even if advised of the possibility of such damage.
* @version Oct 17, 2009
* @author Alexander Verbraeck
*/
public final class Angle
{
/**
* constructs a new Angle.
*/
private Angle()
{
super();
// unreachable code
}
/**
* Normalize an angle between 0 and 2*pi.
* @param angle the angle to normalize
* @return normalized angle
*/
public static double normalize2Pi(final double angle)
{
double result = angle + 2.0d * Math.PI;
double times = Math.floor(result / (2.0d * Math.PI));
result -= times * 2.0d * Math.PI;
return result;
}
/**
* Normalize an angle between -pi and +pi.
* @param angle the angle to normalize
* @return normalized angle
*/
public static double normalizePi(final double angle)
{
double result = angle + 2.0d * Math.PI;
double times = Math.floor((result + Math.PI) / (2.0d * Math.PI));
result -= times * 2.0d * Math.PI;
return result;
}
/**
* Return the 2-pi normalized angle when making an arc from p0 to p1.
* @param p0 first point
* @param p1 second point
* @return the normalized angle
*/
public static double angle(final Point2D p0, final Point2D p1)
{
return normalize2Pi(Math.atan2(p1.getY() - p0.getY(), p1.getX() - p0.getX()));
}
}