package org.djunits.demo.examples; import org.djunits.unit.AngleUnit; import org.djunits.value.ValueRuntimeException; import org.djunits.value.util.AngleUtil; import org.djunits.value.vdouble.scalar.Angle; /** * Normalization of angles. *
* Copyright (c) 2013-2022 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
* BSD-style license. See DJUNITS License.
*
* @version $Revision$, $LastChangedDate$, by $Author$, initial version Oct 28, 2015
* @author Alexander Verbraeck
* @author Peter Knoppers
*/
public final class Angles
{
/** */
private Angles()
{
// utility class
}
/**
* Create some Angle values to demonstrate conversion from and to related units, including the non-linear AngleUnit.PERCENT.
* @param args String[]; the command line arguments; not used
* @throws ValueRuntimeException in case of error
*/
public static void main(final String[] args) throws ValueRuntimeException
{
System.out.println("Normalization of an angle adds or subtracts a multiple of 2\u03c0. For linear angle units "
+ "the result is a value between 0 and +2\u03c0.");
System.out.println("Angles not between -90\u00b0 and +90\u00b0, -\u03c0/2 and +\u03c0/2 cannot properly be "
+ "expressed as percentage.");
Angle a1 = new Angle(3 * Math.PI, AngleUnit.RADIAN);
Angle normA1 = AngleUtil.normalize(a1);
System.out.println("3 * \u03c0: " + a1 + " (" + a1.toString(AngleUnit.DEGREE) + ", " + a1.toString(AngleUnit.PERCENT)
+ ") -> " + normA1 + " (" + normA1.toString(AngleUnit.DEGREE) + ", " + normA1.toString(AngleUnit.PERCENT)
+ ") Note: percentage almost 0");
Angle a2 = new Angle(-Math.PI, AngleUnit.RADIAN);
Angle normA2 = AngleUtil.normalize(a2);
System.out.println(" -\u03c0: " + a2 + " (" + a2.toString(AngleUnit.DEGREE) + ", " + a2.toString(AngleUnit.PERCENT)
+ ") -> " + normA2 + " (" + normA2.toString(AngleUnit.DEGREE) + ", " + normA2.toString(AngleUnit.PERCENT)
+ ") Note: percentage almost 0");
Angle a3 = new Angle(-45, AngleUnit.DEGREE);
Angle normA3 = AngleUtil.normalize(a3);
System.out.println(
" -45\u0090: " + a3 + " (" + a3.toString(AngleUnit.RADIAN) + ", " + a3.toString(AngleUnit.PERCENT) + ") -> "
+ normA3 + " (" + normA3.toString(AngleUnit.RADIAN) + ", " + normA3.toString(AngleUnit.PERCENT) + ")");
System.out.println("");
System.out.println("Angles expressed as percentage are always between -inf and +inf (-90\u00b0 and +90\u00b0, "
+ "-\u03c0/2 and +\u03c0/2); even after normalization.");
Angle a4 = new Angle(-100, AngleUnit.PERCENT);
Angle normA4 = AngleUtil.normalize(a4);
System.out.println("-100%: " + a4 + " (" + a4.toString(AngleUnit.DEGREE) + ", " + a4.toString(AngleUnit.RADIAN)
+ ") -> " + normA4 + " (" + normA4.toString(AngleUnit.DEGREE) + ", " + normA4.toString(AngleUnit.RADIAN) + ")");
Angle a5 = new Angle(100, AngleUnit.PERCENT);
Angle normA5 = AngleUtil.normalize(a5);
System.out.println(" 100%: " + a5 + " (" + a5.toString(AngleUnit.DEGREE) + ", " + a5.toString(AngleUnit.RADIAN)
+ ") -> " + normA5 + " (" + normA5.toString(AngleUnit.DEGREE) + ", " + normA5.toString(AngleUnit.RADIAN) + ")");
Angle a6 = new Angle(1000, AngleUnit.PERCENT);
Angle normA6 = AngleUtil.normalize(a6);
System.out.println("1000%: " + a6 + " (" + a6.toString(AngleUnit.DEGREE) + ", " + a6.toString(AngleUnit.RADIAN)
+ ") -> " + normA6 + " (" + normA6.toString(AngleUnit.DEGREE) + ", " + normA6.toString(AngleUnit.RADIAN) + ")");
}
}