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: *

* 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())); } }