curvy 1.0.9 → 2.0.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/characteristic/index.d.mts +88 -0
- package/dist/characteristic/index.mjs +2 -0
- package/dist/curve/index.d.mts +2 -0
- package/dist/curve/index.mjs +2 -0
- package/dist/interval/index.d.mts +3 -0
- package/dist/interval/index.mjs +3 -0
- package/dist/matrix/index.d.mts +2 -0
- package/dist/matrix/index.mjs +267 -0
- package/dist/matrix/index.mjs.map +1 -0
- package/dist/number.d.mts +280 -0
- package/dist/number.mjs +140 -0
- package/dist/number.mjs.map +1 -0
- package/dist/path/index.d.mts +261 -0
- package/dist/path/index.mjs +325 -0
- package/dist/path/index.mjs.map +1 -0
- package/dist/polynomial/index.d.mts +2 -0
- package/dist/polynomial/index.mjs +3 -0
- package/dist/shared/characteristic-B9nCh_cx.mjs +104 -0
- package/dist/shared/characteristic-B9nCh_cx.mjs.map +1 -0
- package/dist/shared/chunk-25Hzd3z8.mjs +13 -0
- package/dist/shared/cubic-BajUY0JT.d.mts +1100 -0
- package/dist/shared/cubic-CpHAx8cC.mjs +479 -0
- package/dist/shared/cubic-CpHAx8cC.mjs.map +1 -0
- package/dist/shared/interval-05CR6eBf.mjs +421 -0
- package/dist/shared/interval-05CR6eBf.mjs.map +1 -0
- package/dist/shared/interval-Dy-RMEE3.d.mts +533 -0
- package/dist/shared/interval2d-8IBZnUOq.mjs +108 -0
- package/dist/shared/interval2d-8IBZnUOq.mjs.map +1 -0
- package/dist/shared/interval2d-C2id9u31.d.mts +172 -0
- package/dist/shared/matrix4x4-Ck2WROK-.mjs +440 -0
- package/dist/shared/matrix4x4-Ck2WROK-.mjs.map +1 -0
- package/dist/shared/matrix4x4-Dm_tSiH1.d.mts +1183 -0
- package/dist/shared/quadratic-CamozcFc.mjs +330 -0
- package/dist/shared/quadratic-CamozcFc.mjs.map +1 -0
- package/dist/shared/rationalCubic2d-B6g97ryJ.d.mts +308 -0
- package/dist/shared/rationalCubic2d-BEgUGSFf.mjs +295 -0
- package/dist/shared/rationalCubic2d-BEgUGSFf.mjs.map +1 -0
- package/dist/shared/rationalCubic2d-Bys2Uory.mjs +695 -0
- package/dist/shared/rationalCubic2d-Bys2Uory.mjs.map +1 -0
- package/dist/shared/rationalCubic2d-DlQfBURs.d.mts +818 -0
- package/dist/shared/solution-CrtLfqEq.mjs +306 -0
- package/dist/shared/solution-CrtLfqEq.mjs.map +1 -0
- package/dist/shared/solution-sNQ-ZVhN.d.mts +251 -0
- package/dist/{pipe.d.mts → shared/utils-MCckigYk.d.mts} +44 -26
- package/dist/shared/vector2-CL1HDdPr.mjs +187 -0
- package/dist/shared/vector2-CL1HDdPr.mjs.map +1 -0
- package/dist/shared/vector2-DPUY3_eA.d.mts +470 -0
- package/dist/shared/vector2.internal-DU_E808S.mjs +97 -0
- package/dist/shared/vector2.internal-DU_E808S.mjs.map +1 -0
- package/dist/shared/vector3-D-tv_aKL.mjs +204 -0
- package/dist/shared/vector3-D-tv_aKL.mjs.map +1 -0
- package/dist/shared/vector3-DqeOZtOB.d.mts +703 -0
- package/dist/shared/vector4-5KbjoHVj.mjs +109 -0
- package/dist/shared/vector4-5KbjoHVj.mjs.map +1 -0
- package/dist/shared/vector4.internal-5XcaX12X.mjs +163 -0
- package/dist/shared/vector4.internal-5XcaX12X.mjs.map +1 -0
- package/dist/solution/index.d.mts +2 -0
- package/dist/solution/index.mjs +2 -0
- package/dist/splines/index.d.mts +701 -0
- package/dist/splines/index.mjs +734 -0
- package/dist/splines/index.mjs.map +1 -0
- package/dist/utils.d.mts +2 -205
- package/dist/utils.mjs +88 -52
- package/dist/utils.mjs.map +1 -1
- package/dist/vector/index.d.mts +3 -0
- package/dist/vector/index.mjs +4 -0
- package/package.json +49 -92
- package/dist/curve/cubic2d.d.mts +0 -109
- package/dist/curve/cubic2d.d.ts +0 -109
- package/dist/curve/cubic2d.mjs +0 -80
- package/dist/curve/cubic2d.mjs.map +0 -1
- package/dist/curve/linear2d.d.mts +0 -94
- package/dist/curve/linear2d.d.ts +0 -94
- package/dist/curve/linear2d.mjs +0 -46
- package/dist/curve/linear2d.mjs.map +0 -1
- package/dist/curve/quadratic2d.d.mts +0 -117
- package/dist/curve/quadratic2d.d.ts +0 -117
- package/dist/curve/quadratic2d.mjs +0 -82
- package/dist/curve/quadratic2d.mjs.map +0 -1
- package/dist/interval.d.mts +0 -251
- package/dist/interval.d.ts +0 -251
- package/dist/interval.mjs +0 -86
- package/dist/interval.mjs.map +0 -1
- package/dist/matrix/matrix2x2.d.mts +0 -320
- package/dist/matrix/matrix2x2.d.ts +0 -320
- package/dist/matrix/matrix2x2.mjs +0 -25
- package/dist/matrix/matrix2x2.mjs.map +0 -1
- package/dist/matrix/matrix3x3.d.mts +0 -370
- package/dist/matrix/matrix3x3.d.ts +0 -370
- package/dist/matrix/matrix3x3.mjs +0 -28
- package/dist/matrix/matrix3x3.mjs.map +0 -1
- package/dist/matrix/matrix4x4.d.mts +0 -381
- package/dist/matrix/matrix4x4.d.ts +0 -381
- package/dist/matrix/matrix4x4.mjs +0 -178
- package/dist/matrix/matrix4x4.mjs.map +0 -1
- package/dist/path/cubic2d.d.mts +0 -95
- package/dist/path/cubic2d.d.ts +0 -95
- package/dist/path/cubic2d.mjs +0 -60
- package/dist/path/cubic2d.mjs.map +0 -1
- package/dist/path/linear2d.d.mts +0 -95
- package/dist/path/linear2d.d.ts +0 -95
- package/dist/path/linear2d.mjs +0 -53
- package/dist/path/linear2d.mjs.map +0 -1
- package/dist/path/quadratic2d.d.mts +0 -95
- package/dist/path/quadratic2d.d.ts +0 -95
- package/dist/path/quadratic2d.mjs +0 -57
- package/dist/path/quadratic2d.mjs.map +0 -1
- package/dist/pipe.d.ts +0 -58
- package/dist/pipe.mjs +0 -92
- package/dist/pipe.mjs.map +0 -1
- package/dist/polynomial/cubic.d.mts +0 -7
- package/dist/polynomial/cubic.d.ts +0 -7
- package/dist/polynomial/cubic.mjs +0 -133
- package/dist/polynomial/cubic.mjs.map +0 -1
- package/dist/polynomial/linear.d.mts +0 -7
- package/dist/polynomial/linear.d.ts +0 -7
- package/dist/polynomial/linear.mjs +0 -24
- package/dist/polynomial/linear.mjs.map +0 -1
- package/dist/polynomial/quadratic.d.mts +0 -7
- package/dist/polynomial/quadratic.d.ts +0 -7
- package/dist/polynomial/quadratic.mjs +0 -27
- package/dist/polynomial/quadratic.mjs.map +0 -1
- package/dist/shared/curvy.Bf5TIk31.d.mts +0 -22
- package/dist/shared/curvy.Bf5TIk31.d.ts +0 -22
- package/dist/shared/curvy.BkkW8Tx9.mjs +0 -102
- package/dist/shared/curvy.BkkW8Tx9.mjs.map +0 -1
- package/dist/shared/curvy.BxdGW9he.mjs +0 -116
- package/dist/shared/curvy.BxdGW9he.mjs.map +0 -1
- package/dist/shared/curvy.C_sCeg9J.mjs +0 -66
- package/dist/shared/curvy.C_sCeg9J.mjs.map +0 -1
- package/dist/shared/curvy.Cg8lZVUz.d.ts +0 -688
- package/dist/shared/curvy.DCt1gGII.mjs +0 -147
- package/dist/shared/curvy.DCt1gGII.mjs.map +0 -1
- package/dist/shared/curvy.DJ4xO0al.mjs +0 -63
- package/dist/shared/curvy.DJ4xO0al.mjs.map +0 -1
- package/dist/shared/curvy.DmVFTi0N.mjs +0 -35
- package/dist/shared/curvy.DmVFTi0N.mjs.map +0 -1
- package/dist/shared/curvy.FDaj5rlj.d.mts +0 -688
- package/dist/shared/curvy.lktriTpx.mjs +0 -101
- package/dist/shared/curvy.lktriTpx.mjs.map +0 -1
- package/dist/shared/curvy.mLFprrGm.mjs +0 -85
- package/dist/shared/curvy.mLFprrGm.mjs.map +0 -1
- package/dist/shared/curvy.r6f1j287.mjs +0 -76
- package/dist/shared/curvy.r6f1j287.mjs.map +0 -1
- package/dist/splines/basis2d.d.mts +0 -130
- package/dist/splines/basis2d.d.ts +0 -130
- package/dist/splines/basis2d.mjs +0 -90
- package/dist/splines/basis2d.mjs.map +0 -1
- package/dist/splines/bezier2d.d.mts +0 -182
- package/dist/splines/bezier2d.d.ts +0 -182
- package/dist/splines/bezier2d.mjs +0 -23
- package/dist/splines/bezier2d.mjs.map +0 -1
- package/dist/splines/cardinal2d.d.mts +0 -178
- package/dist/splines/cardinal2d.d.ts +0 -178
- package/dist/splines/cardinal2d.mjs +0 -114
- package/dist/splines/cardinal2d.mjs.map +0 -1
- package/dist/splines/hermite2d.d.mts +0 -124
- package/dist/splines/hermite2d.d.ts +0 -124
- package/dist/splines/hermite2d.mjs +0 -63
- package/dist/splines/hermite2d.mjs.map +0 -1
- package/dist/utils.d.ts +0 -205
- package/dist/vector/vector2.d.mts +0 -324
- package/dist/vector/vector2.d.ts +0 -324
- package/dist/vector/vector2.mjs +0 -30
- package/dist/vector/vector2.mjs.map +0 -1
- package/dist/vector/vector3.d.mts +0 -417
- package/dist/vector/vector3.d.ts +0 -417
- package/dist/vector/vector3.mjs +0 -38
- package/dist/vector/vector3.mjs.map +0 -1
- package/dist/vector/vector4.d.mts +0 -205
- package/dist/vector/vector4.d.ts +0 -205
- package/dist/vector/vector4.mjs +0 -20
- package/dist/vector/vector4.mjs.map +0 -1
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import '../interval.js';
|
|
2
|
-
import '../pipe.js';
|
|
3
|
-
import '../vector/vector2.js';
|
|
4
|
-
export { L as LinearPolynomial, U as antiderivative, T as derivative, V as domain, J as fromPointSlope, K as fromPoints, I as fromVector, G as isLinearPolynomial, X as length, H as make, S as monotonicity, W as range, R as root, M as solve, O as solveInverse, P as toInverseSolver, N as toSolver } from '../shared/curvy.Cg8lZVUz.js';
|
|
5
|
-
import '../shared/curvy.Bf5TIk31.js';
|
|
6
|
-
import '../vector/vector3.js';
|
|
7
|
-
import '../vector/vector4.js';
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { i as isLinearPolynomial$1, a as make$1, f as fromVector$1, d as fromPointSlope$1, e as fromPoints$1, s as solve$1, t as toSolver$1, c as solveInverse$1, g as toInverseSolver$1, m as monotonicity$1, h as derivative$1, j as antiderivative$1, k as domain$1, r as range$1, l as length$1 } from '../shared/curvy.r6f1j287.mjs';
|
|
2
|
-
import '../interval.mjs';
|
|
3
|
-
import '../pipe.mjs';
|
|
4
|
-
import '../utils.mjs';
|
|
5
|
-
|
|
6
|
-
const isLinearPolynomial = isLinearPolynomial$1;
|
|
7
|
-
const make = make$1;
|
|
8
|
-
const fromVector = fromVector$1;
|
|
9
|
-
const fromPointSlope = fromPointSlope$1;
|
|
10
|
-
const fromPoints = fromPoints$1;
|
|
11
|
-
const solve = solve$1;
|
|
12
|
-
const toSolver = toSolver$1;
|
|
13
|
-
const solveInverse = solveInverse$1;
|
|
14
|
-
const toInverseSolver = toInverseSolver$1;
|
|
15
|
-
const root = (p) => solveInverse$1(p, 0);
|
|
16
|
-
const monotonicity = monotonicity$1;
|
|
17
|
-
const derivative = derivative$1;
|
|
18
|
-
const antiderivative = antiderivative$1;
|
|
19
|
-
const domain = domain$1;
|
|
20
|
-
const range = range$1;
|
|
21
|
-
const length = length$1;
|
|
22
|
-
|
|
23
|
-
export { antiderivative, derivative, domain, fromPointSlope, fromPoints, fromVector, isLinearPolynomial, length, make, monotonicity, range, root, solve, solveInverse, toInverseSolver, toSolver };
|
|
24
|
-
//# sourceMappingURL=linear.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"linear.mjs","sources":["../../src/polynomial/linear.ts"],"sourcesContent":["import type { Interval } from '../interval'\nimport type { Pipeable } from '../pipe'\nimport type { Vector2 } from '../vector/vector2'\nimport * as internal from './linear.internal'\nimport type { LinearPolynomialTypeId } from './linear.internal'\nimport type { GuaranteedMonotonicity } from './monotonicity'\nimport type { QuadraticPolynomial } from './quadratic'\nimport type { ZeroOrOne } from './types'\n\n/**\n * A linear polynomial.\n *\n * All fields are readonly and immutable, and all operations create new instances.\n *\n * @since 1.0.0\n */\nexport interface LinearPolynomial extends Pipeable {\n readonly [LinearPolynomialTypeId]: LinearPolynomialTypeId\n\n /**\n * The coefficient of the x^0 term.\n */\n readonly c0: number\n\n /**\n * The coefficient of the x^1 term.\n */\n readonly c1: number\n}\n\n/**\n * Checks if a value is a `LinearPolynomial`.\n *\n * @param v - The value to check.\n * @returns `true` if the value is a `LinearPolynomial`, `false` otherwise.\n * @since 1.0.0\n */\nexport const isLinearPolynomial: (v: unknown) => v is LinearPolynomial = internal.isLinearPolynomial\n\n/**\n * Creates a new `LinearPolynomial` instance.\n *\n * @param c0 - The coefficient of the x^0 term. Defaults to 0.\n * @param c1 - The coefficient of the x^1 term. Defaults to 0.\n * @returns A new `LinearPolynomial` instance.\n * @since 1.0.0\n */\nexport const make: (c0?: number, c1?: number) => LinearPolynomial = internal.make\n\n/**\n * Creates a new `LinearPolynomial` instance from a vector.\n *\n * @param v - The vector to create the polynomial from.\n * @returns A new `LinearPolynomial` instance.\n * @since 1.0.0\n */\nexport const fromVector: (v: Vector2) => LinearPolynomial = internal.fromVector\n\n/**\n * Creates a new `LinearPolynomial` instance from a point and slope.\n *\n * @param p - The point on the line.\n * @param slope - The slope of the line.\n * @returns A new `LinearPolynomial` instance.\n * @since 1.0.0\n */\nexport const fromPointSlope: (p: Vector2, slope: number) => LinearPolynomial =\n internal.fromPointSlope\n\n/**\n * Creates a new `LinearPolynomial` instance from two points.\n *\n * @param p1 - The first point.\n * @param p2 - The second point.\n * @returns A new `LinearPolynomial` instance.\n * @since 1.0.0\n */\nexport const fromPoints: (p1: Vector2, p2: Vector2) => LinearPolynomial = internal.fromPoints\n\nexport const solve: {\n /**\n * Solves a linear polynomial for a given value of x.\n *\n * @param p - The linear polynomial to solve.\n * @param x - The value of x to solve for.\n * @returns The result of the polynomial evaluated at x.\n * @since 1.0.0\n */\n (p: LinearPolynomial, x: number): number\n /**\n * Solves a linear polynomial for a given value of x.\n *\n * @param x - The value of x to solve for.\n * @returns A function that takes a `LinearPolynomial` and returns the result of the polynomial evaluated at x.\n * @since 1.0.0\n */\n (x: number): (p: LinearPolynomial) => number\n} = internal.solve\n\n/**\n * Converts a linear polynomial to a solver function.\n *\n * @param p - The linear polynomial to convert.\n * @returns A function that takes a value of x and returns the result of the polynomial evaluated at x.\n * @since 1.0.0\n */\nexport const toSolver: (p: LinearPolynomial) => (x: number) => number = internal.toSolver\n\nexport const solveInverse: {\n /**\n * Solves a linear polynomial for a given value of y.\n *\n * @param p - The linear polynomial to solve.\n * @param y - The value of y to solve for.\n * @returns The roots of the polynomial equation p(x) = y.\n * @since 1.0.0\n */\n (p: LinearPolynomial, y: number): ZeroOrOne\n /**\n * Solves a linear polynomial for a given value of y.\n *\n * @param y - The value of y to solve for.\n * @returns A function that takes a `LinearPolynomial` and returns the roots of the polynomial equation p(x) = y.\n * @since 1.0.0\n */\n (y: number): (p: LinearPolynomial) => ZeroOrOne\n} = internal.solveInverse\n\n/**\n * Converts a linear polynomial to an inverse solver function.\n *\n * @param p - The linear polynomial to convert.\n * @returns A function that takes a value of y and returns the roots of the polynomial equation p(x) = y.\n * @since 1.0.0\n */\nexport const toInverseSolver: (p: LinearPolynomial) => (y: number) => ZeroOrOne =\n internal.toInverseSolver\n\n/**\n * Finds the roots of a linear polynomial.\n *\n * @param p - The linear polynomial to find the roots of.\n * @returns The roots of the polynomial equation p(x) = 0.\n * @since 1.0.0\n */\nexport const root: (p: LinearPolynomial) => ZeroOrOne = (p) => internal.solveInverse(p, 0)\n\n/**\n * Calculates the monotonicity of a linear polynomial.\n *\n * @param p - The linear polynomial to check.\n * @returns The guaranteed monotonicity of the polynomial.\n * @since 1.0.0\n */\nexport const monotonicity: (p: LinearPolynomial) => GuaranteedMonotonicity = internal.monotonicity\n\n/**\n * Calculates the derivative of a linear polynomial.\n *\n * @param p - The linear polynomial to differentiate.\n * @returns The derivative of the linear polynomial.\n * @since 1.0.0\n */\nexport const derivative: (p: LinearPolynomial) => number = internal.derivative\n\nexport const antiderivative: {\n /**\n * Calculates the antiderivative of a linear polynomial.\n *\n * @param p - The linear polynomial to integrate.\n * @param constant - The constant of integration. Defaults to 0.\n * @returns The antiderivative of the linear polynomial.\n * @since 1.0.0\n */\n (p: LinearPolynomial, constant?: number): QuadraticPolynomial\n /**\n * Calculates the antiderivative of a linear polynomial.\n *\n * @param constant - The constant of integration. Defaults to 0.\n * @returns A function that takes a `LinearPolynomial` and returns the antiderivative of the polynomial.\n * @since 1.0.0\n */\n (constant: number): (p: LinearPolynomial) => QuadraticPolynomial\n} = internal.antiderivative\n\nexport const domain: {\n /**\n * Calculates the domain of a linear polynomial.\n *\n * @param p - The linear polynomial to check.\n * @param range - The range to check against.\n * @returns The domain of the polynomial within the given range.\n * @since 1.0.0\n */\n (p: LinearPolynomial, range: Interval): ZeroOrOne<Interval>\n /**\n * Calculates the domain of a linear polynomial.\n *\n * @param range - The range to check against.\n * @returns A function that takes a `LinearPolynomial` and returns the domain of the polynomial within the given range.\n * @since 1.0.0\n */\n (range: Interval): (p: LinearPolynomial) => ZeroOrOne<Interval>\n} = internal.domain\n\nexport const range: {\n /**\n * Calculates the range of a linear polynomial.\n *\n * @param p - The linear polynomial to check.\n * @param domain - The domain to check against.\n * @returns The range of the polynomial within the given domain.\n * @since 1.0.0\n */\n (p: LinearPolynomial, domain: Interval): Interval\n /**\n * Calculates the range of a linear polynomial.\n *\n * @param domain - The domain to check against.\n * @returns A function that takes a `LinearPolynomial` and returns the range of the polynomial within the given domain.\n * @since 1.0.0\n */\n (domain: Interval): (p: LinearPolynomial) => Interval\n} = internal.range\n\nexport const length: {\n /**\n * Calculates the length of a linear polynomial within a particular domain `Interval`.\n *\n * @param p - The linear polynomial to analyze.\n * @param domain - The domain to restrict the analysis to.\n * @returns The length of the linear polynomial in the specified domain.\n * @since 1.0.0\n */\n (p: LinearPolynomial, domain: Interval): number\n /**\n * Calculates the length of a linear polynomial within a particular domain `Interval`.\n *\n * @param domain - The domain to restrict the analysis to.\n * @returns A function that takes a `LinearPolynomial` and returns the length of the polynomial in the specified domain.\n * @since 1.0.0\n */\n (domain: Interval): (p: LinearPolynomial) => number\n} = internal.length\n"],"names":["internal.isLinearPolynomial","internal.make","internal.fromVector","internal.fromPointSlope","internal.fromPoints","internal.solve","internal.toSolver","internal.solveInverse","internal.toInverseSolver","internal.monotonicity","internal.derivative","internal.antiderivative","internal.domain","internal.range","internal.length"],"mappings":";;;;;AAqCO,MAAM,qBAA4DA;AAUlE,MAAM,OAAuDC;AAS7D,MAAM,aAA+CC;AAUrD,MAAM,iBACXC;AAUK,MAAM,aAA6DC;AAEnE,MAAM,QAkBTC;AASG,MAAM,WAA2DC;AAEjE,MAAM,eAkBTC;AASG,MAAM,kBACXC;AASK,MAAM,OAA2C,CAAC,CAAA,KAAMD,cAAS,CAAa,GAAG,CAAC;AASlF,MAAM,eAAgEE;AAStE,MAAM,aAA8CC;AAEpD,MAAM,iBAkBTC;AAEG,MAAM,SAkBTC;AAEG,MAAM,QAkBTC;AAEG,MAAM,SAkBTC;;;;"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import '../interval.mjs';
|
|
2
|
-
import '../pipe.mjs';
|
|
3
|
-
import '../vector/vector2.mjs';
|
|
4
|
-
import '../vector/vector3.mjs';
|
|
5
|
-
export { Q as QuadraticPolynomial, A as antiderivative, F as curvature, w as derivative, B as domain, y as extreme, o as fromVector, k as isQuadraticPolynomial, E as length, n as make, z as monotonicity, D as range, x as roots, p as solve, u as solveInverse, v as toInverseSolver, q as toSolver } from '../shared/curvy.FDaj5rlj.mjs';
|
|
6
|
-
import '../shared/curvy.Bf5TIk31.mjs';
|
|
7
|
-
import '../vector/vector4.mjs';
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import '../interval.js';
|
|
2
|
-
import '../pipe.js';
|
|
3
|
-
import '../vector/vector2.js';
|
|
4
|
-
import '../vector/vector3.js';
|
|
5
|
-
export { Q as QuadraticPolynomial, A as antiderivative, F as curvature, w as derivative, B as domain, y as extreme, o as fromVector, k as isQuadraticPolynomial, E as length, n as make, z as monotonicity, D as range, x as roots, p as solve, u as solveInverse, v as toInverseSolver, q as toSolver } from '../shared/curvy.Cg8lZVUz.js';
|
|
6
|
-
import '../shared/curvy.Bf5TIk31.js';
|
|
7
|
-
import '../vector/vector4.js';
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { i as isQuadraticPolynomial$1, m as make$1, f as fromVector$1, c as solve$1, t as toSolver$1, s as solveInverse$1, e as toInverseSolver$1, d as derivative$1, r as roots$1, h as extreme$1, b as monotonicity$1, j as antiderivative$1, k as domain$1, n as range$1, l as length$1, o as curvature$1 } from '../shared/curvy.BxdGW9he.mjs';
|
|
2
|
-
import '../interval.mjs';
|
|
3
|
-
import '../pipe.mjs';
|
|
4
|
-
import '../utils.mjs';
|
|
5
|
-
import '../vector/vector2.mjs';
|
|
6
|
-
import '../shared/curvy.DJ4xO0al.mjs';
|
|
7
|
-
import '../shared/curvy.r6f1j287.mjs';
|
|
8
|
-
|
|
9
|
-
const isQuadraticPolynomial = isQuadraticPolynomial$1;
|
|
10
|
-
const make = make$1;
|
|
11
|
-
const fromVector = fromVector$1;
|
|
12
|
-
const solve = solve$1;
|
|
13
|
-
const toSolver = toSolver$1;
|
|
14
|
-
const solveInverse = solveInverse$1;
|
|
15
|
-
const toInverseSolver = toInverseSolver$1;
|
|
16
|
-
const derivative = derivative$1;
|
|
17
|
-
const roots = roots$1;
|
|
18
|
-
const extreme = extreme$1;
|
|
19
|
-
const monotonicity = monotonicity$1;
|
|
20
|
-
const antiderivative = antiderivative$1;
|
|
21
|
-
const domain = domain$1;
|
|
22
|
-
const range = range$1;
|
|
23
|
-
const length = length$1;
|
|
24
|
-
const curvature = curvature$1;
|
|
25
|
-
|
|
26
|
-
export { antiderivative, curvature, derivative, domain, extreme, fromVector, isQuadraticPolynomial, length, make, monotonicity, range, roots, solve, solveInverse, toInverseSolver, toSolver };
|
|
27
|
-
//# sourceMappingURL=quadratic.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"quadratic.mjs","sources":["../../src/polynomial/quadratic.ts"],"sourcesContent":["import type { Interval } from '../interval'\nimport type { Pipeable } from '../pipe'\nimport type { Vector2 } from '../vector/vector2'\nimport type { Vector3 } from '../vector/vector3'\nimport type { CubicPolynomial } from './cubic'\nimport type { LinearPolynomial } from './linear'\nimport type { Monotonicity } from './monotonicity'\nimport * as internal from './quadratic.internal'\nimport type { QuadraticPolynomialTypeId } from './quadratic.internal.circular'\nimport type { ZeroOrOne, ZeroToTwo } from './types'\n\n/**\n * A quadratic polynomial.\n *\n * All fields are readonly and immutable, and all operations create new instances.\n *\n * @since 1.0.0\n */\nexport interface QuadraticPolynomial extends Pipeable {\n readonly [QuadraticPolynomialTypeId]: QuadraticPolynomialTypeId\n\n /**\n * The coefficient of the x^0 term.\n */\n readonly c0: number\n /**\n * The coefficient of the x^1 term.\n */\n readonly c1: number\n /**\n * The coefficient of the x^2 term.\n */\n readonly c2: number\n}\n\n/**\n * Checks if a value is a `QuadraticPolynomial`.\n *\n * @param v - The value to check.\n * @returns `true` if the value is a `QuadraticPolynomial`, `false` otherwise.\n * @since 1.0.0\n */\nexport const isQuadraticPolynomial: (v: unknown) => v is QuadraticPolynomial =\n internal.isQuadraticPolynomial\n\n/**\n * Creates a new `QuadraticPolynomial` instance.\n *\n * @param c0 - The coefficient of the x^0 term. Defaults to 0.\n * @param c1 - The coefficient of the x^1 term. Defaults to 0.\n * @param c2 - The coefficient of the x^2 term. Defaults to 1.\n * @returns A new `QuadraticPolynomial` instance.\n * @since 1.0.0\n */\nexport const make: (c0?: number, c1?: number, c2?: number) => QuadraticPolynomial = internal.make\n\n/**\n * Creates a new `QuadraticPolynomial` instance from a vector.\n *\n * @param v - The vector to create the polynomial from.\n * @returns A new `QuadraticPolynomial` instance.\n * @since 1.0.0\n */\nexport const fromVector: (v: Vector3) => QuadraticPolynomial = internal.fromVector\n\nexport const solve: {\n /**\n * Solves the quadratic polynomial for a given x value.\n *\n * @param p - The quadratic polynomial.\n * @param x - The x value to solve for.\n * @returns The result of the polynomial at the given x value.\n */\n (p: QuadraticPolynomial, x: number): number\n /**\n * Solves the quadratic polynomial for a given x value.\n *\n * @param x - The x value to solve for.\n * @returns A function that takes a quadratic polynomial and returns the result of the polynomial at the given x value.\n */\n (x: number): (p: QuadraticPolynomial) => number\n} = internal.solve\n\n/**\n * Creates a solver function for the quadratic polynomial.\n *\n * @param p - The quadratic polynomial.\n * @returns A function that takes an x value and returns the result of the polynomial at that x value.\n */\nexport const toSolver: (p: QuadraticPolynomial) => (x: number) => number = internal.toSolver\n\nexport const solveInverse: {\n /**\n * Solves the quadratic polynomial for a given y value.\n *\n * @param p - The quadratic polynomial.\n * @param y - The y value to solve for.\n * @returns The solutions to the polynomial at the given y value.\n */\n (p: QuadraticPolynomial, y: number): ZeroToTwo\n /**\n * Solves the quadratic polynomial for a given y value.\n *\n * @param y - The y value to solve for.\n * @returns A function that takes a quadratic polynomial and returns the solutions to the polynomial at the given y value.\n */\n (y: number): (p: QuadraticPolynomial) => ZeroToTwo\n} = internal.solveInverse\n\n/**\n * Creates an inverse solver function for the quadratic polynomial.\n *\n * @param p - The quadratic polynomial.\n * @returns A function that takes a y value and returns the solutions to the polynomial at that y value.\n */\nexport const toInverseSolver: (p: QuadraticPolynomial) => (y: number) => ZeroToTwo =\n internal.toInverseSolver\n\n/**\n * Computes the derivative of the quadratic polynomial.\n *\n * @param p - The quadratic polynomial.\n * @returns The derivative of the polynomial as a linear polynomial.\n * @since 1.0.0\n */\nexport const derivative: (p: QuadraticPolynomial) => LinearPolynomial = internal.derivative\n\n/**\n * Finds the roots of the quadratic polynomial.\n *\n * @param p - The quadratic polynomial.\n * @returns The roots of the polynomial as a tuple of solutions.\n * @since 1.0.0\n */\nexport const roots: (p: QuadraticPolynomial) => ZeroToTwo = internal.roots\n\n/**\n * Finds the extreme point of the quadratic polynomial.\n *\n * @param p - The quadratic polynomial.\n * @returns The extreme point of the polynomial as a solution.\n * @since 1.0.0\n */\nexport const extreme: (p: QuadraticPolynomial) => ZeroOrOne<Vector2> = internal.extreme\n\nexport const monotonicity: {\n /**\n * Computes the monotonicity of the quadratic polynomial over a given interval.\n *\n * @param p - The quadratic polynomial.\n * @param i - The interval to compute the monotonicity over.\n * @returns The monotonicity of the polynomial over the interval.\n */\n (p: QuadraticPolynomial, i?: Interval): Monotonicity\n /**\n * Computes the monotonicity of the quadratic polynomial over a given interval.\n *\n * @param i - The interval to compute the monotonicity over.\n * @returns A function that takes a quadratic polynomial and returns the monotonicity of the polynomial over the interval.\n */\n (i: Interval): (p: QuadraticPolynomial) => Monotonicity\n} = internal.monotonicity\n\nexport const antiderivative: {\n /**\n * Computes the antiderivative of the quadratic polynomial.\n *\n * @param p - The quadratic polynomial.\n * @param constant - The constant of integration. Defaults to 0.\n * @returns The antiderivative of the polynomial as a cubic polynomial.\n */\n (p: QuadraticPolynomial, constant?: number): CubicPolynomial\n /**\n * Computes the antiderivative of the quadratic polynomial.\n *\n * @param constant - The constant of integration. Defaults to 0.\n * @returns A function that takes a quadratic polynomial and returns the antiderivative of the polynomial as a cubic polynomial.\n */\n (constant: number): (p: QuadraticPolynomial) => CubicPolynomial\n} = internal.antiderivative\n\nexport const domain: {\n /**\n * Computes the domain of the quadratic polynomial over a given range.\n *\n * @param p - The quadratic polynomial.\n * @param range - The range to compute the domain over.\n * @returns The domain of the polynomial over the range.\n */\n (p: QuadraticPolynomial, range: Interval): Interval | null\n /**\n * Computes the domain of the quadratic polynomial over a given range.\n *\n * @param range - The range to compute the domain over.\n * @returns A function that takes a quadratic polynomial and returns the domain of the polynomial over the range.\n */\n (range: Interval): (p: QuadraticPolynomial) => Interval | null\n} = internal.domain\n\nexport const range: {\n /**\n * Computes the range of the quadratic polynomial over a given domain.\n *\n * @param p - The quadratic polynomial.\n * @param domain - The domain to compute the range over.\n * @returns The range of the polynomial over the domain.\n */\n (p: QuadraticPolynomial, domain: Interval): Interval\n /**\n * Computes the range of the quadratic polynomial over a given domain.\n *\n * @param domain - The domain to compute the range over.\n * @returns A function that takes a quadratic polynomial and returns the range of the polynomial over the domain.\n */\n (domain: Interval): (p: QuadraticPolynomial) => Interval\n} = internal.range\n\nexport const length: {\n /**\n * Computes the length of the quadratic polynomial over a given interval.\n *\n * @param p - The quadratic polynomial.\n * @param i - The interval to compute the length over.\n * @returns The length of the polynomial over the interval.\n */\n (p: QuadraticPolynomial, i: Interval): number\n /**\n * Computes the length of the quadratic polynomial over a given interval.\n *\n * @param i - The interval to compute the length over.\n * @returns A function that takes a quadratic polynomial and returns the length of the polynomial over the interval.\n */\n (i: Interval): (p: QuadraticPolynomial) => number\n} = internal.length\n\nexport const curvature: {\n /**\n * Computes the curvature of the quadratic polynomial at a given x value.\n *\n * @param p - The quadratic polynomial.\n * @param x - The x value to compute the curvature at.\n * @returns The curvature of the polynomial at the given x value.\n */\n (p: QuadraticPolynomial, x: number): number\n /**\n * Computes the curvature of the quadratic polynomial at a given x value.\n *\n * @param x - The x value to compute the curvature at.\n * @returns A function that takes a quadratic polynomial and returns the curvature of the polynomial at the given x value.\n */\n (x: number): (p: QuadraticPolynomial) => number\n} = internal.curvature\n"],"names":["internal.isQuadraticPolynomial","internal.make","internal.fromVector","internal.solve","internal.toSolver","internal.solveInverse","internal.toInverseSolver","internal.derivative","internal.roots","internal.extreme","internal.monotonicity","internal.antiderivative","internal.domain","internal.range","internal.length","internal.curvature"],"mappings":";;;;;;;;AA0CO,MAAM,wBACXA;AAWK,MAAM,OAAuEC;AAS7E,MAAM,aAAkDC;AAExD,MAAM,QAgBTC;AAQG,MAAM,WAA8DC;AAEpE,MAAM,eAgBTC;AAQG,MAAM,kBACXC;AASK,MAAM,aAA2DC;AASjE,MAAM,QAA+CC;AASrD,MAAM,UAA0DC;AAEhE,MAAM,eAgBTC;AAEG,MAAM,iBAgBTC;AAEG,MAAM,SAgBTC;AAEG,MAAM,QAgBTC;AAEG,MAAM,SAgBTC;AAEG,MAAM,YAgBTC;;;;"}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
type TwoDimensionalIndex = 0 | 1;
|
|
2
|
-
type TwoDimensionalComponent = 'x' | 'y';
|
|
3
|
-
interface TwoDimensional<T> {
|
|
4
|
-
readonly x: T;
|
|
5
|
-
readonly y: T;
|
|
6
|
-
readonly 0: T;
|
|
7
|
-
readonly 1: T;
|
|
8
|
-
}
|
|
9
|
-
type ThreeDimensionalIndex = TwoDimensionalIndex | 2;
|
|
10
|
-
type ThreeDimensionalComponent = TwoDimensionalComponent | 'z';
|
|
11
|
-
interface ThreeDimensional<T> extends TwoDimensional<T> {
|
|
12
|
-
readonly z: T;
|
|
13
|
-
readonly 2: T;
|
|
14
|
-
}
|
|
15
|
-
type FourDimensionalIndex = ThreeDimensionalIndex | 3;
|
|
16
|
-
type FourDimensionalComponent = ThreeDimensionalComponent | 'w';
|
|
17
|
-
interface FourDimensional<T> extends ThreeDimensional<T> {
|
|
18
|
-
readonly w: T;
|
|
19
|
-
readonly 3: T;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type { FourDimensionalIndex as F, TwoDimensional as T, FourDimensionalComponent as a, ThreeDimensionalIndex as b, ThreeDimensionalComponent as c, TwoDimensionalIndex as d, TwoDimensionalComponent as e, FourDimensional as f, ThreeDimensional as g };
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
type TwoDimensionalIndex = 0 | 1;
|
|
2
|
-
type TwoDimensionalComponent = 'x' | 'y';
|
|
3
|
-
interface TwoDimensional<T> {
|
|
4
|
-
readonly x: T;
|
|
5
|
-
readonly y: T;
|
|
6
|
-
readonly 0: T;
|
|
7
|
-
readonly 1: T;
|
|
8
|
-
}
|
|
9
|
-
type ThreeDimensionalIndex = TwoDimensionalIndex | 2;
|
|
10
|
-
type ThreeDimensionalComponent = TwoDimensionalComponent | 'z';
|
|
11
|
-
interface ThreeDimensional<T> extends TwoDimensional<T> {
|
|
12
|
-
readonly z: T;
|
|
13
|
-
readonly 2: T;
|
|
14
|
-
}
|
|
15
|
-
type FourDimensionalIndex = ThreeDimensionalIndex | 3;
|
|
16
|
-
type FourDimensionalComponent = ThreeDimensionalComponent | 'w';
|
|
17
|
-
interface FourDimensional<T> extends ThreeDimensional<T> {
|
|
18
|
-
readonly w: T;
|
|
19
|
-
readonly 3: T;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export type { FourDimensionalIndex as F, TwoDimensional as T, FourDimensionalComponent as a, ThreeDimensionalIndex as b, ThreeDimensionalComponent as c, TwoDimensionalIndex as d, TwoDimensionalComponent as e, FourDimensional as f, ThreeDimensional as g };
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
import { invariant, round } from '../utils.mjs';
|
|
2
|
-
import { dual, Pipeable } from '../pipe.mjs';
|
|
3
|
-
import { m as make$1, d as dot } from './curvy.DJ4xO0al.mjs';
|
|
4
|
-
|
|
5
|
-
function toIndex(input) {
|
|
6
|
-
if (typeof input === "number") {
|
|
7
|
-
invariant(input >= 0 && input <= 3, "Index out of bounds");
|
|
8
|
-
return input;
|
|
9
|
-
}
|
|
10
|
-
if (input === "x") {
|
|
11
|
-
return 0;
|
|
12
|
-
}
|
|
13
|
-
if (input === "y") {
|
|
14
|
-
return 1;
|
|
15
|
-
}
|
|
16
|
-
if (input === "z") {
|
|
17
|
-
return 2;
|
|
18
|
-
}
|
|
19
|
-
if (input === "w") {
|
|
20
|
-
return 3;
|
|
21
|
-
}
|
|
22
|
-
invariant(false, "Invalid component");
|
|
23
|
-
}
|
|
24
|
-
const toTwoDimensionalIndex = toIndex;
|
|
25
|
-
const toThreeDimensionalIndex = toIndex;
|
|
26
|
-
const toFourDimensionalIndex = toIndex;
|
|
27
|
-
|
|
28
|
-
var _a;
|
|
29
|
-
const Matrix2x2TypeId = Symbol.for("curvy/matrix2x2");
|
|
30
|
-
class Matrix2x2Impl extends Pipeable {
|
|
31
|
-
constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {
|
|
32
|
-
super();
|
|
33
|
-
this[_a] = Matrix2x2TypeId;
|
|
34
|
-
this.m00 = round(m00);
|
|
35
|
-
this.m01 = round(m01);
|
|
36
|
-
this.m10 = round(m10);
|
|
37
|
-
this.m11 = round(m11);
|
|
38
|
-
}
|
|
39
|
-
get [(_a = Matrix2x2TypeId, Symbol.toStringTag)]() {
|
|
40
|
-
return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
|
|
41
|
-
}
|
|
42
|
-
get [Symbol.for("nodejs.util.inspect.custom")]() {
|
|
43
|
-
return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`;
|
|
44
|
-
}
|
|
45
|
-
[Symbol.hasInstance](m) {
|
|
46
|
-
return isMatrix2x2(m);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
const isMatrix2x2 = (m) => typeof m === "object" && m !== null && Matrix2x2TypeId in m;
|
|
50
|
-
const make = (m00 = 0, m01 = m00, m10 = m01, m11 = m10) => new Matrix2x2Impl(m00, m01, m10, m11);
|
|
51
|
-
const fromRows = (v0, v1) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y);
|
|
52
|
-
const fromColumns = (v0, v1) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y);
|
|
53
|
-
const setRow = dual(
|
|
54
|
-
3,
|
|
55
|
-
(m, row, v) => fromRows(...toRows(m).with(toTwoDimensionalIndex(row), v))
|
|
56
|
-
);
|
|
57
|
-
const setColumn = dual(
|
|
58
|
-
3,
|
|
59
|
-
(m, column, v) => fromColumns(...toColumns(m).with(toTwoDimensionalIndex(column), v))
|
|
60
|
-
);
|
|
61
|
-
const determinant = (m) => round(m.m00 * m.m11 - m.m01 * m.m10);
|
|
62
|
-
const vectorProductLeft = dual(
|
|
63
|
-
2,
|
|
64
|
-
(m, v) => make$1(dot(rowVector(m, 0), v), dot(rowVector(m, 1), v))
|
|
65
|
-
);
|
|
66
|
-
const vectorProductRight = dual(
|
|
67
|
-
2,
|
|
68
|
-
(m, v) => make$1(dot(columnVector(m, 0), v), dot(columnVector(m, 1), v))
|
|
69
|
-
);
|
|
70
|
-
const solveSystem = dual(2, (m, v) => {
|
|
71
|
-
const inverseDeterminant = 1 / determinant(m);
|
|
72
|
-
invariant(
|
|
73
|
-
Number.isFinite(inverseDeterminant),
|
|
74
|
-
"cannot solve system when coefficient matrix determinant is zero"
|
|
75
|
-
);
|
|
76
|
-
return make$1(
|
|
77
|
-
determinant(setColumn(m, 0, v)) * inverseDeterminant,
|
|
78
|
-
determinant(setColumn(m, 1, v)) * inverseDeterminant
|
|
79
|
-
);
|
|
80
|
-
});
|
|
81
|
-
const toRows = (m) => [
|
|
82
|
-
make$1(m.m00, m.m01),
|
|
83
|
-
make$1(m.m10, m.m11)
|
|
84
|
-
];
|
|
85
|
-
const toColumns = (m) => [
|
|
86
|
-
make$1(m.m00, m.m10),
|
|
87
|
-
make$1(m.m01, m.m11)
|
|
88
|
-
];
|
|
89
|
-
const rowVector = dual(2, (m, row) => toRows(m)[toTwoDimensionalIndex(row)]);
|
|
90
|
-
const columnVector = dual(2, (m, column) => toColumns(m)[toTwoDimensionalIndex(column)]);
|
|
91
|
-
const transpose = (m) => fromColumns(...toRows(m));
|
|
92
|
-
const reverseRows = (m) => {
|
|
93
|
-
const [r0, r1] = toRows(m);
|
|
94
|
-
return fromRows(r1, r0);
|
|
95
|
-
};
|
|
96
|
-
const reverseColumns = (m) => {
|
|
97
|
-
const [c0, c1] = toColumns(m);
|
|
98
|
-
return fromColumns(c1, c0);
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export { fromColumns as a, setColumn as b, vectorProductRight as c, determinant as d, solveSystem as e, fromRows as f, toColumns as g, columnVector as h, isMatrix2x2 as i, transpose as j, reverseRows as k, reverseColumns as l, make as m, toFourDimensionalIndex as n, toThreeDimensionalIndex as o, rowVector as r, setRow as s, toRows as t, vectorProductLeft as v };
|
|
102
|
-
//# sourceMappingURL=curvy.BkkW8Tx9.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"curvy.BkkW8Tx9.mjs","sources":["../../src/dimensions.ts","../../src/matrix/matrix2x2.internal.ts"],"sourcesContent":["import { invariant } from './utils'\n\nexport type TwoDimensionalIndex = 0 | 1\nexport type TwoDimensionalComponent = 'x' | 'y'\n\nexport interface TwoDimensional<T> {\n readonly x: T\n readonly y: T\n\n readonly 0: T\n readonly 1: T\n}\n\nexport type ThreeDimensionalIndex = TwoDimensionalIndex | 2\nexport type ThreeDimensionalComponent = TwoDimensionalComponent | 'z'\n\nexport interface ThreeDimensional<T> extends TwoDimensional<T> {\n readonly z: T\n readonly 2: T\n}\n\nexport type FourDimensionalIndex = ThreeDimensionalIndex | 3\nexport type FourDimensionalComponent = ThreeDimensionalComponent | 'w'\n\nexport interface FourDimensional<T> extends ThreeDimensional<T> {\n readonly w: T\n readonly 3: T\n}\n\nfunction toIndex(input: string | number): number {\n if (typeof input === 'number') {\n invariant(input >= 0 && input <= 3, 'Index out of bounds')\n\n return input\n }\n\n if (input === 'x') {\n return 0\n }\n\n if (input === 'y') {\n return 1\n }\n\n if (input === 'z') {\n return 2\n }\n\n if (input === 'w') {\n return 3\n }\n\n invariant(false, 'Invalid component')\n}\n\nexport const toTwoDimensionalIndex = toIndex as (\n input: TwoDimensionalIndex | TwoDimensionalComponent,\n) => TwoDimensionalIndex\nexport const toThreeDimensionalIndex = toIndex as (\n input: ThreeDimensionalIndex | ThreeDimensionalComponent,\n) => ThreeDimensionalIndex\nexport const toFourDimensionalIndex = toIndex as (\n input: FourDimensionalIndex | FourDimensionalComponent,\n) => FourDimensionalIndex\n","import { toTwoDimensionalIndex } from '../dimensions'\nimport { Pipeable } from '../pipe'\nimport { dual } from '../pipe'\nimport { invariant, round } from '../utils'\nimport type { Vector2 } from '../vector/vector2'\nimport * as vector2 from '../vector/vector2.internal'\nimport type { Matrix2x2, Matrix2x2Coordinate } from './matrix2x2'\n\nexport const Matrix2x2TypeId: unique symbol = Symbol.for('curvy/matrix2x2')\nexport type Matrix2x2TypeId = typeof Matrix2x2TypeId\n\nclass Matrix2x2Impl extends Pipeable implements Matrix2x2 {\n readonly [Matrix2x2TypeId]: Matrix2x2TypeId = Matrix2x2TypeId\n\n readonly m00: number\n readonly m01: number\n\n readonly m10: number\n readonly m11: number\n\n constructor(m00 = 0, m01 = 0, m10 = 0, m11 = 0) {\n super()\n this.m00 = round(m00)\n this.m01 = round(m01)\n this.m10 = round(m10)\n this.m11 = round(m11)\n }\n\n get [Symbol.toStringTag]() {\n return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`\n }\n\n get [Symbol.for('nodejs.util.inspect.custom')]() {\n return `Matrix2x2(${this.m00}, ${this.m01}, ${this.m10}, ${this.m11})`\n }\n\n [Symbol.hasInstance](m: unknown): m is Matrix2x2 {\n return isMatrix2x2(m)\n }\n}\n\nexport const isMatrix2x2 = (m: unknown): m is Matrix2x2 =>\n typeof m === 'object' && m !== null && Matrix2x2TypeId in m\n\nexport const make = (m00 = 0, m01 = m00, m10 = m01, m11 = m10) =>\n new Matrix2x2Impl(m00, m01, m10, m11)\n\nexport const fromRows = (v0: Vector2, v1: Vector2) => new Matrix2x2Impl(v0.x, v0.y, v1.x, v1.y)\n\nexport const fromColumns = (v0: Vector2, v1: Vector2) => new Matrix2x2Impl(v0.x, v1.x, v0.y, v1.y)\n\nexport const setRow = dual<\n (row: Matrix2x2Coordinate, v: Vector2) => (m: Matrix2x2) => Matrix2x2,\n (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2) => Matrix2x2\n>(3, (m: Matrix2x2, row: Matrix2x2Coordinate, v: Vector2) =>\n fromRows(...(toRows(m).with(toTwoDimensionalIndex(row), v) as [Vector2, Vector2])),\n)\n\nexport const setColumn = dual<\n (column: Matrix2x2Coordinate, v: Vector2) => (m: Matrix2x2) => Matrix2x2,\n (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2) => Matrix2x2\n>(3, (m: Matrix2x2, column: Matrix2x2Coordinate, v: Vector2) =>\n fromColumns(...(toColumns(m).with(toTwoDimensionalIndex(column), v) as [Vector2, Vector2])),\n)\n\nexport const determinant = (m: Matrix2x2): number => round(m.m00 * m.m11 - m.m01 * m.m10)\n\n// (a: Vector2, b: Vector2) => a.x * b.x + a.y * b.y\n\n/*\n * {\n * x: first row dot v -> fr.x\n * y: second row dot v\n * }\n * */\n\nexport const vectorProductLeft = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) =>\n vector2.make(vector2.dot(rowVector(m, 0), v), vector2.dot(rowVector(m, 1), v)),\n)\n\nexport const vectorProductRight = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) =>\n vector2.make(vector2.dot(columnVector(m, 0), v), vector2.dot(columnVector(m, 1), v)),\n)\n\nexport const solveSystem = dual<\n (v: Vector2) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, v: Vector2) => Vector2\n>(2, (m: Matrix2x2, v: Vector2) => {\n const inverseDeterminant = 1 / determinant(m)\n\n invariant(\n Number.isFinite(inverseDeterminant),\n 'cannot solve system when coefficient matrix determinant is zero',\n )\n\n return vector2.make(\n determinant(setColumn(m, 0, v)) * inverseDeterminant,\n determinant(setColumn(m, 1, v)) * inverseDeterminant,\n )\n})\n\nexport const toRows = (m: Matrix2x2): [Vector2, Vector2] => [\n vector2.make(m.m00, m.m01),\n vector2.make(m.m10, m.m11),\n]\n\nexport const toColumns = (m: Matrix2x2): [Vector2, Vector2] => [\n vector2.make(m.m00, m.m10),\n vector2.make(m.m01, m.m11),\n]\n\nexport const rowVector = dual<\n (row: Matrix2x2Coordinate) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, row: Matrix2x2Coordinate) => Vector2\n>(2, (m: Matrix2x2, row: Matrix2x2Coordinate) => toRows(m)[toTwoDimensionalIndex(row)])\n\nexport const columnVector = dual<\n (column: Matrix2x2Coordinate) => (m: Matrix2x2) => Vector2,\n (m: Matrix2x2, column: Matrix2x2Coordinate) => Vector2\n>(2, (m: Matrix2x2, column: Matrix2x2Coordinate) => toColumns(m)[toTwoDimensionalIndex(column)])\n\nexport const transpose = (m: Matrix2x2) => fromColumns(...toRows(m))\n\nexport const reverseRows = (m: Matrix2x2) => {\n const [r0, r1] = toRows(m)\n return fromRows(r1, r0)\n}\n\nexport const reverseColumns = (m: Matrix2x2) => {\n const [c0, c1] = toColumns(m)\n return fromColumns(c1, c0)\n}\n"],"names":["vector2.make","vector2.dot"],"mappings":"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"}
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { size, contains, fromMinMax } from '../interval.mjs';
|
|
2
|
-
import { Pipeable, dual } from '../pipe.mjs';
|
|
3
|
-
import { round } from '../utils.mjs';
|
|
4
|
-
import { make as make$2 } from '../vector/vector2.mjs';
|
|
5
|
-
import { Q as QuadraticPolynomialImpl, a as make$1, b as QuadraticPolynomialTypeId, c as solveInverse$1, m as monotonicity$1, r as range$1, l as length$1, s as solve$1 } from './curvy.r6f1j287.mjs';
|
|
6
|
-
|
|
7
|
-
var _a, _b;
|
|
8
|
-
const CubicPolynomialTypeId = Symbol.for("curvy/polynomial/cubic");
|
|
9
|
-
class CubicPolynomialImpl extends (_b = Pipeable, _a = CubicPolynomialTypeId, _b) {
|
|
10
|
-
constructor(c0 = 0, c1 = 0, c2 = 0, c3 = 0) {
|
|
11
|
-
super();
|
|
12
|
-
this[_a] = CubicPolynomialTypeId;
|
|
13
|
-
this.c0 = round(c0);
|
|
14
|
-
this.c1 = round(c1);
|
|
15
|
-
this.c2 = round(c2);
|
|
16
|
-
this.c3 = round(c3);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
function guaranteedMonotonicityFromComparison(s0, s1) {
|
|
21
|
-
if (s0 < s1) {
|
|
22
|
-
return "increasing";
|
|
23
|
-
}
|
|
24
|
-
if (s0 > s1) {
|
|
25
|
-
return "decreasing";
|
|
26
|
-
}
|
|
27
|
-
return "constant";
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const make = (c0 = 0, c1 = 0, c2 = 0) => new QuadraticPolynomialImpl(c0, c1, c2);
|
|
31
|
-
const isQuadraticPolynomial = (v) => typeof v === "object" && v !== null && QuadraticPolynomialTypeId in v;
|
|
32
|
-
const fromVector = (v) => new QuadraticPolynomialImpl(v.x, v.y, v.z);
|
|
33
|
-
const solve = dual(2, (p, x) => round(p.c0 + x * p.c1 + x ** 2 * p.c2));
|
|
34
|
-
const toSolver = (p) => (x) => solve(p, x);
|
|
35
|
-
const solveInverse = dual(2, (p, y) => {
|
|
36
|
-
const discriminant = p.c1 ** 2 - 4 * p.c2 * (p.c0 - y);
|
|
37
|
-
if (discriminant < 0) {
|
|
38
|
-
return [];
|
|
39
|
-
}
|
|
40
|
-
if (discriminant === 0) {
|
|
41
|
-
return [round(-p.c1 / (2 * p.c2))];
|
|
42
|
-
}
|
|
43
|
-
const sqrtDiscriminant = Math.sqrt(discriminant);
|
|
44
|
-
return [
|
|
45
|
-
round((-p.c1 + sqrtDiscriminant) / (2 * p.c2)),
|
|
46
|
-
round((-p.c1 - sqrtDiscriminant) / (2 * p.c2))
|
|
47
|
-
].toSorted((a, b) => a - b);
|
|
48
|
-
});
|
|
49
|
-
const toInverseSolver = (p) => (y) => solveInverse(p, y);
|
|
50
|
-
const derivative = (p) => make$1(p.c1, p.c2 * 2);
|
|
51
|
-
const roots = (p) => solveInverse(p, 0);
|
|
52
|
-
const extreme = (p) => {
|
|
53
|
-
const result = derivative(p).pipe(solveInverse$1(0)) ?? (p.c2 === 0 ? null : 0);
|
|
54
|
-
return result === null ? null : make$2(result, solve(p, result));
|
|
55
|
-
};
|
|
56
|
-
const monotonicity = dual(
|
|
57
|
-
(args) => isQuadraticPolynomial(args[0]),
|
|
58
|
-
(p, i) => {
|
|
59
|
-
if (p.c2 === 0 && p.c1 === 0) {
|
|
60
|
-
return "constant";
|
|
61
|
-
}
|
|
62
|
-
if (p.c2 === 0) {
|
|
63
|
-
return monotonicity$1(make$1(p.c0, p.c1));
|
|
64
|
-
}
|
|
65
|
-
const e = extreme(p);
|
|
66
|
-
if (i && size(i) === 0) {
|
|
67
|
-
return "constant";
|
|
68
|
-
}
|
|
69
|
-
if (i === void 0 || contains(i, e.x, { includeStart: false, includeEnd: false })) {
|
|
70
|
-
return "none";
|
|
71
|
-
}
|
|
72
|
-
return guaranteedMonotonicityFromComparison(solve(p, i.start), solve(p, i.end));
|
|
73
|
-
}
|
|
74
|
-
);
|
|
75
|
-
const antiderivative = dual(
|
|
76
|
-
2,
|
|
77
|
-
(p, integrationConstant = 0) => new CubicPolynomialImpl(integrationConstant, p.c0, p.c1 / 2, p.c2 / 3)
|
|
78
|
-
);
|
|
79
|
-
const domain = dual(2, (p, range2) => {
|
|
80
|
-
const start = solveInverse(p, range2.start);
|
|
81
|
-
const end = solveInverse(p, range2.end);
|
|
82
|
-
if (start.length === 0 && end.length === 0) {
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
return fromMinMax(...solveInverse(p, range2.start), ...solveInverse(p, range2.end));
|
|
86
|
-
});
|
|
87
|
-
const range = dual(2, (p, domain2) => {
|
|
88
|
-
if (p.c2 === 0) {
|
|
89
|
-
return range$1(make$1(p.c0, p.c1), domain2);
|
|
90
|
-
}
|
|
91
|
-
const e = extreme(p);
|
|
92
|
-
return e !== null && contains(domain2, e.x) ? fromMinMax(solve(p, domain2.start), solve(p, domain2.end), e.y) : fromMinMax(solve(p, domain2.start), solve(p, domain2.end));
|
|
93
|
-
});
|
|
94
|
-
const length = dual(2, (p, domain2) => {
|
|
95
|
-
if (size(domain2) === 0) {
|
|
96
|
-
return 0;
|
|
97
|
-
}
|
|
98
|
-
if (p.c2 === 0) {
|
|
99
|
-
return length$1(make$1(p.c0, p.c1), domain2);
|
|
100
|
-
}
|
|
101
|
-
const d = derivative(p);
|
|
102
|
-
const derivativeStart = solve$1(d, domain2.start);
|
|
103
|
-
const sqrtStart = Math.sqrt(1 + derivativeStart ** 2);
|
|
104
|
-
const evalStart = (derivativeStart * sqrtStart + Math.log(Math.abs(derivativeStart + sqrtStart))) / (4 * p.c2);
|
|
105
|
-
const derivativeEnd = solve$1(d, domain2.end);
|
|
106
|
-
const sqrtEnd = Math.sqrt(1 + derivativeEnd ** 2);
|
|
107
|
-
const evalEnd = (derivativeEnd * sqrtEnd + Math.log(Math.abs(derivativeEnd + sqrtEnd))) / (4 * p.c2);
|
|
108
|
-
return round(evalEnd - evalStart);
|
|
109
|
-
});
|
|
110
|
-
const curvature = dual(
|
|
111
|
-
2,
|
|
112
|
-
(p, x) => round(Math.abs(2 * p.c2) / (1 + (solve$1(derivative(p), x) ** 2) ** 1.5))
|
|
113
|
-
);
|
|
114
|
-
|
|
115
|
-
export { CubicPolynomialImpl as C, CubicPolynomialTypeId as a, monotonicity as b, solve as c, derivative as d, toInverseSolver as e, fromVector as f, guaranteedMonotonicityFromComparison as g, extreme as h, isQuadraticPolynomial as i, antiderivative as j, domain as k, length as l, make as m, range as n, curvature as o, roots as r, solveInverse as s, toSolver as t };
|
|
116
|
-
//# sourceMappingURL=curvy.BxdGW9he.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"curvy.BxdGW9he.mjs","sources":["../../src/polynomial/cubic.internal.circular.ts","../../src/polynomial/monotonicity.ts","../../src/polynomial/quadratic.internal.ts"],"sourcesContent":["import { Pipeable } from '../pipe'\nimport { round } from '../utils'\nimport type { CubicPolynomial } from './cubic'\n\nexport const CubicPolynomialTypeId: unique symbol = Symbol.for('curvy/polynomial/cubic')\nexport type CubicPolynomialTypeId = typeof CubicPolynomialTypeId\n\nexport class CubicPolynomialImpl extends Pipeable implements CubicPolynomial {\n readonly [CubicPolynomialTypeId]: CubicPolynomialTypeId = CubicPolynomialTypeId\n\n readonly c0: number\n readonly c1: number\n readonly c2: number\n readonly c3: number\n\n constructor(c0 = 0, c1 = 0, c2 = 0, c3 = 0) {\n super()\n\n this.c0 = round(c0)\n this.c1 = round(c1)\n this.c2 = round(c2)\n this.c3 = round(c3)\n }\n}\n","export type Monotonicity = 'none' | 'increasing' | 'decreasing' | 'constant'\nexport type GuaranteedMonotonicity = 'increasing' | 'decreasing' | 'constant'\n\nexport function guaranteedMonotonicityFromComparison(\n s0: number,\n s1: number,\n): GuaranteedMonotonicity {\n if (s0 < s1) {\n return 'increasing'\n }\n\n if (s0 > s1) {\n return 'decreasing'\n }\n\n return 'constant'\n}\n","import * as Interval from '../interval'\nimport { dual } from '../pipe'\nimport { round } from '../utils'\nimport * as Vector2 from '../vector/vector2'\nimport type { Vector3 } from '../vector/vector3'\nimport type { CubicPolynomial } from './cubic'\nimport { CubicPolynomialImpl } from './cubic.internal.circular'\nimport * as Linear from './linear.internal'\nimport { type Monotonicity, guaranteedMonotonicityFromComparison } from './monotonicity'\nimport type { QuadraticPolynomial } from './quadratic'\nimport { QuadraticPolynomialImpl, QuadraticPolynomialTypeId } from './quadratic.internal.circular'\nimport type { ZeroToTwo } from './types'\n\nexport const make = (c0 = 0, c1 = 0, c2 = 0): QuadraticPolynomial =>\n new QuadraticPolynomialImpl(c0, c1, c2)\n\nexport const isQuadraticPolynomial = (v: unknown): v is QuadraticPolynomial =>\n typeof v === 'object' && v !== null && QuadraticPolynomialTypeId in v\n\nexport const fromVector = (v: Vector3) => new QuadraticPolynomialImpl(v.x, v.y, v.z)\n\nexport const solve = dual<\n (x: number) => (p: QuadraticPolynomial) => number,\n (p: QuadraticPolynomial, x: number) => number\n>(2, (p: QuadraticPolynomial, x: number) => round(p.c0 + x * p.c1 + x ** 2 * p.c2))\n\nexport const toSolver = (p: QuadraticPolynomial) => (x: number) => solve(p, x)\n\nexport const solveInverse: {\n (p: QuadraticPolynomial, y: number): ZeroToTwo\n (y: number): (p: QuadraticPolynomial) => ZeroToTwo\n} = dual<\n (y: number) => (p: QuadraticPolynomial) => ZeroToTwo,\n (p: QuadraticPolynomial, y: number) => ZeroToTwo\n>(2, (p: QuadraticPolynomial, y: number) => {\n const discriminant = p.c1 ** 2 - 4 * p.c2 * (p.c0 - y)\n\n if (discriminant < 0) {\n return [] as ZeroToTwo\n }\n\n if (discriminant === 0) {\n return [round(-p.c1 / (2 * p.c2))] as ZeroToTwo\n }\n\n const sqrtDiscriminant = Math.sqrt(discriminant)\n\n return [\n round((-p.c1 + sqrtDiscriminant) / (2 * p.c2)),\n round((-p.c1 - sqrtDiscriminant) / (2 * p.c2)),\n ].toSorted((a, b) => a - b) as unknown as ZeroToTwo\n})\n\nexport const toInverseSolver =\n (p: QuadraticPolynomial) =>\n (y: number): ZeroToTwo =>\n solveInverse(p, y)\n\nexport const derivative = (p: QuadraticPolynomial) => Linear.make(p.c1, p.c2 * 2)\n\nexport const roots = (p: QuadraticPolynomial) => solveInverse(p, 0)\n\nexport const extreme = (p: QuadraticPolynomial) => {\n const result = derivative(p).pipe(Linear.solveInverse(0)) ?? (p.c2 === 0 ? null : 0)\n\n return result === null ? null : Vector2.make(result, solve(p, result))\n}\n\nexport const monotonicity = dual<\n (i: Interval.Interval) => (p: QuadraticPolynomial) => Monotonicity,\n (p: QuadraticPolynomial, i?: Interval.Interval) => Monotonicity\n>(\n (args) => isQuadraticPolynomial(args[0]),\n (p: QuadraticPolynomial, i?: Interval.Interval) => {\n if (p.c2 === 0 && p.c1 === 0) {\n return 'constant'\n }\n\n if (p.c2 === 0) {\n return Linear.monotonicity(Linear.make(p.c0, p.c1))\n }\n\n // c2 is non-zero, so the extreme is guaranteed to be non-null\n const e = extreme(p) as Vector2.Vector2\n\n // if the interval is a single point, the monotonicity is constant\n if (i && Interval.size(i) === 0) {\n return 'constant'\n }\n\n // if there is no interval, or the extreme is within the interval,\n // the monotonicity is none\n if (i === undefined || Interval.contains(i, e.x, { includeStart: false, includeEnd: false })) {\n return 'none'\n }\n\n return guaranteedMonotonicityFromComparison(solve(p, i.start), solve(p, i.end))\n },\n)\n\nexport const antiderivative = dual<\n (integrationConstant: number) => (p: QuadraticPolynomial) => CubicPolynomial,\n (p: QuadraticPolynomial, integrationConstant?: number) => CubicPolynomial\n>(\n 2,\n (p: QuadraticPolynomial, integrationConstant = 0) =>\n new CubicPolynomialImpl(integrationConstant, p.c0, p.c1 / 2, p.c2 / 3),\n)\n\nexport const domain = dual<\n (range: Interval.Interval) => (p: QuadraticPolynomial) => Interval.Interval | null,\n (p: QuadraticPolynomial, range: Interval.Interval) => Interval.Interval | null\n>(2, (p: QuadraticPolynomial, range: Interval.Interval) => {\n const start = solveInverse(p, range.start)\n const end = solveInverse(p, range.end)\n\n if (start.length === 0 && end.length === 0) {\n return null\n }\n\n return Interval.fromMinMax(...solveInverse(p, range.start), ...solveInverse(p, range.end))\n})\n\nexport const range = dual<\n (domain: Interval.Interval) => (p: QuadraticPolynomial) => Interval.Interval,\n (p: QuadraticPolynomial, domain: Interval.Interval) => Interval.Interval\n>(2, (p: QuadraticPolynomial, domain: Interval.Interval) => {\n if (p.c2 === 0) {\n return Linear.range(Linear.make(p.c0, p.c1), domain)\n }\n\n const e = extreme(p)\n\n return e !== null && Interval.contains(domain, e.x)\n ? Interval.fromMinMax(solve(p, domain.start), solve(p, domain.end), e.y)\n : Interval.fromMinMax(solve(p, domain.start), solve(p, domain.end))\n})\n\nexport const length = dual<\n (domain: Interval.Interval) => (p: QuadraticPolynomial) => number,\n (p: QuadraticPolynomial, domain: Interval.Interval) => number\n>(2, (p: QuadraticPolynomial, domain: Interval.Interval) => {\n if (Interval.size(domain) === 0) {\n return 0\n }\n\n if (p.c2 === 0) {\n return Linear.length(Linear.make(p.c0, p.c1), domain)\n }\n\n const d = derivative(p)\n\n const derivativeStart = Linear.solve(d, domain.start)\n const sqrtStart = Math.sqrt(1 + derivativeStart ** 2)\n const evalStart =\n (derivativeStart * sqrtStart + Math.log(Math.abs(derivativeStart + sqrtStart))) / (4 * p.c2)\n\n const derivativeEnd = Linear.solve(d, domain.end)\n const sqrtEnd = Math.sqrt(1 + derivativeEnd ** 2)\n const evalEnd =\n (derivativeEnd * sqrtEnd + Math.log(Math.abs(derivativeEnd + sqrtEnd))) / (4 * p.c2)\n\n return round(evalEnd - evalStart)\n})\n\nexport const curvature = dual<\n (x: number) => (p: QuadraticPolynomial) => number,\n (p: QuadraticPolynomial, x: number) => number\n>(2, (p: QuadraticPolynomial, x: number) =>\n round(Math.abs(2 * p.c2) / (1 + (Linear.solve(derivative(p), x) ** 2) ** 1.5)),\n)\n"],"names":["Linear.make","Linear.solveInverse","Vector2.make","Linear.monotonicity","Interval.size","Interval.contains","range","Interval.fromMinMax","domain","Linear.range","Linear.length","Linear.solve"],"mappings":";;;;;;AAAA,IAAA,EAAA,EAAA,EAAA;AAIa,MAAA,qBAAA,GAAuC,MAAO,CAAA,GAAA,CAAI,wBAAwB;AAG1E,MAAA,mBAAA,UAA4B,EAC7B,GAAA,QAAA,EAAA,EAAA,GAAA,qBAAA,EAD6B,EAAoC,EAAA;AAAA,EAQ3E,WAAA,CAAY,KAAK,CAAG,EAAA,EAAA,GAAK,GAAG,EAAK,GAAA,CAAA,EAAG,KAAK,CAAG,EAAA;AAC1C,IAAM,KAAA,EAAA;AARR,IAAA,IAAA,CAAU,EAAgD,CAAA,GAAA,qBAAA;AAUxD,IAAK,IAAA,CAAA,EAAA,GAAK,MAAM,EAAE,CAAA;AAClB,IAAK,IAAA,CAAA,EAAA,GAAK,MAAM,EAAE,CAAA;AAClB,IAAK,IAAA,CAAA,EAAA,GAAK,MAAM,EAAE,CAAA;AAClB,IAAK,IAAA,CAAA,EAAA,GAAK,MAAM,EAAE,CAAA;AAAA;AAEtB;;ACpBgB,SAAA,oCAAA,CACd,IACA,EACwB,EAAA;AACxB,EAAA,IAAI,KAAK,EAAI,EAAA;AACX,IAAO,OAAA,YAAA;AAAA;AAGT,EAAA,IAAI,KAAK,EAAI,EAAA;AACX,IAAO,OAAA,YAAA;AAAA;AAGT,EAAO,OAAA,UAAA;AACT;;ACHO,MAAM,IAAO,GAAA,CAAC,EAAK,GAAA,CAAA,EAAG,EAAK,GAAA,CAAA,EAAG,EAAK,GAAA,CAAA,KACxC,IAAI,uBAAA,CAAwB,EAAI,EAAA,EAAA,EAAI,EAAE;AAE3B,MAAA,qBAAA,GAAwB,CAAC,CACpC,KAAA,OAAO,MAAM,QAAY,IAAA,CAAA,KAAM,QAAQ,yBAA6B,IAAA;AAEzD,MAAA,UAAA,GAAa,CAAC,CAAA,KAAe,IAAI,uBAAA,CAAwB,EAAE,CAAG,EAAA,CAAA,CAAE,CAAG,EAAA,CAAA,CAAE,CAAC;AAE5E,MAAM,QAAQ,IAGnB,CAAA,CAAA,EAAG,CAAC,CAAA,EAAwB,MAAc,KAAM,CAAA,CAAA,CAAE,EAAK,GAAA,CAAA,GAAI,EAAE,EAAK,GAAA,CAAA,IAAK,CAAI,GAAA,CAAA,CAAE,EAAE,CAAC;AAE3E,MAAM,WAAW,CAAC,CAAA,KAA2B,CAAC,CAAc,KAAA,KAAA,CAAM,GAAG,CAAC;AAEtE,MAAM,YAGT,GAAA,IAAA,CAGF,CAAG,EAAA,CAAC,GAAwB,CAAc,KAAA;AAC1C,EAAM,MAAA,YAAA,GAAe,EAAE,EAAM,IAAA,CAAA,GAAI,IAAI,CAAE,CAAA,EAAA,IAAM,EAAE,EAAK,GAAA,CAAA,CAAA;AAEpD,EAAA,IAAI,eAAe,CAAG,EAAA;AACpB,IAAA,OAAO,EAAC;AAAA;AAGV,EAAA,IAAI,iBAAiB,CAAG,EAAA;AACtB,IAAO,OAAA,CAAC,MAAM,CAAC,CAAA,CAAE,MAAM,CAAI,GAAA,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA;AAGnC,EAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,IAAA,CAAK,YAAY,CAAA;AAE/C,EAAO,OAAA;AAAA,IACL,OAAO,CAAC,CAAA,CAAE,KAAK,gBAAqB,KAAA,CAAA,GAAI,EAAE,EAAG,CAAA,CAAA;AAAA,IAC7C,OAAO,CAAC,CAAA,CAAE,KAAK,gBAAqB,KAAA,CAAA,GAAI,EAAE,EAAG,CAAA;AAAA,IAC7C,QAAS,CAAA,CAAC,CAAG,EAAA,CAAA,KAAM,IAAI,CAAC,CAAA;AAC5B,CAAC;AAEM,MAAM,kBACX,CAAC,CAAA,KACD,CAAC,CACC,KAAA,YAAA,CAAa,GAAG,CAAC;AAER,MAAA,UAAA,GAAa,CAAC,CAA2B,KAAAA,OAAY,CAAE,CAAA,EAAA,EAAI,CAAE,CAAA,EAAA,GAAK,CAAC;AAEzE,MAAM,KAAQ,GAAA,CAAC,CAA2B,KAAA,YAAA,CAAa,GAAG,CAAC;AAErD,MAAA,OAAA,GAAU,CAAC,CAA2B,KAAA;AACjD,EAAA,MAAM,MAAS,GAAA,UAAA,CAAW,CAAC,CAAA,CAAE,IAAK,CAAAC,cAAoB,CAAA,CAAC,CAAC,CAAA,KAAM,CAAE,CAAA,EAAA,KAAO,IAAI,IAAO,GAAA,CAAA,CAAA;AAElF,EAAO,OAAA,MAAA,KAAW,OAAO,IAAO,GAAAC,OAAa,MAAQ,EAAA,KAAA,CAAM,CAAG,EAAA,MAAM,CAAC,CAAA;AACvE;AAEO,MAAM,YAAe,GAAA,IAAA;AAAA,EAI1B,CAAC,IAAA,KAAS,qBAAsB,CAAA,IAAA,CAAK,CAAC,CAAC,CAAA;AAAA,EACvC,CAAC,GAAwB,CAA0B,KAAA;AACjD,IAAA,IAAI,CAAE,CAAA,EAAA,KAAO,CAAK,IAAA,CAAA,CAAE,OAAO,CAAG,EAAA;AAC5B,MAAO,OAAA,UAAA;AAAA;AAGT,IAAI,IAAA,CAAA,CAAE,OAAO,CAAG,EAAA;AACd,MAAO,OAAAC,eAAoBH,MAAO,CAAK,EAAE,EAAI,EAAA,CAAA,CAAE,EAAE,CAAC,CAAA;AAAA;AAIpD,IAAM,MAAA,CAAA,GAAI,QAAQ,CAAC,CAAA;AAGnB,IAAA,IAAI,CAAK,IAAAI,IAAc,CAAA,CAAC,MAAM,CAAG,EAAA;AAC/B,MAAO,OAAA,UAAA;AAAA;AAKT,IAAA,IAAI,CAAM,KAAA,MAAA,IAAaC,QAAS,CAAS,CAAG,EAAA,CAAA,CAAE,CAAG,EAAA,EAAE,YAAc,EAAA,KAAA,EAAO,UAAY,EAAA,KAAA,EAAO,CAAG,EAAA;AAC5F,MAAO,OAAA,MAAA;AAAA;AAGT,IAAO,OAAA,oCAAA,CAAqC,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,KAAK,GAAG,KAAM,CAAA,CAAA,EAAG,CAAE,CAAA,GAAG,CAAC,CAAA;AAAA;AAElF;AAEO,MAAM,cAAiB,GAAA,IAAA;AAAA,EAI5B,CAAA;AAAA,EACA,CAAC,CAAA,EAAwB,mBAAsB,GAAA,CAAA,KAC7C,IAAI,mBAAoB,CAAA,mBAAA,EAAqB,CAAE,CAAA,EAAA,EAAI,CAAE,CAAA,EAAA,GAAK,CAAG,EAAA,CAAA,CAAE,KAAK,CAAC;AACzE;AAEO,MAAM,MAAS,GAAA,IAAA,CAGpB,CAAG,EAAA,CAAC,GAAwBC,MAA6B,KAAA;AACzD,EAAA,MAAM,KAAQ,GAAA,YAAA,CAAa,CAAGA,EAAAA,MAAAA,CAAM,KAAK,CAAA;AACzC,EAAA,MAAM,GAAM,GAAA,YAAA,CAAa,CAAGA,EAAAA,MAAAA,CAAM,GAAG,CAAA;AAErC,EAAA,IAAI,KAAM,CAAA,MAAA,KAAW,CAAK,IAAA,GAAA,CAAI,WAAW,CAAG,EAAA;AAC1C,IAAO,OAAA,IAAA;AAAA;AAGT,EAAA,OAAOC,UAAS,CAAW,GAAG,YAAA,CAAa,CAAGD,EAAAA,MAAAA,CAAM,KAAK,CAAA,EAAG,GAAG,YAAA,CAAa,CAAGA,EAAAA,MAAAA,CAAM,GAAG,CAAC,CAAA;AAC3F,CAAC;AAEM,MAAM,KAAQ,GAAA,IAAA,CAGnB,CAAG,EAAA,CAAC,GAAwBE,OAA8B,KAAA;AAC1D,EAAI,IAAA,CAAA,CAAE,OAAO,CAAG,EAAA;AACd,IAAO,OAAAC,QAAaT,MAAO,CAAK,EAAE,EAAI,EAAA,CAAA,CAAE,EAAE,CAAA,EAAGQ,OAAM,CAAA;AAAA;AAGrD,EAAM,MAAA,CAAA,GAAI,QAAQ,CAAC,CAAA;AAEnB,EAAA,OAAO,CAAM,KAAA,IAAA,IAAQH,QAAS,CAASG,SAAQ,CAAE,CAAA,CAAC,CAC9C,GAAAD,WAAoB,KAAM,CAAA,CAAA,EAAGC,OAAO,CAAA,KAAK,GAAG,KAAM,CAAA,CAAA,EAAGA,OAAO,CAAA,GAAG,CAAG,EAAA,CAAA,CAAE,CAAC,CAAA,GACrED,UAAoB,CAAA,KAAA,CAAM,CAAGC,EAAAA,OAAAA,CAAO,KAAK,CAAG,EAAA,KAAA,CAAM,CAAGA,EAAAA,OAAAA,CAAO,GAAG,CAAC,CAAA;AACtE,CAAC;AAEM,MAAM,MAAS,GAAA,IAAA,CAGpB,CAAG,EAAA,CAAC,GAAwBA,OAA8B,KAAA;AAC1D,EAAA,IAAIJ,IAAS,CAAKI,OAAM,CAAA,KAAM,CAAG,EAAA;AAC/B,IAAO,OAAA,CAAA;AAAA;AAGT,EAAI,IAAA,CAAA,CAAE,OAAO,CAAG,EAAA;AACd,IAAO,OAAAE,SAAcV,MAAO,CAAK,EAAE,EAAI,EAAA,CAAA,CAAE,EAAE,CAAA,EAAGQ,OAAM,CAAA;AAAA;AAGtD,EAAM,MAAA,CAAA,GAAI,WAAW,CAAC,CAAA;AAEtB,EAAA,MAAM,eAAkB,GAAAG,OAAa,CAAA,CAAA,EAAGH,QAAO,KAAK,CAAA;AACpD,EAAA,MAAM,SAAY,GAAA,IAAA,CAAK,IAAK,CAAA,CAAA,GAAI,mBAAmB,CAAC,CAAA;AACpD,EAAA,MAAM,SACH,GAAA,CAAA,eAAA,GAAkB,SAAY,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,GAAI,CAAA,eAAA,GAAkB,SAAS,CAAC,CAAM,KAAA,CAAA,GAAI,CAAE,CAAA,EAAA,CAAA;AAE3F,EAAA,MAAM,aAAgB,GAAAG,OAAa,CAAA,CAAA,EAAGH,QAAO,GAAG,CAAA;AAChD,EAAA,MAAM,OAAU,GAAA,IAAA,CAAK,IAAK,CAAA,CAAA,GAAI,iBAAiB,CAAC,CAAA;AAChD,EAAA,MAAM,OACH,GAAA,CAAA,aAAA,GAAgB,OAAU,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,GAAI,CAAA,aAAA,GAAgB,OAAO,CAAC,CAAM,KAAA,CAAA,GAAI,CAAE,CAAA,EAAA,CAAA;AAEnF,EAAO,OAAA,KAAA,CAAM,UAAU,SAAS,CAAA;AAClC,CAAC;AAEM,MAAM,SAAY,GAAA,IAAA;AAAA,EAGvB,CAAA;AAAA,EAAG,CAAC,CAAwB,EAAA,CAAA,KAC5B,MAAM,IAAK,CAAA,GAAA,CAAI,IAAI,CAAE,CAAA,EAAE,KAAK,CAAK,GAAA,CAAAG,QAAa,UAAW,CAAA,CAAC,GAAG,CAAC,CAAA,IAAK,MAAM,GAAI,CAAA;AAC/E;;;;"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Pipeable, dual } from '../pipe.mjs';
|
|
2
|
-
import { round } from '../utils.mjs';
|
|
3
|
-
|
|
4
|
-
var _a;
|
|
5
|
-
const Vector4TypeId = Symbol.for("curvy/vector4");
|
|
6
|
-
class Vector4Impl extends Pipeable {
|
|
7
|
-
constructor(v0 = 0, v1 = 0, v2 = 0, v3 = 0) {
|
|
8
|
-
super();
|
|
9
|
-
this[_a] = Vector4TypeId;
|
|
10
|
-
this.x = round(v0);
|
|
11
|
-
this.y = round(v1);
|
|
12
|
-
this.z = round(v2);
|
|
13
|
-
this.w = round(v3);
|
|
14
|
-
}
|
|
15
|
-
get [0]() {
|
|
16
|
-
return this.x;
|
|
17
|
-
}
|
|
18
|
-
get [1]() {
|
|
19
|
-
return this.y;
|
|
20
|
-
}
|
|
21
|
-
get [2]() {
|
|
22
|
-
return this.z;
|
|
23
|
-
}
|
|
24
|
-
get [3]() {
|
|
25
|
-
return this.w;
|
|
26
|
-
}
|
|
27
|
-
get [(_a = Vector4TypeId, Symbol.toStringTag)]() {
|
|
28
|
-
return `Vector4(${this.x}, ${this.y}, ${this.z}, ${this.w})`;
|
|
29
|
-
}
|
|
30
|
-
get [Symbol.for("nodejs.util.inspect.custom")]() {
|
|
31
|
-
return this[Symbol.toStringTag];
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
const isVector4 = (v) => typeof v === "object" && v !== null && Vector4TypeId in v;
|
|
35
|
-
const make = (v0, v1 = v0, v2 = v1, v3 = v2) => new Vector4Impl(v0, v1, v2, v3);
|
|
36
|
-
const magnitude = (vector) => round(Math.hypot(vector.x, vector.y, vector.z, vector.w));
|
|
37
|
-
const normalize = (vector) => {
|
|
38
|
-
const m = magnitude(vector);
|
|
39
|
-
return make(vector.x / m, vector.y / m, vector.z / m, vector.w / m);
|
|
40
|
-
};
|
|
41
|
-
const dot = dual(
|
|
42
|
-
2,
|
|
43
|
-
(a, b) => round(a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w)
|
|
44
|
-
);
|
|
45
|
-
const components = (v) => [
|
|
46
|
-
v.x,
|
|
47
|
-
v.y,
|
|
48
|
-
v.z,
|
|
49
|
-
v.w
|
|
50
|
-
];
|
|
51
|
-
const softmax = (v) => {
|
|
52
|
-
const max = Math.max(v.x, v.y, v.z, v.w);
|
|
53
|
-
const v0 = Math.exp(v.x - max);
|
|
54
|
-
const v1 = Math.exp(v.y - max);
|
|
55
|
-
const v2 = Math.exp(v.z - max);
|
|
56
|
-
const v3 = Math.exp(v.w - max);
|
|
57
|
-
const sum = v0 + v1 + v2 + v3;
|
|
58
|
-
return make(v0 / sum, v1 / sum, v2 / sum, v3 / sum);
|
|
59
|
-
};
|
|
60
|
-
const add = dual(2, (a, b) => make(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w));
|
|
61
|
-
const subtract = dual(2, (a, b) => make(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w));
|
|
62
|
-
const hadamard = dual(2, (a, b) => make(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w));
|
|
63
|
-
const scale = dual(2, (v, s) => s === 1 ? v : make(v.x * s, v.y * s, v.z * s, v.w * s));
|
|
64
|
-
|
|
65
|
-
export { magnitude as a, add as b, components as c, dot as d, subtract as e, scale as f, hadamard as h, isVector4 as i, make as m, normalize as n, softmax as s };
|
|
66
|
-
//# sourceMappingURL=curvy.C_sCeg9J.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"curvy.C_sCeg9J.mjs","sources":["../../src/vector/vector4.internal.ts"],"sourcesContent":["import { Pipeable } from '../pipe'\nimport { dual } from '../pipe'\nimport { round } from '../utils'\nimport type { Vector4 } from './vector4'\n\nexport const Vector4TypeId: unique symbol = Symbol.for('curvy/vector4')\nexport type Vector4TypeId = typeof Vector4TypeId\n\nclass Vector4Impl extends Pipeable implements Vector4 {\n readonly [Vector4TypeId]: Vector4TypeId = Vector4TypeId\n\n readonly x: number\n readonly y: number\n readonly z: number\n readonly w: number\n\n constructor(v0 = 0, v1 = 0, v2 = 0, v3 = 0) {\n super()\n\n this.x = round(v0)\n this.y = round(v1)\n this.z = round(v2)\n this.w = round(v3)\n }\n\n get [0]() {\n return this.x\n }\n\n get [1]() {\n return this.y\n }\n\n get [2]() {\n return this.z\n }\n\n get [3]() {\n return this.w\n }\n\n get [Symbol.toStringTag]() {\n return `Vector4(${this.x}, ${this.y}, ${this.z}, ${this.w})`\n }\n\n get [Symbol.for('nodejs.util.inspect.custom')]() {\n return this[Symbol.toStringTag]\n }\n}\n\nexport const isVector4 = (v: unknown): v is Vector4 =>\n typeof v === 'object' && v !== null && Vector4TypeId in v\n\nexport const make = (v0: number, v1 = v0, v2 = v1, v3 = v2): Vector4 =>\n new Vector4Impl(v0, v1, v2, v3)\n\nexport const magnitude: (vector: Vector4) => number = (vector: Vector4) =>\n round(Math.hypot(vector.x, vector.y, vector.z, vector.w))\n\nexport const normalize: (vector: Vector4) => Vector4 = (vector: Vector4) => {\n const m = magnitude(vector)\n\n return make(vector.x / m, vector.y / m, vector.z / m, vector.w / m)\n}\n\nexport const dot = dual<(b: Vector4) => (a: Vector4) => number, (a: Vector4, b: Vector4) => number>(\n 2,\n (a: Vector4, b: Vector4) => round(a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w),\n)\n\nexport const components: (v: Vector4) => [number, number, number, number] = (v: Vector4) => [\n v.x,\n v.y,\n v.z,\n v.w,\n]\n\nexport const softmax: (v: Vector4) => Vector4 = (v: Vector4) => {\n const max = Math.max(v.x, v.y, v.z, v.w)\n\n const v0 = Math.exp(v.x - max)\n const v1 = Math.exp(v.y - max)\n const v2 = Math.exp(v.z - max)\n const v3 = Math.exp(v.w - max)\n\n const sum = v0 + v1 + v2 + v3\n\n return make(v0 / sum, v1 / sum, v2 / sum, v3 / sum)\n}\n\nexport const add = dual<\n (b: Vector4) => (a: Vector4) => Vector4,\n (a: Vector4, b: Vector4) => Vector4\n>(2, (a: Vector4, b: Vector4) => make(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w))\n\nexport const subtract = dual<\n (b: Vector4) => (a: Vector4) => Vector4,\n (a: Vector4, b: Vector4) => Vector4\n>(2, (a: Vector4, b: Vector4) => make(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w))\n\nexport const hadamard = dual<\n (b: Vector4) => (a: Vector4) => Vector4,\n (a: Vector4, b: Vector4) => Vector4\n>(2, (a: Vector4, b: Vector4) => make(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w))\nexport const scale = dual<\n (s: number) => (v: Vector4) => Vector4,\n (v: Vector4, s: number) => Vector4\n>(2, (v: Vector4, s: number) => (s === 1 ? v : make(v.x * s, v.y * s, v.z * s, v.w * s)))\n"],"names":[],"mappings":"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"}
|