@technobuddha/library
Version: 
A large library of useful functions
28 lines • 2.7 kB
JavaScript
import { normalizeAngle } from "./normalize-angle.js";
/**
 * Rotates a point around a given origin by a specified angle.
 * @param point - The Cartesian coordinates of the point to rotate.
 * @param angle - The angle in radians to rotate the point. Positive values rotate counterclockwise.
 * @param origin - The Cartesian coordinates of the origin around which to rotate.
 * @returns The new Cartesian coordinates of the rotated point.
 * @internal
 */
function rotatePoint(point, angle, origin) {
    return {
        x: (point.x - origin.x) * Math.cos(angle) - (point.y - origin.y) * Math.sin(angle) + origin.x,
        y: (point.x - origin.x) * Math.sin(angle) + (point.y - origin.y) * Math.cos(angle) + origin.y,
    };
}
/**
 * Rotates a point or a polygon around a given origin by a specified angle.
 * @group Geometry
 * @category Point
 * @category Polygon
 */ export function rotate(point, angle, { origin = { x: 0, y: 0 }, unit = 'radians' } = {}) {
    const angleInRadians = normalizeAngle(angle, { unit });
    if (Array.isArray(point)) {
        return point.map((p) => rotatePoint(p, angleInRadians, origin));
    }
    return rotatePoint(point, angleInRadians, origin);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm90YXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3JvdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFdEQ7Ozs7Ozs7R0FPRztBQUNILFNBQVMsV0FBVyxDQUFDLEtBQWdCLEVBQUUsS0FBYSxFQUFFLE1BQWlCO0lBQ3JFLE9BQU87UUFDTCxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUM3RixDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztLQUM5RixDQUFDO0FBQ0osQ0FBQztBQXVDRDs7Ozs7R0FLRyxDQUFDLE1BQU0sVUFBVSxNQUFNLENBQ3hCLEtBQTBCLEVBQzFCLEtBQWEsRUFDYixFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksR0FBRyxTQUFTLEtBQWtDLEVBQUU7SUFFL0UsTUFBTSxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFFdkQsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFDRCxPQUFPLFdBQVcsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3BELENBQUMifQ==