Angle Class

An Angle carries the numeric value of an angle, with methods to allow (require!) callers to be clear about whether their angle is degrees or radians.

  • After the Angle object is created, the callers should not know or care whether it is stored in degrees or radians because both are available if requested by caller.
  • The various access method are named so that callers can specify whether untyped numbers passed in or out are degrees or radians.
  • Visualization can be found at https://www.itwinjs.org/sandbox/SaeedTorabi/AngleSweep

Implements

Methods

Name Description
addMultipleOf2PiInPlace(multiple: number): void Add a multiple of a full circle angle (360 degrees, 2PI) in place.  
clone(): Angle Return a new angle with the same content.  
cloneScaled(scale: number): Angle Return a (new) Angle object, with angle scaled from existing angle.  
cos(): number Return the cosine of this Angle object's angle  
freeze(): Readonly<Angle> Freeze this instance so it is read-only  
isAlmostEqual(other: Angle, radianTol: number = Geometry.smallAngleRadians): boolean Test if two this angle and other are almost equal, NOT allowing shift by full circle (i.e., multiples of 2 * PI).  
isAlmostEqualAllowPeriodShift(other: Angle, radianTol: number = Geometry.smallAngleRadians): boolean Test if this angle and other are equivalent, allowing shift by full circle (i.e., multiples of 2 * PI).  
isAlmostEqualNoPeriodShift(other: Angle, radianTol: number = Geometry.smallAngleRadians): boolean Test if two this angle and other are almost equal, NOT allowing shift by full circle (i.e., multiples of 2 * PI).  
isMagnitudeLessThanOrEqual(other: Angle): boolean Test if this angle has magnitude no greater than that of other.  
setDegrees(degrees: number): void Set this angle to a value given in degrees.  
setFrom(other: Angle): void Copy all contents of other to this Angle.  
setFromJSON(json?: AngleProps, defaultValRadians?: number): void Set an Angle from a JSON object  
setRadians(radians: number): void Set this angle to a value given in radians.  
sin(): number Return the sine of this Angle object's angle  
tan(): number Return the tangent of this Angle object's angle  
toJSON(): AngleProps Convert an Angle to a JSON object as a number in degrees  
toJSONRadians(): AngleProps Return a json object with radians keyword, e.g.  
adjustDegrees0To360(degrees: number): number Static Adjust a radians value so it is positive in 0..360  
adjustDegreesSigned180(degrees: number): number Static Adjust a radians value so it is in -180..180  
adjustRadians0To2Pi(radians: number): number Static Adjust a radians value so it is positive in 0..2Pi  
adjustRadiansMinusPiPlusPi(radians: number): number Static Adjust a radians value so it is positive in -PI..PI  
cleanupTrigValue(value: number, tolerance: number = Geometry.smallFloatingPoint): number Static If value is close to -1, -0.5, 0, 0.5, 1, adjust it to the exact value.  
create360(): Angle Static Create an angle for a full circle.  
createAtan2(numerator: number, denominator: number): Angle Static Create a (strongly typed) Angle whose tangent is numerator/denominator, using the signs of both in  
createDegrees(degrees: number): Angle Static Return a new Angle object for angle given in degrees.  
createDegreesAdjustPositive(degrees: number): Angle Static Create an angle object with degrees adjusted into 0..360.  
createDegreesAdjustSigned180(degrees: number): Angle Static Create an angle object with degrees adjusted into -180..180.  
createInterpolate(angle0: Angle, fraction: number, angle1: Angle): Angle Static Return a (new) Angle object that is interpolated between two inputs (based on a fraction)  
createRadians(radians: number): Angle Static Return a (new) Angle object for a value given in radians.  
createSmallAngle(): Angle Static Return a new Angle object with the default "small" angle measurement specified by Geometry.smallAngleRadians.  
degreesToRadians(degrees: number): number Static Convert an angle in degrees to radians.  
dotProductsToHalfAngleTrigValues(dotUU: number, dotVV: number, dotUV: number, favorZero: boolean = true): TrigValues Static Return the half angle cosine, sine, and radians for given dot products between vectors.  
fromJSON(json?: AngleProps, defaultValRadians?: number): Angle Static Create an Angle from a JSON object  
isAlmostEqualRadiansAllowPeriodShift(radiansA: number, radiansB: number, radianTol: number = Geometry.smallAngleRadians): boolean Static Test if two radians values are equivalent, allowing shift by full circle (i.e.  
isAlmostEqualRadiansNoPeriodShift(radiansA: number, radiansB: number, radianTol: number = Geometry.smallAngleRadians): boolean Static Test if two angle (in radians) almost equal, NOT allowing shift by full circle (i.e., multiples of 2 * PI).  
isFullCircleRadians(radians: number): boolean Static Test if a radians (absolute) value is nearly 2PI or larger!  
isHalfCircleRadians(radians: number): boolean Static Test if the radians value is a half circle  
isPerpendicularDotSet(dotUU: number, dotVV: number, dotUV: number): boolean Static Test if dot product values indicate non-zero length perpendicular vectors.  
orientedRadiansBetweenVectorsXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number, upVectorX: number, upVectorY: number, upVectorZ: number, adjustToPositive: boolean = false): number Static Returns the angle between two vectors, with the vectors given as xyz components, and an up vector to resolve  
radiansBetweenVectorsXYZ(ux: number, uy: number, uz: number, vx: number, vy: number, vz: number): number Static Returns the angle between two vectors, with the vectors given as xyz components  
radiansToDegrees(radians: number): number Static Convert an angle in radians to degrees.  
trigValuesToHalfAngleTrigValues(rCos2A: number, rSin2A: number): TrigValues Static Return cosine, sine, and radians for the half angle of a "cosine,sine" pair.  
zero(): Angle Static Return a (newly allocated) Angle object with value 0 radians  

Properties

Name Type Description
degrees Accessor ReadOnly number Return the angle measured in degrees.  
degreesPerRadian StaticReadonly number scale factor for converting radians to degrees  
isAlmostNorthOrSouthPole Accessor ReadOnly boolean Test if the angle is almost a north or south pole (within tolerance Geometry.smallAngleRadians)  
isAlmostZero Accessor ReadOnly boolean Test if the angle is almost zero (within tolerance Geometry.smallAngleRadians)  
isExactZero Accessor ReadOnly boolean Test if the angle is exactly zero.  
isFullCircle Accessor ReadOnly boolean Test if the angle is a full circle  
isHalfCircle Accessor ReadOnly boolean Test if the angle is a half circle (in either direction)  
pi2Radians StaticReadonly "6.283185307179586" maximal accuracy value of 2*pi (360 degrees), in radians  
piOver12Radians StaticReadonly "0.26179938779914946" maximal accuracy value of pi/12 (15 degrees), in radians  
piOver2Radians StaticReadonly "1.5707963267948966" maximal accuracy value of pi/2 (90 degrees), in radians  
piOver4Radians StaticReadonly "0.7853981633974483" maximal accuracy value of pi/4 (45 degrees), in radians  
piRadians StaticReadonly "3.141592653589793" maximal accuracy value of pi (180 degrees), in radians  
radians Accessor ReadOnly number Return the angle measured in radians.  
radiansPerDegree StaticReadonly number scale factor for converting degrees to radians  

Defined in

Last Updated: 19 April, 2024