{"version":3,"file":"BezierUtils.mjs","sources":["../../src/utils/BezierUtils.ts"],"sourcesContent":["import { curves } from '../const';\n\n/**\n * Utilities for bezier curves\n * @private\n */\nexport class BezierUtils\n{\n    /**\n     * Calculate length of bezier curve.\n     * Analytical solution is impossible, since it involves an integral that does not integrate in general.\n     * Therefore numerical solution is used.\n     * @private\n     * @param fromX - Starting point x\n     * @param fromY - Starting point y\n     * @param cpX - Control point x\n     * @param cpY - Control point y\n     * @param cpX2 - Second Control point x\n     * @param cpY2 - Second Control point y\n     * @param toX - Destination point x\n     * @param toY - Destination point y\n     * @returns - Length of bezier curve\n     */\n    static curveLength(\n        fromX: number, fromY: number,\n        cpX: number, cpY: number,\n        cpX2: number, cpY2: number,\n        toX: number, toY: number): number\n    {\n        const n = 10;\n        let result = 0.0;\n        let t = 0.0;\n        let t2 = 0.0;\n        let t3 = 0.0;\n        let nt = 0.0;\n        let nt2 = 0.0;\n        let nt3 = 0.0;\n        let x = 0.0;\n        let y = 0.0;\n        let dx = 0.0;\n        let dy = 0.0;\n        let prevX = fromX;\n        let prevY = fromY;\n\n        for (let i = 1; i <= n; ++i)\n        {\n            t = i / n;\n            t2 = t * t;\n            t3 = t2 * t;\n            nt = (1.0 - t);\n            nt2 = nt * nt;\n            nt3 = nt2 * nt;\n\n            x = (nt3 * fromX) + (3.0 * nt2 * t * cpX) + (3.0 * nt * t2 * cpX2) + (t3 * toX);\n            y = (nt3 * fromY) + (3.0 * nt2 * t * cpY) + (3 * nt * t2 * cpY2) + (t3 * toY);\n            dx = prevX - x;\n            dy = prevY - y;\n            prevX = x;\n            prevY = y;\n\n            result += Math.sqrt((dx * dx) + (dy * dy));\n        }\n\n        return result;\n    }\n\n    /**\n     * Calculate the points for a bezier curve and then draws it.\n     *\n     * Ignored from docs since it is not directly exposed.\n     * @ignore\n     * @param cpX - Control point x\n     * @param cpY - Control point y\n     * @param cpX2 - Second Control point x\n     * @param cpY2 - Second Control point y\n     * @param toX - Destination point x\n     * @param toY - Destination point y\n     * @param points - Path array to push points into\n     */\n    static curveTo(\n        cpX: number, cpY: number,\n        cpX2: number, cpY2: number,\n        toX: number, toY: number,\n        points: Array<number>): void\n    {\n        const fromX = points[points.length - 2];\n        const fromY = points[points.length - 1];\n\n        points.length -= 2;\n\n        const n = curves._segmentsCount(\n            BezierUtils.curveLength(fromX, fromY, cpX, cpY, cpX2, cpY2, toX, toY)\n        );\n\n        let dt = 0;\n        let dt2 = 0;\n        let dt3 = 0;\n        let t2 = 0;\n        let t3 = 0;\n\n        points.push(fromX, fromY);\n\n        for (let i = 1, j = 0; i <= n; ++i)\n        {\n            j = i / n;\n\n            dt = (1 - j);\n            dt2 = dt * dt;\n            dt3 = dt2 * dt;\n\n            t2 = j * j;\n            t3 = t2 * j;\n\n            points.push(\n                (dt3 * fromX) + (3 * dt2 * j * cpX) + (3 * dt * t2 * cpX2) + (t3 * toX),\n                (dt3 * fromY) + (3 * dt2 * j * cpY) + (3 * dt * t2 * cpY2) + (t3 * toY)\n            );\n        }\n    }\n}\n"],"names":[],"mappings":"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"}