{"version":3,"file":"QuadraticUtils.mjs","sources":["../../src/utils/QuadraticUtils.ts"],"sourcesContent":["import { curves } from '../const';\n\n/**\n * Utilities for quadratic curves.\n * @private\n */\nexport class QuadraticUtils\n{\n    /**\n     * Calculate length of quadratic curve\n     * @see {@link http://www.malczak.linuxpl.com/blog/quadratic-bezier-curve-length/}\n     * for the detailed explanation of math behind this.\n     * @private\n     * @param fromX - x-coordinate of curve start point\n     * @param fromY - y-coordinate of curve start point\n     * @param cpX - x-coordinate of curve control point\n     * @param cpY - y-coordinate of curve control point\n     * @param toX - x-coordinate of curve end point\n     * @param toY - y-coordinate of curve end point\n     * @returns - Length of quadratic curve\n     */\n    static curveLength(\n        fromX: number, fromY: number,\n        cpX: number, cpY: number,\n        toX: number, toY: number): number\n    {\n        const ax = fromX - (2.0 * cpX) + toX;\n        const ay = fromY - (2.0 * cpY) + toY;\n        const bx = (2.0 * cpX) - (2.0 * fromX);\n        const by = (2.0 * cpY) - (2.0 * fromY);\n        const a = 4.0 * ((ax * ax) + (ay * ay));\n        const b = 4.0 * ((ax * bx) + (ay * by));\n        const c = (bx * bx) + (by * by);\n\n        const s = 2.0 * Math.sqrt(a + b + c);\n        const a2 = Math.sqrt(a);\n        const a32 = 2.0 * a * a2;\n        const c2 = 2.0 * Math.sqrt(c);\n        const ba = b / a2;\n\n        return (\n            (a32 * s)\n                + (a2 * b * (s - c2))\n                + (\n                    ((4.0 * c * a) - (b * b))\n                   * Math.log(((2.0 * a2) + ba + s) / (ba + c2))\n                )\n        ) / (4.0 * a32);\n    }\n\n    /**\n     * Calculate the points for a quadratic bezier curve and then draws it.\n     * Based on: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c\n     * @private\n     * @param cpX - Control point x\n     * @param cpY - Control point y\n     * @param toX - Destination point x\n     * @param toY - Destination point y\n     * @param points - Points to add segments to.\n     */\n    static curveTo(cpX: number, cpY: number, toX: number, toY: number, points: Array<number>): void\n    {\n        const fromX = points[points.length - 2];\n        const fromY = points[points.length - 1];\n\n        const n = curves._segmentsCount(\n            QuadraticUtils.curveLength(fromX, fromY, cpX, cpY, toX, toY)\n        );\n\n        let xa = 0;\n        let ya = 0;\n\n        for (let i = 1; i <= n; ++i)\n        {\n            const j = i / n;\n\n            xa = fromX + ((cpX - fromX) * j);\n            ya = fromY + ((cpY - fromY) * j);\n\n            points.push(xa + (((cpX + ((toX - cpX) * j)) - xa) * j),\n                ya + (((cpY + ((toY - cpY) * j)) - ya) * j));\n        }\n    }\n}\n"],"names":[],"mappings":";;AAMO,MAAM,cACb,CAAA;AAAA,EAcI,OAAO,WACH,CAAA,KAAA,EAAe,OACf,GAAa,EAAA,GAAA,EACb,KAAa,GACjB,EAAA;AACI,IAAM,MAAA,EAAA,GAAK,KAAS,GAAA,CAAA,GAAM,GAAO,GAAA,GAAA,CAAA;AACjC,IAAM,MAAA,EAAA,GAAK,KAAS,GAAA,CAAA,GAAM,GAAO,GAAA,GAAA,CAAA;AACjC,IAAM,MAAA,EAAA,GAAM,CAAM,GAAA,GAAA,GAAQ,CAAM,GAAA,KAAA,CAAA;AAChC,IAAM,MAAA,EAAA,GAAM,CAAM,GAAA,GAAA,GAAQ,CAAM,GAAA,KAAA,CAAA;AAChC,IAAA,MAAM,CAAI,GAAA,CAAA,IAAa,EAAA,GAAA,EAAA,GAAO,EAAK,GAAA,EAAA,CAAA,CAAA;AACnC,IAAA,MAAM,CAAI,GAAA,CAAA,IAAa,EAAA,GAAA,EAAA,GAAO,EAAK,GAAA,EAAA,CAAA,CAAA;AACnC,IAAM,MAAA,CAAA,GAAK,EAAK,GAAA,EAAA,GAAO,EAAK,GAAA,EAAA,CAAA;AAE5B,IAAA,MAAM,IAAI,CAAM,GAAA,IAAA,CAAK,IAAK,CAAA,CAAA,GAAI,IAAI,CAAC,CAAA,CAAA;AACnC,IAAM,MAAA,EAAA,GAAK,IAAK,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AACtB,IAAM,MAAA,GAAA,GAAM,IAAM,CAAI,GAAA,EAAA,CAAA;AACtB,IAAA,MAAM,EAAK,GAAA,CAAA,GAAM,IAAK,CAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC5B,IAAA,MAAM,KAAK,CAAI,GAAA,EAAA,CAAA;AAEf,IACK,OAAA,CAAA,GAAA,GAAM,IACA,EAAK,GAAA,CAAA,QAAS,EAEX,CAAA,GAAA,CAAA,CAAA,GAAM,IAAI,CAAM,GAAA,CAAA,GAAI,KACrB,IAAK,CAAA,GAAA,CAAM,KAAM,EAAM,GAAA,EAAA,GAAK,MAAW,EAAA,GAAA,EAAA,CAAG,MAE5C,CAAA,GAAA,GAAA,CAAA,CAAA;AAAA,GACf;AAAA,EAYA,OAAO,OAAQ,CAAA,GAAA,EAAa,GAAa,EAAA,GAAA,EAAa,KAAa,MACnE,EAAA;AACI,IAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA,CAAA;AACrC,IAAM,MAAA,KAAA,GAAQ,MAAO,CAAA,MAAA,CAAO,MAAS,GAAA,CAAA,CAAA,CAAA;AAErC,IAAM,MAAA,CAAA,GAAI,MAAO,CAAA,cAAA,CACb,cAAe,CAAA,WAAA,CAAY,KAAO,EAAA,KAAA,EAAO,GAAK,EAAA,GAAA,EAAK,GAAK,EAAA,GAAG,CAC/D,CAAA,CAAA;AAEA,IAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AACT,IAAA,IAAI,EAAK,GAAA,CAAA,CAAA;AAET,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAK,IAAA,CAAA,EAAG,EAAE,CAC1B,EAAA;AACI,MAAA,MAAM,IAAI,CAAI,GAAA,CAAA,CAAA;AAEd,MAAK,EAAA,GAAA,KAAA,GAAU,OAAM,KAAS,IAAA,CAAA,CAAA;AAC9B,MAAK,EAAA,GAAA,KAAA,GAAU,OAAM,KAAS,IAAA,CAAA,CAAA;AAE9B,MAAA,MAAA,CAAO,IAAK,CAAA,EAAA,GAAQ,CAAQ,GAAA,GAAA,CAAA,GAAA,GAAM,OAAO,CAAM,GAAA,EAAA,IAAM,CACjD,EAAA,EAAA,GAAQ,CAAQ,GAAA,GAAA,CAAA,GAAA,GAAM,GAAO,IAAA,CAAA,GAAM,MAAM,CAAE,CAAA,CAAA;AAAA,KACnD;AAAA,GACJ;AACJ;;;;"}