Package pl.poznan.put.circular
Class Angle
- java.lang.Object
-
- pl.poznan.put.circular.Angle
-
- All Implemented Interfaces:
Comparable<Angle>
- Direct Known Subclasses:
ImmutableAngle
@Immutable public abstract class Angle extends Object implements Comparable<Angle>
A measurement for which one can distinguish a direction (i.e. [0..360) degrees)
-
-
Constructor Summary
Constructors Constructor Description Angle()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static AnglebetweenPoints(org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordA, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordB, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordC)Calculates angle ABC.intcompareTo(Angle t)doubledegrees()doubledegrees360()doubledistance(Angle other)Computes a useful distance in range [0; 2] between two angular values.booleanequals(Object obj)static AnglefromHourMinuteString(String hourMinute)Parses a string in format HH.MM as a vector on a circular clock.booleanisBetween(Angle begin, Angle end)Return strue if this instance is in range [begin; end).booleanisValid()Anglemultiply(double v)Multiplies the angular value by a constant.protected Anglenormalize()AngleorderedSubtract(Angle other)Returns an ordered difference between angles.abstract doubleradians()doubleradians2PI()Anglesubtract(Angle other)Subtracts another angular value from this.static doublesubtractAsVectors(double left, double right)Calculates angles' difference using formula acos(dot(left, right)).static doublesubtractByAbsolutes(double left, double right)Calculates angles' difference using formula: pi - |pi - |left - right||.static doublesubtractByMinimum(double left, double right)Calculates angles' difference using formula min(|left - right|, 360 - |left - right|).static AngletorsionAngle(org.apache.commons.math3.geometry.euclidean.threed.Vector3D vec1, org.apache.commons.math3.geometry.euclidean.threed.Vector3D vec2, org.apache.commons.math3.geometry.euclidean.threed.Vector3D vec3)Calculates torsion angle given three vectors.static AngletorsionAngle(org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordA, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordB, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordC, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordD)Calculates torsion angle given four points.static AngletorsionAngleByAcos(org.apache.commons.math3.geometry.euclidean.threed.Vector3D a1, org.apache.commons.math3.geometry.euclidean.threed.Vector3D a2, org.apache.commons.math3.geometry.euclidean.threed.Vector3D a3, org.apache.commons.math3.geometry.euclidean.threed.Vector3D a4)Calculates torsion angle given four points.StringtoString()
-
-
-
Method Detail
-
betweenPoints
public static Angle betweenPoints(org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordA, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordB, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordC)
Calculates angle ABC.- Parameters:
coordA- Coordinate of point A.coordB- Coordinate of point B.coordC- Coordinate of point C.- Returns:
- An angle between points A, B and C.
-
torsionAngleByAcos
public static Angle torsionAngleByAcos(org.apache.commons.math3.geometry.euclidean.threed.Vector3D a1, org.apache.commons.math3.geometry.euclidean.threed.Vector3D a2, org.apache.commons.math3.geometry.euclidean.threed.Vector3D a3, org.apache.commons.math3.geometry.euclidean.threed.Vector3D a4)
Calculates torsion angle given four points. Uses cos^-1 and a check for pseudovector.- Parameters:
a1- Atom 1.a2- Atom 2.a3- Atom 3.a4- Atom 4.- Returns:
- A torsion angle (rotation around vector B-C).
-
torsionAngle
public static Angle torsionAngle(org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordA, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordB, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordC, org.apache.commons.math3.geometry.euclidean.threed.Vector3D coordD)
Calculates torsion angle given four points. Uses atan2 method.- Parameters:
coordA- Coordinate of point A.coordB- Coordinate of point B.coordC- Coordinate of point C.coordD- Coordinate of point D.- Returns:
- A torsion angle (rotation around vector B-C).
-
torsionAngle
public static Angle torsionAngle(org.apache.commons.math3.geometry.euclidean.threed.Vector3D vec1, org.apache.commons.math3.geometry.euclidean.threed.Vector3D vec2, org.apache.commons.math3.geometry.euclidean.threed.Vector3D vec3)
Calculates torsion angle given three vectors. Uses atan2 method.- Parameters:
vec1- The first vector.vec2- The second vector.vec3- The third vector.- Returns:
- A torsion angle (rotation around vector vec2).
-
fromHourMinuteString
public static Angle fromHourMinuteString(String hourMinute)
Parses a string in format HH.MM as a vector on a circular clock. For 'm' minutes after midnight, the vector has value of '360 * m / (24 * 60)'.- Parameters:
hourMinute- String in format HH.MM.- Returns:
- A vector representation of time on a circular clock.
- Throws:
InvalidVectorFormatException- If the input string has an invalid format.InvalidCircularValueException- If the input string is parsed to a value outside the range [0..360)
-
subtractByMinimum
public static double subtractByMinimum(double left, double right)Calculates angles' difference using formula min(|left - right|, 360 - |left - right|).- Parameters:
left- Minuend in radians.right- Subtrahend in radians.- Returns:
- The result of minuend - subtrahend in angular space.
-
subtractAsVectors
public static double subtractAsVectors(double left, double right)Calculates angles' difference using formula acos(dot(left, right)).- Parameters:
left- Minuend in radians.right- Subtrahend in radians.- Returns:
- The result of minuend - subtrahend in angular space.
-
subtractByAbsolutes
public static double subtractByAbsolutes(double left, double right)Calculates angles' difference using formula: pi - |pi - |left - right||.- Parameters:
left- Minuend in radians.right- Subtrahend in radians.- Returns:
- The result of minuend - subtrahend in angular space.
-
radians
@Parameter(order=1) public abstract double radians()
- Returns:
- Value in radians in range (-pi; pi].
-
degrees
public final double degrees()
- Returns:
- Value in degrees in range (-180; 180].
-
degrees360
public final double degrees360()
- Returns:
- Value in degrees in range [0; 360).
-
radians2PI
public final double radians2PI()
- Returns:
- Value in radians in range [0; 2pi).
-
isValid
public final boolean isValid()
- Returns:
- True if value is not NaN.
-
isBetween
public final boolean isBetween(Angle begin, Angle end)
Return strue if this instance is in range [begin; end). For example 45 degrees is between 30 degrees and 60 degrees. Also, 15 degrees is between -30 and 30 degrees.- Parameters:
begin- Beginning of the range of values.end- Ending of the range of values.- Returns:
- true if object is between [begin; end)
-
multiply
public final Angle multiply(double v)
Multiplies the angular value by a constant.- Parameters:
v- Multiplier.- Returns:
- Angular value multiplied.
-
subtract
public final Angle subtract(Angle other)
Subtracts another angular value from this.- Parameters:
other- Another angular value.- Returns:
- Result of this - other in angular space.
-
orderedSubtract
public final Angle orderedSubtract(Angle other)
Returns an ordered difference between angles. It describes a rotation from one angle to another one and is therefore in range [-180; 180) degrees.- Parameters:
other- The other angle which value should be subtracted from this one.- Returns:
- An ordered difference from first to second angle in range [-180; 180) degrees.
-
distance
public final double distance(Angle other)
Computes a useful distance in range [0; 2] between two angular values.- Parameters:
other- The other angle.- Returns:
- Value in range [0; 2] denoting distance between two angles.
-
compareTo
public final int compareTo(Angle t)
- Specified by:
compareToin interfaceComparable<Angle>
-
normalize
@Check protected Angle normalize()
-
-