@technobuddha/library
Version:
A large library of useful functions
30 lines • 2.02 kB
JavaScript
import { normalizeAngle } from "./normalize-angle.js";
import { toAngle } from "./to-angle.js";
/**
* Computes the difference between startAngle and endAngle.
* @param startAngle - Start angle.
* @param endAngle - End angle.
* @param options - see {@link UnitOptions}
* @returns The amount that when added to *startAngle* will result in *endAngle*.
* @remarks
* Positive numbers mean that the
* direction is clockwise. Negative numbers indicate a counter-clockwise direction.
* The shortest route (clockwise vs counter-clockwise) between the angles is used.
* When the difference is π radians, the function returns π (not -π)
* @example
* ```typescript
* angleDifference(Math.PI * 1/6, Math.PI * 2/6); // π * 1/6
* angleDifference(Math.PI * 2/6, Math.PI * 1/6); // -π * 1/6.
* angleDifference(30, 60, 'deg'); // 30
* ```
* @group Geometry
* @category Angle
*/
export function angleDifference(startAngle, endAngle, { unit = 'radians' } = {}) {
let d = normalizeAngle(endAngle, { unit }) - normalizeAngle(startAngle, { unit });
if (d > Math.PI) {
d -= Math.PI * 2;
}
return toAngle(d + 0, 'radians', unit);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5nbGUtZGlmZmVyZW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9hbmdsZS1kaWZmZXJlbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FDN0IsVUFBa0IsRUFDbEIsUUFBZ0IsRUFDaEIsRUFBRSxJQUFJLEdBQUcsU0FBUyxLQUFrQixFQUFFO0lBRXRDLElBQUksQ0FBQyxHQUFHLGNBQWMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ2xGLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQixDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ3pDLENBQUMifQ==