AngleSweep Class

An AngleSweep is a pair of angles at start and end of an interval.

  • For stroking purposes, the "included interval" is all angles numerically reached by theta = start + f*(end-start), where f is between 0 and 1.
  • This stroking formula is simple numbers -- 2PI shifts are not involved.
  • 2PI shifts do become important in the reverse mapping of an angle to a fraction.
  • If (start < end) the angle proceeds CCW around the unit circle.
  • If (end < start) the angle proceeds CW around the unit circle.
  • Angles beyond 360 are fine as endpoints.
    • (350,370) covers the same unit angles as (-10,10).
    • (370,350) covers the same unit angles as (10,-10).

Implements

Methods

Name Description
angleToPositivePeriodicFraction(theta: Angle): number map an angle to a fractional coordinate which is:

the start angle is at fraction 0
the end angle is at fraction 1
interior angles are between 0 and 1
all exterior angles are at fractions greater than 1
* the periodic jump is at full wraparound to the start angle
 
angleToSignedPeriodicFraction(theta: Angle): number map an angle to a fractional coordinate which is:

the start angle is at fraction 0
the end angle is at fraction 1
interior angles are between 0 and 1
small negative for angles just "before" the start angle
more than one for angles just "after" the end angle
the periodic jump is at the middle of the "outside" interval
 
angleToUnboundedFraction(theta: Angle): number return the fractionalized position of the angle,
computed without consideration of 2PI period.
 
capLatitudeInPlace(): void Restrict start and end angles into the range (-90,+90) in degrees.  
clone(): AngleSweep return a clone of this sweep.  
cloneMinusRadians(radians: number): AngleSweep Return the angle obtained by subtracting radians from this angle.  
fractionPeriod(): number return 2PI divided by the sweep radians (i.e.  
fractionToAngle(fraction: number): Angle Convert fractional position in the sweep to strongly typed Angle object.  
fractionToRadians(fraction: number): number Convert fractional position in the sweep to radians.  
interpolate(fraction: number, other: AngleSweep): AngleSweep Return a sweep with limits interpolated between this and other.  
isAlmostEqual(other: AngleSweep): boolean test if start and end angles match with radians tolerance.  
isAlmostEqualAllowPeriodShift(other: AngleSweep): boolean test if start and end angles match, with explicit name to clarify that there is no test for 360-degree shifts.  
isAlmostEqualNoPeriodShift(other: AngleSweep): boolean test if start and end angles match, explicit name to clarify that 360-degree shifts are allowed.  
isAngleInSweep(angle: Angle): boolean test if an angle is within the sweep  
isRadiansInSweep(radians: number): boolean test if radians are within sweep  
radiansArraytoPositivePeriodicFractions(data: GrowableFloat64Array): void Convert each value in an array from radians to fraction.  
radiansToPositivePeriodicFraction(radians: number): number Convert a radians value to a fraction that is always positive and can wrap.  
radiansToSignedPeriodicFraction(radians: number): number Convert a radians value to a fraction, allowing wraparound.  
reverseInPlace(): void Reverse the start and end angle in place.  
setFrom(other: AngleSweep): void copy from other AngleSweep.  
setFromJSON(json?: any): void set this AngleSweep from various sources:

* if json is undefined, a full-circle sweep is returned.
 
setStartEndDegrees(startDegrees: number = 0, endDegrees: number = 360): void directly set the start and end angles in degrees  
setStartEndRadians(startRadians: number = 0, endRadians: number = 2.0 * Math.PI): void directly set the start and end angles in radians  
toJSON(): any Convert an AngleSweep to a JSON object.  
create360(startRadians?: number): AngleSweep Static create a full circle sweep (CCW).  
createFullLatitude(): AngleSweep Static create a sweep from the south pole to the north pole.  
createStartEnd(startAngle: Angle, endAngle: Angle, result?: AngleSweep): AngleSweep Static create an angle sweep from strongly typed start and end angles  
createStartEndDegrees(startDegrees: number = 0, endDegrees: number = 360, result?: AngleSweep): AngleSweep Static create an AngleSweep from start and end angles given in degrees.  
createStartEndRadians(startRadians: number = 0, endRadians: number = 2.0 * Math.PI, result?: AngleSweep): AngleSweep Static create an AngleSweep from start and end angles given in radians.  
createStartSweep(startAngle: Angle, sweepAngle: Angle, result?: AngleSweep): AngleSweep Static Create an angle sweep with limits given as (strongly typed) angles for start and sweep  
createStartSweepDegrees(startDegrees: number = 0, sweepDegrees: number = 360, result?: AngleSweep): AngleSweep Static create an AngleSweep from start and sweep given in degrees.  
createStartSweepRadians(startRadians: number = 0, sweepRadians: number = Math.PI, result?: AngleSweep): AngleSweep Static create an AngleSweep from start and end angles given in radians.  
fromJSON(json?: AngleSweepProps): AngleSweep Static create an AngleSweep from a json object.  

Properties

Name Type Description
endAngle Accessor ReadOnly Angle Return the (strongly typed) end angle  
endDegrees Accessor ReadOnly number Read-property for degrees at the end of this AngleSweep.  
endRadians Accessor ReadOnly number Read-property for degrees at the end of this AngleSweep.  
isCCW Accessor ReadOnly boolean Ask if the sweep is counterclockwise, i.e.  
isFullCircle Accessor ReadOnly boolean Ask if the sweep is a full circle.  
isFullLatitudeSweep Accessor ReadOnly boolean Ask if the sweep is a full sweep from south pole to north pole.  
startAngle Accessor ReadOnly Angle Return the (strongly typed) start angle  
startDegrees Accessor ReadOnly number Read-property for degrees at the start of this AngleSweep.  
startRadians Accessor ReadOnly number Read-property for degrees at the start of this AngleSweep.  
sweepDegrees Accessor ReadOnly number Read-property for signed start-to-end sweep in degrees.  
sweepRadians Accessor ReadOnly number Read-property for signed start-to-end sweep in radians.  

Defined in

Last Updated: 10 September, 2019