@ntf/math 1.3.2 → 1.4.1

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/index.d.mts CHANGED
@@ -1,12 +1,6 @@
1
- declare function stringify<V>(value: V): string;
2
- interface IToString {
3
- /**
4
- * Returns a string representation of an object.
5
- */
6
- toString(): string;
7
- }
1
+ import { IToString, NodeJSCustomInspect, FixedArray } from '@ntf/types';
8
2
 
9
- interface IGeometryObject {
3
+ interface IGeometryObject extends IToString {
10
4
  readonly area: number;
11
5
  readonly perimeter: number;
12
6
  }
@@ -15,281 +9,46 @@ interface ISize {
15
9
  width: number;
16
10
  height: number;
17
11
  }
12
+ interface IToSize {
13
+ toSize(): SizeLike;
14
+ }
18
15
  type SizeArray = [number, number];
19
16
  type SizeString = `${number}x${number}`;
20
- type SizeLike = ISize | SizeArray | SizeString | number;
21
- type SizeArguments = [SizeLike] | [number, number];
22
- declare class Size implements ISize, IGeometryObject, IToString {
17
+ type SizeLike = ISize | SizeArray | SizeString | number | IToSize;
18
+ type SizeArguments = [size: SizeLike] | SizeArray;
19
+ declare class Size implements ISize, IGeometryObject, IToVec2 {
23
20
  width: number;
24
21
  height: number;
25
22
  get aspectRatio(): number;
26
23
  get area(): number;
27
24
  get perimeter(): number;
28
25
  static resolve(a: unknown): Size;
26
+ static resolveArgs(args: SizeArguments): Size;
29
27
  static cast(a: unknown): Size | undefined;
30
28
  static is(a: unknown): a is SizeLike;
31
29
  constructor(width: number, height: number);
32
30
  toArray(): SizeArray;
33
31
  toString(): SizeString;
32
+ get [Symbol.toStringTag](): string;
33
+ [NodeJSCustomInspect](): string;
34
34
  toJSON(): ISize;
35
35
  clone(): Size;
36
- equals(square: SizeLike): boolean;
37
- toVec2(): Vec2Like;
38
- }
39
-
40
- interface IVec3 extends IVec2 {
41
- z: number;
42
- }
43
- type Vec3Array = [number, number, number] | [number, number, number, number];
44
- type Vec3String = `${number},${number},${number}` | `${number},${number},${number};${number}`;
45
- type Vec3Like = IVec3 | Vec3Array | Vec3String | number;
46
- type Vec3Arguments = [Vec3Like] | [number, number, number];
47
- declare class Vec3 implements IVec3 {
48
- x: number;
49
- y: number;
50
- z: number;
51
- w: number;
52
- static resolve(a: unknown): Vec3;
53
- static cast(a: unknown): Vec3 | undefined;
54
- static resolveArgs(args: Vec3Arguments): Vec3;
55
- static is(a: unknown): a is Vec3Like;
56
- static fromPoints(a: Vec3Like, b: Vec3Like): Vec3;
57
- static clamp(value: Vec3Like, min: Vec3Like, max: Vec3Like): Vec3;
58
- static intersectPlane(planeP: Vec3Like, planeN: Vec3Like, lineStart: Vec3Like, lineEnd: Vec3Like, t: number): Vec3;
59
- constructor(x?: number, y?: number, z?: number, w?: number);
60
- toArray(w?: boolean): Vec3Array;
61
- toJSON(): IVec3;
62
- toString(w?: boolean): Vec3String;
36
+ equals(size: SizeLike): boolean;
37
+ equals(width: number, height: number): boolean;
63
38
  toVec2(): Vec2Like;
64
- clone(): Vec3;
65
- equals(vec: Vec3Like): boolean;
66
- setX(x: number): this;
67
- setY(y: number): this;
68
- setZ(z: number): this;
69
- set(x: number, y: number, z: number): this;
70
- set(vec: Vec3Like): this;
71
- add(x: number, y: number, z: number): Vec3;
72
- add(vec: Vec3Like): Vec3;
73
- offset(x: number, y: number, z: number): this;
74
- offset(vec: Vec3Like): this;
75
- subtract(x: number, y: number, z: number): Vec3;
76
- subtract(vec: Vec3Like): Vec3;
77
- multiply(scalar: number): Vec3;
78
- naiveMultiply(x: number, y: number, z: number): Vec3;
79
- naiveMultiply(vec: Vec3Like): Vec3;
80
- divide(x: number, y: number, z: number): Vec3;
81
- divide(scalar: number): Vec3;
82
- divide(vec: Vec3Like): Vec3;
83
- dot(x: number, y: number, z: number): number;
84
- dot(vec: Vec3Like): number;
85
- cross(x: number, y: number, z: number): Vec3;
86
- cross(vec: Vec3Like): Vec3;
87
- distance(x: number, y: number, z: number): number;
88
- distance(vec: Vec3Like): number;
89
- distanceSquare(x: number, y: number, z: number): number;
90
- distanceSquare(vec: Vec3Like): number;
91
- length(): number;
92
- normalize(): Vec3;
93
- invert(): Vec3;
94
- round(): Vec3;
95
- }
96
-
97
- interface IVec2 {
98
- x: number;
99
- y: number;
100
- w: number;
101
- }
102
- type Vec2Array = [number, number] | [number, number, number];
103
- type Vec2String = `${number},${number}` | `${number},${number};${number}`;
104
- type Vec2Like = IVec2 | Vec2Array | Vec2String | number;
105
- type Vec2Arguments = [Vec2Like] | [number, number];
106
- declare class Vec2 implements IVec2 {
107
- x: number;
108
- y: number;
109
- w: number;
110
- static resolve(a: unknown): Vec2;
111
- static cast(a: unknown): Vec2 | undefined;
112
- static resolveArgs(args: Vec2Arguments): Vec2;
113
- static is(a: unknown): a is Vec2Like;
114
- static fromPoints(a: Vec2Like, b: Vec2Like): Vec2;
115
- static clamp(value: Vec2Like, min: Vec2Like, max: Vec2Like): Vec2;
116
- constructor(x?: number, y?: number, w?: number);
117
- toArray(w?: boolean): Vec2Array;
118
- toJSON(): IVec2;
119
- toString(w?: boolean): Vec2String;
120
- toSquare(): Size;
121
- toVec3(z?: number): Vec3;
122
- clone(): Vec2;
123
- equals(vec: Vec2Like): boolean;
124
- setX(x: number): this;
125
- setY(y: number): this;
126
- setW(w: number): this;
127
- set(x: number, y: number): this;
128
- set(vec: Vec2Like): this;
129
- add(x: number, y: number): Vec2;
130
- add(vec: Vec2Like): Vec2;
131
- offset(x: number, y: number): this;
132
- offset(vec: Vec2Like): this;
133
- subtract(x: number, y: number): Vec2;
134
- subtract(vec: Vec2Like): Vec2;
135
- multiply(scalar: number): Vec2;
136
- naiveMultiply(x: number, y: number): Vec2;
137
- naiveMultiply(vec: Vec2Like): Vec2;
138
- divide(x: number, y: number): Vec2;
139
- divide(scalar: number): Vec2;
140
- divide(vec: Vec2Like): Vec2;
141
- dot(x: number, y: number): number;
142
- dot(vec: Vec2Like): number;
143
- distance(x: number, y: number): number;
144
- distance(vec: Vec2Like): number;
145
- distanceSquare(x: number, y: number): number;
146
- distanceSquare(vec: Vec2Like): number;
147
- length(): number;
148
- cartesianify(): Vec2;
149
- polarify(): Vec2;
150
- normalize(): Vec2;
151
- invert(): Vec2;
152
- round(): Vec2;
153
- }
154
-
155
- /**
156
- * An abstract class of a mathematical function
157
- * @template Input The amount of input values the function can use
158
- */
159
- declare abstract class MathFunction<Input extends Array<number> = Array<number>> implements IToString {
160
- /**
161
- * Calculate y with input values
162
- * @param args The input values
163
- * @returns The y value from the input values
164
- */
165
- abstract get(...args: Input): number;
166
- /**
167
- * Get the root points of this function
168
- * @returns The root points, this can be an empty array if no root points have been found
169
- */
170
- abstract roots(): Array<Vec2>;
171
- }
172
-
173
- /**
174
- * The string representation of a linear function
175
- */
176
- type LinearFunctionString = `f(x) = ${number} * x ${"+" | "-"} ${number}` | `f(x) = ${number} * x`;
177
- /**
178
- * A class that implements a linear function with `m`, `b` and `x`
179
- */
180
- declare class LinearFunction extends MathFunction<[number]> {
181
- /**
182
- * The factor of the linear function
183
- */
184
- m: number;
185
- /**
186
- * The height of the linear function
187
- */
188
- b: number;
189
- /**
190
- * Create a linear function from two points
191
- * @param a A point
192
- * @param b A point
193
- * @returns A linear function from two points
194
- */
195
- static fromPoints(a: Vec2Like, b: Vec2Like): LinearFunction;
196
- /**
197
- * Create a linear function with a factor and height
198
- * @param m The factor
199
- * @param b The height
200
- */
201
- constructor(m: number, b: number);
202
- get(x: number): number;
203
- roots(): Array<Vec2>;
204
- toString(): LinearFunctionString;
205
- }
206
-
207
- type QuadFunctionType = "standard";
208
- type QuadFunctionString = {
209
- "standard": `f(x) = ${number}x^2 ${"+" | "-"} ${number}x ${"+" | "-"} ${number}` | `f(x) = ${number}x^2 ${"+" | "-"} ${number}x` | `f(x) = ${number}x^2`;
210
- };
211
- type QuadFunctionStrings = QuadFunctionString[QuadFunctionType];
212
- declare class QuadFunction extends MathFunction<[number]> {
213
- a: number;
214
- b: number;
215
- c: number;
216
- static get(a: number, b: number, c: number, x: number): number;
217
- constructor(a: number, b: number, c: number);
218
- get(x: number): number;
219
- roots(): Array<Vec2>;
220
- toString<T extends QuadFunctionType>(type?: T): QuadFunctionString[T];
221
- }
222
-
223
- declare class ResolveError extends Error {
224
- readonly target: string;
225
- readonly value: unknown;
226
- constructor(target: string, value: unknown);
227
- }
228
-
229
- declare function sign_char(num: number | bigint): "-" | "+" | undefined;
230
-
231
- type JavaScriptTypes = "string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function";
232
- type JavaScriptTypeMap = {
233
- "string": string;
234
- "number": number;
235
- "bigint": bigint;
236
- "boolean": boolean;
237
- "symbol": symbol;
238
- "undefined": undefined;
239
- "object": object;
240
- "function": Function;
241
- };
242
- type HexDigit = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" | "A" | "B" | "C" | "D" | "E" | "F";
243
- type HexLike = `$${string}` | `#${string}` | `0x${string}` | string;
244
- type Predicate<T> = (a: unknown) => a is T;
245
- declare function check_number(obj: unknown): obj is number;
246
- declare function check_hex_digit(obj: unknown): obj is HexDigit;
247
- declare function get_hex_part(string: string): string;
248
- declare function check_hex(obj: unknown): obj is HexLike;
249
- declare function check_string(obj: unknown): obj is string;
250
- declare function check_array<T>(obj: unknown, predicate?: Predicate<T>, requiredLength?: number): obj is Array<T>;
251
- declare function check_number_array(obj: unknown, requiredLength?: number): obj is Array<number>;
252
- declare function check_string_array(obj: unknown, requiredLength?: number): obj is Array<string>;
253
- declare function has_property<Obj, Name extends string, Type extends JavaScriptTypes>(obj: Obj, name: Name, type: Type): obj is Obj & {
254
- [name in Name]: JavaScriptTypeMap[Type];
255
- };
256
-
257
- declare const DJB2_OFFSET = 5381n;
258
- declare function djb2<V>(value: V): bigint;
259
- declare const FNV1_OFFSET = 14695981039346656037n;
260
- declare const FNV1_PRIME = 1099511628211n;
261
- declare function fnv1<V>(value: V): bigint;
262
- declare function sdbm<V>(value: V): bigint;
263
- interface IHash {
264
- update(input: Uint8Array): this;
265
- digest(): Uint8Array;
266
- }
267
-
268
- declare class MD2 implements IHash {
269
- static readonly BLOCK_SIZE = 16;
270
- private _data;
271
- private _state;
272
- private _checksum;
273
- private _length;
274
- constructor();
275
- update(input: Uint8Array): this;
276
- private _transform;
277
- digest(): Uint8Array;
278
39
  }
279
40
 
280
- declare const MAX_ANGLE_DEGREE = 360;
281
- declare const cap_angle_degree: (angle: number) => number;
282
- declare const cap_angle_radian: (angle: number) => number;
283
- declare const radian_to_degree: (angle: number) => number;
284
- declare const degree_to_radian: (angle: number) => number;
285
-
286
41
  interface ICircle extends IVec2 {
287
42
  radius: number;
288
43
  }
44
+ interface IToCircle {
45
+ toCircle(): CircleLike;
46
+ }
289
47
  type CircleArray = [...Vec2Array, number];
290
48
  type CircleString = `${Vec2String}|${number}`;
291
- type CircleLike = ICircle | CircleArray | CircleString;
292
- declare class Circle implements ICircle, IGeometryObject, IToString {
49
+ type CircleLike = ICircle | CircleArray | CircleString | IToCircle;
50
+ type CircleArguments = [circle: CircleLike] | [position: Vec2Like, radius: number] | CircleArray;
51
+ declare class Circle implements ICircle, IGeometryObject, IToVec2 {
293
52
  radius: number;
294
53
  get perimeter(): number;
295
54
  get area(): number;
@@ -301,24 +60,37 @@ declare class Circle implements ICircle, IGeometryObject, IToString {
301
60
  get w(): number;
302
61
  set w(val: number);
303
62
  static resolve(a: unknown): Circle;
63
+ static resolveArgs(args: CircleArguments): Circle;
304
64
  static cast(a: unknown): Circle | undefined;
305
65
  static is(a: unknown): a is CircleLike;
306
66
  constructor(position: Vec2Like, radius: number);
307
67
  toArray(): CircleArray;
308
68
  toJSON(): ICircle;
309
69
  toString(): CircleString;
70
+ get [Symbol.toStringTag](): string;
71
+ [NodeJSCustomInspect](): string;
310
72
  clone(): Circle;
73
+ toVec2(): Vec2Like;
311
74
  equals(circle: CircleLike): boolean;
312
- inside(a: CircleLike): boolean;
313
- insidePoint(a: Vec2Like): boolean;
75
+ equals(x: number, y: number, radius: number): boolean;
76
+ equals(position: Vec2Like, radius: number): boolean;
77
+ inside(circle: CircleLike): boolean;
78
+ inside(x: number, y: number, radius: number): boolean;
79
+ inside(position: Vec2Like, radius: number): boolean;
80
+ insidePoint(point: Vec2Like): boolean;
81
+ insidePoint(x: number, y: number): boolean;
314
82
  }
315
83
 
316
84
  interface IRectangle extends IVec2, ISize {
317
85
  }
86
+ interface IToRectangle {
87
+ toRectangle(): RectangleLike;
88
+ }
318
89
  type RectangleArray = [...Vec2Array, ...SizeArray];
319
90
  type RectangleString = `${Vec2String}|${SizeString}`;
320
- type RectangleLike = IRectangle | RectangleArray | RectangleString;
321
- declare class Rectangle implements IRectangle, IGeometryObject, IToString {
91
+ type RectangleLike = IRectangle | RectangleArray | RectangleString | IToRectangle;
92
+ type RectangleArguments = [rectangle: RectangleLike] | [position: Vec2Like, size: SizeLike] | RectangleArray;
93
+ declare class Rectangle implements IRectangle, IGeometryObject, IToBoundingBox, IToVec2, IToSize {
322
94
  position: Vec2;
323
95
  size: Size;
324
96
  get area(): number;
@@ -334,15 +106,22 @@ declare class Rectangle implements IRectangle, IGeometryObject, IToString {
334
106
  get height(): number;
335
107
  set height(val: number);
336
108
  static resolve(a: unknown): Rectangle;
109
+ static resolveArgs(args: RectangleArguments): Rectangle;
337
110
  static cast(a: unknown): Rectangle | undefined;
338
111
  static is(a: unknown): a is RectangleLike;
339
112
  constructor(pos: Vec2Like, size: SizeLike);
340
113
  toArray(w?: boolean): RectangleArray;
341
114
  toString(w?: boolean): RectangleString;
115
+ get [Symbol.toStringTag](): string;
116
+ [NodeJSCustomInspect](): string;
342
117
  toJSON(): IRectangle;
343
118
  toBoundingBox(): BoundingBoxLike;
119
+ toVec2(): Vec2Like;
120
+ toSize(): SizeLike;
344
121
  clone(): Rectangle;
345
122
  equals(rectangle: RectangleLike): boolean;
123
+ equals(position: Vec2Like, size: SizeLike): boolean;
124
+ equals(x: number, y: number, width: number, height: number): boolean;
346
125
  }
347
126
 
348
127
  interface IBoundingBox {
@@ -351,10 +130,14 @@ interface IBoundingBox {
351
130
  top: number;
352
131
  bottom: number;
353
132
  }
133
+ interface IToBoundingBox {
134
+ toBoundingBox(): BoundingBoxLike;
135
+ }
354
136
  type BoundingBoxArray = [number, number, number, number];
355
137
  type BoundingBoxString = `${number},${number},${number},${number}`;
356
- type BoundingBoxLike = IBoundingBox | BoundingBoxArray | BoundingBoxString;
357
- declare class BoundingBox implements IBoundingBox, ISize, IToString {
138
+ type BoundingBoxLike = IBoundingBox | BoundingBoxArray | BoundingBoxString | IToBoundingBox;
139
+ type BoundingBoxArgs = [bbox: BoundingBoxLike] | BoundingBoxArray;
140
+ declare class BoundingBox implements IBoundingBox, IRectangle, IToRectangle, IToString {
358
141
  left: number;
359
142
  right: number;
360
143
  top: number;
@@ -363,59 +146,34 @@ declare class BoundingBox implements IBoundingBox, ISize, IToString {
363
146
  set width(val: number);
364
147
  get height(): number;
365
148
  set height(val: number);
149
+ get x(): number;
150
+ set x(x: number);
151
+ get y(): number;
152
+ set y(y: number);
153
+ w: number;
366
154
  static resolve(a: unknown): BoundingBox;
155
+ static resolveArgs(args: BoundingBoxArgs): BoundingBox;
367
156
  static cast(a: unknown): BoundingBox | undefined;
368
157
  static is(a: unknown): a is BoundingBoxLike;
369
158
  constructor(left: number, right: number, top: number, bottom: number);
370
159
  toArray(): BoundingBoxArray;
371
160
  toString(): BoundingBoxString;
161
+ get [Symbol.toStringTag](): string;
162
+ [NodeJSCustomInspect](): string;
372
163
  toJSON(): IBoundingBox;
373
164
  clone(): BoundingBox;
374
165
  equals(bbox: BoundingBoxLike): boolean;
375
- toSquare(): Size;
376
- toRectangle(): Rectangle;
377
- inside(a: BoundingBoxLike): boolean;
378
- insidePoint(a: Vec2Like): boolean;
379
- insideCircle(a: CircleLike): boolean;
380
- }
381
-
382
- interface ITriangle extends IGeometryObject {
383
- readonly a: number;
384
- readonly b: number;
385
- readonly c: number;
386
- readonly alpha: number;
387
- readonly beta: number;
388
- readonly gamma: number;
389
- readonly semiperimeter: number;
390
- readonly height: number;
391
- readonly base: number;
392
- }
393
- declare abstract class ATriangle<P extends Vec2 | Vec3> implements ITriangle, IToString {
394
- A: P;
395
- B: P;
396
- C: P;
397
- abstract get a(): number;
398
- abstract get b(): number;
399
- abstract get c(): number;
400
- constructor(A: P, B: P, C: P);
401
- get alpha(): number;
402
- get beta(): number;
403
- get gamma(): number;
404
- get perimeter(): number;
405
- get semiperimeter(): number;
406
- get area(): number;
407
- get base(): number;
408
- get height(): number;
409
- }
410
- declare class Triangle2D extends ATriangle<Vec2> implements IToString {
411
- get a(): number;
412
- get b(): number;
413
- get c(): number;
414
- }
415
- declare class Triangle3D extends ATriangle<Vec3> {
416
- get a(): number;
417
- get b(): number;
418
- get c(): number;
166
+ equals(left: number, right: number, top: number, bottom: number): boolean;
167
+ toSize(): SizeLike;
168
+ toVec2(): Vec2Like;
169
+ toRectangle(): RectangleLike;
170
+ inside(bbox: BoundingBoxLike): boolean;
171
+ inside(left: number, right: number, top: number, bottom: number): boolean;
172
+ insidePoint(point: Vec2Like): boolean;
173
+ insidePoint(x: number, y: number): boolean;
174
+ insideCircle(circle: CircleLike): boolean;
175
+ insideCircle(x: number, y: number, radius: number): boolean;
176
+ insideCircle(position: Vec2Like, radius: number): boolean;
419
177
  }
420
178
 
421
179
  interface IMat4 {
@@ -436,11 +194,15 @@ interface IMat4 {
436
194
  m32: number;
437
195
  m33: number;
438
196
  }
439
- type Mat4Array = [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
197
+ interface IToMat4 {
198
+ toMat4(): Mat4Like;
199
+ }
200
+ type Mat4Array = [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
440
201
  type Mat4NestedArray = [[number, number, number, number], [number, number, number, number], [number, number, number, number], [number, number, number, number]];
441
202
  type Mat4String = `${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
442
- type Mat4Like = IMat4 | Mat4Array | Mat4NestedArray | Mat4String | number;
443
- declare class Mat4 implements IMat4 {
203
+ type Mat4Like = IMat4 | Mat4Array | Mat4NestedArray | Mat4String | number | IToMat4;
204
+ type Mat4Arguments = [mat: Mat4Like] | Mat4Array;
205
+ declare class Mat4 implements IMat4, IToMat3, IToString {
444
206
  protected _raw: Mat4Array;
445
207
  get m00(): number;
446
208
  set m00(val: number);
@@ -475,9 +237,11 @@ declare class Mat4 implements IMat4 {
475
237
  get m33(): number;
476
238
  set m33(val: number);
477
239
  static resolve(a: unknown): Mat4;
240
+ static resolveArgs(args: Mat4Arguments): Mat4;
478
241
  static cast(a: unknown): Mat4 | undefined;
479
242
  static is(a: unknown): a is Mat4Like;
480
243
  static orthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
244
+ static orthographic(bbox: BoundingBoxLike, near: number, far: number): Mat4;
481
245
  static perspective(fov: number, aspect: number, near: number, far: number): Mat4;
482
246
  static pointAt(position: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4;
483
247
  constructor(init?: Mat4Array);
@@ -485,22 +249,28 @@ declare class Mat4 implements IMat4 {
485
249
  toNestetArray(): Mat4NestedArray;
486
250
  toJSON(): IMat4;
487
251
  toString(): Mat4String;
252
+ get [Symbol.toStringTag](): string;
253
+ [NodeJSCustomInspect](): string;
488
254
  clone(): Mat4;
489
255
  equals(mat: Mat4Like): boolean;
256
+ equals(...mat: Mat4Array): boolean;
490
257
  add(mat: Mat4Like): Mat4;
258
+ add(...mat: Mat4Array): Mat4;
491
259
  subtract(mat: Mat4Like): Mat4;
260
+ subtract(...mat: Mat4Array): Mat4;
492
261
  multiply(mat: Mat4Like): Mat4;
262
+ multiply(...mat: Mat4Array): Mat4;
493
263
  multiply(scalar: number): Mat4;
494
264
  multiply(vec: Vec3Like): Vec3;
495
- translate(x: number, y: number, z: number): this;
496
- translate(vec: Vec3Like): this;
265
+ translate(x: number, y: number, z: number): Mat4;
266
+ translate(vec: Vec3Like): Mat4;
497
267
  rotateX(angle: number): Mat4;
498
268
  rotateY(angle: number): Mat4;
499
269
  rotateZ(angle: number): Mat4;
500
- rotate(x: number, y: number, z: number): this;
501
- rotate(vec: Vec3Like): this;
502
- scale(x: number, y: number, z: number): this;
503
- scale(vec: Vec3Like): this;
270
+ rotate(x: number, y: number, z: number): Mat4;
271
+ rotate(vec: Vec3Like): Mat4;
272
+ scale(x: number, y: number, z: number): Mat4;
273
+ scale(vec: Vec3Like): Mat4;
504
274
  inverse(): Mat4;
505
275
  toMat3(): Mat3Like;
506
276
  }
@@ -516,11 +286,15 @@ interface IMat3 {
516
286
  m21: number;
517
287
  m22: number;
518
288
  }
289
+ interface IToMat3 {
290
+ toMat3(): Mat3Like;
291
+ }
519
292
  type Mat3Array = [number, number, number, number, number, number, number, number, number];
520
293
  type Mat3NestedArray = [[number, number, number], [number, number, number], [number, number, number]];
521
294
  type Mat3String = `${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
522
- type Mat3Like = IMat3 | Mat3Array | Mat3NestedArray | Mat3String | number;
523
- declare class Mat3 implements IMat3 {
295
+ type Mat3Like = IMat3 | Mat3Array | Mat3NestedArray | Mat3String | number | IToMat3;
296
+ type Mat3Arguments = [mat: Mat3Like] | Mat3Array;
297
+ declare class Mat3 implements IMat3, IToMat4, IToString {
524
298
  protected _raw: Mat3Array;
525
299
  get m00(): number;
526
300
  set m00(val: number);
@@ -541,6 +315,7 @@ declare class Mat3 implements IMat3 {
541
315
  get m22(): number;
542
316
  set m22(val: number);
543
317
  static resolve(a: unknown): Mat3;
318
+ static resolveArgs(args: Mat3Arguments): Mat3;
544
319
  static cast(a: unknown): Mat3 | undefined;
545
320
  static is(a: unknown): a is Mat3Like;
546
321
  static projection(width: number, height: number): Mat3;
@@ -549,11 +324,17 @@ declare class Mat3 implements IMat3 {
549
324
  toNestetArray(): Mat3NestedArray;
550
325
  toJSON(): IMat3;
551
326
  toString(): Mat3String;
327
+ get [Symbol.toStringTag](): string;
328
+ [NodeJSCustomInspect](): string;
552
329
  clone(): Mat3;
553
330
  equals(mat: Mat3Like): boolean;
331
+ equals(...mat: Mat3Array): boolean;
554
332
  add(mat: Mat3Like): Mat3;
333
+ add(...mat: Mat3Array): Mat3;
555
334
  subtract(mat: Mat3Like): Mat3;
335
+ subtract(...mat: Mat3Array): Mat3;
556
336
  multiply(mat: Mat3Like): Mat3;
337
+ multiply(...mat: Mat3Array): Mat3;
557
338
  multiply(scalar: number): Mat3;
558
339
  translate(x: number, y: number): Mat3;
559
340
  translate(vec: Vec2Like): Mat3;
@@ -565,25 +346,98 @@ declare class Mat3 implements IMat3 {
565
346
  toMat4(): Mat4Like;
566
347
  }
567
348
 
349
+ interface IQuaternion {
350
+ w: number;
351
+ x: number;
352
+ y: number;
353
+ z: number;
354
+ }
355
+ interface IToQuaternion {
356
+ toQuaternion(): QuaternionLike;
357
+ }
358
+ type QuaternionArray = [number, number, number, number];
359
+ type QuaternionString = `${number} + ${number}i + ${number}j + ${number}k`;
360
+ type QuaternionLike = IQuaternion | QuaternionArray | QuaternionString | IToQuaternion;
361
+ type QuaternionArguments = QuaternionArray | [quaternion: QuaternionLike];
362
+ declare class Quaternion implements IToVec3, IToMat3, IToMat4, IToString {
363
+ w: number;
364
+ x: number;
365
+ y: number;
366
+ z: number;
367
+ static is(a: unknown): a is IQuaternion;
368
+ static resolve(a: unknown): Quaternion;
369
+ static resolveArgs(args: QuaternionArguments): Quaternion;
370
+ static cast(a: unknown): Quaternion | undefined;
371
+ static fromAxisAngle(axis: Vec3Like, angle: number): Quaternion;
372
+ static fromAxisAngle(x: number, y: number, z: number, angle: number): Quaternion;
373
+ static fromEuler(x: number, y: number, z: number): Quaternion;
374
+ static fromEuler(vec: Vec3Like): Quaternion;
375
+ static get zero(): Quaternion;
376
+ constructor(w: number, x: number, y: number, z: number);
377
+ toArray(): QuaternionArray;
378
+ toString(): QuaternionString;
379
+ get [Symbol.toStringTag](): string;
380
+ [NodeJSCustomInspect](): string;
381
+ toJSON(): IQuaternion;
382
+ clone(): Quaternion;
383
+ add(quaternion: QuaternionLike): Quaternion;
384
+ add(...quaternion: QuaternionArray): Quaternion;
385
+ offset(quaternion: QuaternionLike): this;
386
+ offset(...quaternion: QuaternionArray): this;
387
+ subtract(quaternion: QuaternionLike): Quaternion;
388
+ subtract(...quaternion: QuaternionArray): Quaternion;
389
+ negative(): Quaternion;
390
+ length(sqrt?: boolean): number;
391
+ normalize(): Quaternion;
392
+ multiply(quaternion: QuaternionLike): Quaternion;
393
+ multiply(...quaternion: QuaternionArray): Quaternion;
394
+ multiplyVector(x: number, y: number, z: number): Vec3;
395
+ multiplyVector(vec: Vec3Like): Vec3;
396
+ scale(scalar: number): Quaternion;
397
+ dot(quaternion: QuaternionLike): number;
398
+ dot(...quaternion: QuaternionArray): number;
399
+ inverse(): Quaternion;
400
+ divide(quaternion: QuaternionLike): Quaternion;
401
+ divide(...quaternion: QuaternionArray): Quaternion;
402
+ conjugate(): Quaternion;
403
+ exp(): Quaternion;
404
+ log(): Quaternion;
405
+ toVec3(): Vec3Like;
406
+ toAxisAngle(): Vec3;
407
+ toEuler(): Vec3;
408
+ toMat3(): Mat3Like;
409
+ toMat4(): Mat4Like;
410
+ }
411
+
568
412
  interface IRGB {
569
413
  red: number;
570
414
  green: number;
571
415
  blue: number;
572
416
  }
417
+ interface IToRGB {
418
+ toRGB(): RGBLike;
419
+ }
573
420
  type RGBArray = [number, number, number];
574
421
  type RGBString = `rgb(${number},${number},${number})`;
575
- type RGBLike = IRGB | RGBArray | RGBString;
422
+ type RGBLike = IRGB | RGBArray | RGBString | IToRGB;
423
+ type RGBArguments = [rgb: RGBLike] | RGBArray;
576
424
  interface IRBBA extends IRGB {
577
425
  alpha: number;
578
426
  }
427
+ interface IToRGBA {
428
+ toRGBA(): RGBALike;
429
+ }
579
430
  type RGBAArray = [number, number, number, number];
580
431
  type RGBAString = `rgba(${number},${number},${number},${number})`;
581
- type RGBALike = IRBBA | RGBAArray | RGBAString;
432
+ type RGBALike = IRBBA | RGBAArray | RGBAString | IToRGBA;
433
+ type RGBAArguments = [rgba: RGBALike] | RGBAArray;
582
434
  type IAnyRGB = IRGB | IRBBA;
583
435
  type AnyRGBArray = RGBArray | RGBAArray;
584
436
  type AnyRGBString = RGBString | RGBAString;
585
- type AnyRGBLike = IAnyRGB | AnyRGBArray | AnyRGBString | HexLike | number;
586
- declare class RGBAColor implements IRBBA {
437
+ type IAnyToRGB = IToRGB | IToRGBA;
438
+ type AnyRGBLike = IAnyRGB | AnyRGBArray | AnyRGBString | number | IAnyToRGB;
439
+ type AnyRGBArguments = RGBArguments | RGBAArguments;
440
+ declare class RGBA implements IRBBA, IToVec2, IToVec3, IToHSL, IToHSLA, IToString {
587
441
  private _red;
588
442
  get red(): number;
589
443
  set red(val: number);
@@ -596,35 +450,53 @@ declare class RGBAColor implements IRBBA {
596
450
  private _alpha;
597
451
  get alpha(): number;
598
452
  set alpha(val: number);
599
- static resolve(a: unknown): RGBAColor;
600
- static cast(a: unknown): RGBAColor | undefined;
453
+ static resolve(a: unknown): RGBA;
454
+ static resolveArgs(args: AnyRGBArguments): RGBA;
455
+ static cast(a: unknown): RGBA | undefined;
601
456
  static is(a: unknown): a is AnyRGBLike;
602
457
  constructor(red: number, green: number, blue: number, alpha?: number);
603
458
  toArray(withAlpha?: boolean): AnyRGBArray;
604
459
  toJSON(withAlpha?: boolean): IAnyRGB;
605
460
  toString(withAlpha?: boolean): AnyRGBString;
606
- toHSL(withAlpha?: boolean): HSLColor;
607
- invert(withAlpha?: boolean): RGBAColor;
461
+ get [Symbol.toStringTag](): string;
462
+ [NodeJSCustomInspect](): string;
463
+ toVec2(): Vec2Like;
464
+ toVec3(): Vec3Like;
465
+ toHSL(withAlpha?: false): HSLLike;
466
+ toHSL(withAlpha?: true): HSLALike;
467
+ toHSLA(): HSLALike;
468
+ invert(withAlpha?: boolean): RGBA;
608
469
  }
470
+
609
471
  interface IHSL {
610
472
  hue: number;
611
473
  saturation: number;
612
474
  luminace: number;
613
475
  }
476
+ interface IToHSL {
477
+ toHSL(): HSLLike;
478
+ }
614
479
  type HSLArray = [number, number, number];
615
480
  type HSLString = `hsl(${number},${number},${number})`;
616
- type HSLLike = IHSL | HSLArray | HSLString;
481
+ type HSLLike = IHSL | HSLArray | HSLString | IToHSL;
482
+ type HSLArguments = HSLArray | [hsl: HSLLike];
617
483
  interface IHSLA extends IHSL {
618
484
  alpha: number;
619
485
  }
486
+ interface IToHSLA {
487
+ toHSLA(): HSLALike;
488
+ }
620
489
  type HSLAArray = [number, number, number, number];
621
490
  type HSLAString = `hsla(${number},${number},${number},${number})`;
622
- type HSLALike = IHSLA | HSLAArray | HSLAString;
491
+ type HSLALike = IHSLA | HSLAArray | HSLAString | IToHSLA;
492
+ type HSLAArguments = HSLAArray | [hsla: HSLALike];
623
493
  type IAnyHSL = IHSL | IHSLA;
624
494
  type AnyHSLArray = HSLArray | HSLAArray;
625
495
  type AnyHSLString = HSLString | HSLAString;
626
- type AnyHSLLike = IAnyHSL | AnyHSLArray | AnyHSLString | HexLike | number;
627
- declare class HSLColor implements IHSLA {
496
+ type IAnyToHSL = IToHSL | IToHSLA;
497
+ type AnyHSLLike = IAnyHSL | AnyHSLArray | AnyHSLString | number | IAnyToHSL;
498
+ type AnyHSLArguments = HSLArguments | HSLAArguments;
499
+ declare class HSLA implements IHSLA, IToRGB, IToRGBA, IToVec2, IToVec3, IToString {
628
500
  private _hue;
629
501
  get hue(): number;
630
502
  set hue(val: number);
@@ -637,100 +509,420 @@ declare class HSLColor implements IHSLA {
637
509
  private _alpha;
638
510
  get alpha(): number;
639
511
  set alpha(val: number);
640
- static resolve(a: unknown): HSLColor;
641
- static cast(a: unknown): HSLColor | undefined;
642
- static is(a: unknown): boolean;
512
+ static resolve(a: unknown): HSLA;
513
+ static resolveArgs(args: AnyHSLArguments): HSLA;
514
+ static cast(a: unknown): HSLA | undefined;
515
+ static is(a: unknown): a is AnyHSLLike;
643
516
  constructor(hue: number, saturation: number, luminace: number, alpha?: number);
644
517
  toArray(withAlpha?: boolean): AnyHSLArray;
645
518
  toJSON(withAlpha?: boolean): IAnyHSL;
646
519
  toString(withAlpha?: boolean): AnyHSLString;
647
- toRGB(withAlpha?: boolean): RGBAColor;
648
- invert(withAlpha?: boolean): HSLColor;
520
+ get [Symbol.toStringTag](): string;
521
+ [NodeJSCustomInspect](): string;
522
+ toRGB(withAlpha?: true): RGBALike;
523
+ toRGB(withAlpha?: false): RGBLike;
524
+ toRGBA(): RGBALike;
525
+ toVec2(): Vec2Like;
526
+ toVec3(): Vec3Like;
527
+ invert(withAlpha?: boolean): HSLA;
649
528
  }
650
- type AnyColor = RGBAColor | HSLColor;
651
- type AnyColorArray = AnyRGBArray | AnyHSLArray;
652
- type AnyColorString = AnyRGBString | AnyHSLString;
653
- type IColor = IAnyRGB | IAnyHSL;
654
- type AnyColorLike = AnyColorArray | AnyColorString | IColor | HexLike | number;
655
- declare function resolveColor(a: unknown, preferHSL?: boolean): AnyColor;
656
- declare function castColor(a: unknown, preferHSL?: boolean): AnyColor | undefined;
657
529
 
658
- interface IQuaternion {
659
- w: number;
530
+ interface IVec3 extends IVec2 {
531
+ z: number;
532
+ }
533
+ interface IToVec3 {
534
+ toVec3(): Vec3Like;
535
+ }
536
+ type Vec3Array = [number, number, number] | [number, number, number, number];
537
+ type Vec3String = `${number},${number},${number}` | `${number},${number},${number};${number}`;
538
+ type Vec3Like = IVec3 | Vec3Array | Vec3String | number | IToVec3;
539
+ type Vec3Arguments = [Vec3Like] | [number, number, number];
540
+ declare class Vec3 implements IVec3, IToVec2, IToRGB, IToRGBA, IToHSL, IToHSLA, IToQuaternion, IToString {
660
541
  x: number;
661
542
  y: number;
662
543
  z: number;
544
+ w: number;
545
+ static resolve(a: unknown): Vec3;
546
+ static cast(a: unknown): Vec3 | undefined;
547
+ static resolveArgs(args: Vec3Arguments): Vec3;
548
+ static is(a: unknown): a is Vec3Like;
549
+ static fromPoints(a: Vec3Like, b: Vec3Like): Vec3;
550
+ static clamp(value: Vec3Like, min: Vec3Like, max: Vec3Like): Vec3;
551
+ static intersectPlane(planeP: Vec3Like, planeN: Vec3Like, lineStart: Vec3Like, lineEnd: Vec3Like, t: number): Vec3;
552
+ static get zero(): Vec3;
553
+ static get one(): Vec3;
554
+ constructor(x: number, y: number, z: number, w?: number);
555
+ toArray(w?: boolean): Vec3Array;
556
+ toJSON(): IVec3;
557
+ toString(w?: boolean): Vec3String;
558
+ get [Symbol.toStringTag](): string;
559
+ [NodeJSCustomInspect](): string;
560
+ toVec2(): Vec2Like;
561
+ toRGB(): RGBLike;
562
+ toRGBA(): RGBALike;
563
+ toHSL(): HSLLike;
564
+ toHSLA(): HSLALike;
565
+ toQuaternion(): QuaternionLike;
566
+ clone(): Vec3;
567
+ equals(vec: Vec3Like): boolean;
568
+ equals(x: number, y: number, z: number): boolean;
569
+ setX(x: number): this;
570
+ setY(y: number): this;
571
+ setZ(z: number): this;
572
+ set(x: number, y: number, z: number): this;
573
+ set(vec: Vec3Like): this;
574
+ add(x: number, y: number, z: number): Vec3;
575
+ add(vec: Vec3Like): Vec3;
576
+ offset(x: number, y: number, z: number): this;
577
+ offset(vec: Vec3Like): this;
578
+ subtract(x: number, y: number, z: number): Vec3;
579
+ subtract(vec: Vec3Like): Vec3;
580
+ multiply(scalar: number): Vec3;
581
+ naiveMultiply(x: number, y: number, z: number): Vec3;
582
+ naiveMultiply(vec: Vec3Like): Vec3;
583
+ divide(x: number, y: number, z: number): Vec3;
584
+ divide(scalar: number): Vec3;
585
+ divide(vec: Vec3Like): Vec3;
586
+ dot(x: number, y: number, z: number): number;
587
+ dot(vec: Vec3Like): number;
588
+ cross(x: number, y: number, z: number): Vec3;
589
+ cross(vec: Vec3Like): Vec3;
590
+ distance(x: number, y: number, z: number): number;
591
+ distance(vec: Vec3Like): number;
592
+ distanceSquare(x: number, y: number, z: number): number;
593
+ distanceSquare(vec: Vec3Like): number;
594
+ length(): number;
595
+ normalize(): Vec3;
596
+ invert(): Vec3;
597
+ round(): Vec3;
663
598
  }
664
- type QuaternionArray = [number, number, number, number];
665
- type QuaternionString = `${number} + ${number}i + ${number}j + ${number}k`;
666
- type QuaternionLike = IQuaternion | QuaternionArray | QuaternionString;
667
- declare class Quaternion {
599
+
600
+ interface IVec2 {
601
+ x: number;
602
+ y: number;
668
603
  w: number;
604
+ }
605
+ interface IToVec2 {
606
+ toVec2(): Vec2Like;
607
+ }
608
+ type Vec2Array = [number, number] | [number, number, number];
609
+ type Vec2String = `${number},${number}` | `${number},${number};${number}`;
610
+ type Vec2Like = IVec2 | Vec2Array | Vec2String | number | IToVec2;
611
+ type Vec2Arguments = [Vec2Like] | [number, number];
612
+ declare class Vec2 implements IVec2, IToVec3, IToSize, IToRGB, IToRGBA, IToHSL, IToHSLA, IToString {
669
613
  x: number;
670
614
  y: number;
671
- z: number;
672
- static is(a: unknown): a is IQuaternion;
673
- static resolve(a: unknown): Quaternion;
674
- static cast(a: unknown): Quaternion | undefined;
675
- static fromAxisAngle(axis: Vec3Like, angle: number): Quaternion;
676
- static fromEuler(x: number, y: number, z: number): Quaternion;
677
- static fromEuler(vec: Vec3Like): Quaternion;
678
- constructor(w?: number, x?: number, y?: number, z?: number);
679
- toArray(): QuaternionArray;
680
- toString(): QuaternionString;
681
- toJSON(): IQuaternion;
682
- clone(): Quaternion;
683
- add(a: QuaternionLike): Quaternion;
684
- offset(a: QuaternionLike): this;
685
- subtract(a: QuaternionLike): Quaternion;
686
- negative(): Quaternion;
687
- length(sqrt?: boolean): number;
688
- normalize(): Quaternion;
689
- multiply(a: QuaternionLike): Quaternion;
690
- multiplyVector(x: number, y: number, z: number): Vec3;
691
- multiplyVector(vec: Vec3Like): Vec3;
692
- scale(scalar: number): Quaternion;
693
- dot(a: QuaternionLike): number;
694
- inverse(): Quaternion;
695
- divide(a: QuaternionLike): Quaternion;
696
- conjugate(): Quaternion;
697
- exp(): Quaternion;
698
- log(): Quaternion;
699
- toVector(): Vec3;
700
- toAxisAngle(): Vec3;
701
- toEuler(): Vec3;
702
- toMat3(): Mat3;
703
- toMat4(): Mat4;
615
+ w: number;
616
+ static resolve(a: unknown): Vec2;
617
+ static cast(a: unknown): Vec2 | undefined;
618
+ static resolveArgs(args: Vec2Arguments): Vec2;
619
+ static is(a: unknown): a is Vec2Like;
620
+ static fromPoints(a: Vec2Like, b: Vec2Like): Vec2;
621
+ static clamp(value: Vec2Like, min: Vec2Like, max: Vec2Like): Vec2;
622
+ static get zero(): Vec2;
623
+ static get one(): Vec2;
624
+ constructor(x: number, y: number, w?: number);
625
+ toArray(w?: boolean): Vec2Array;
626
+ toJSON(): IVec2;
627
+ toString(w?: boolean): Vec2String;
628
+ get [Symbol.toStringTag](): string;
629
+ [NodeJSCustomInspect](): string;
630
+ toSize(): SizeLike;
631
+ toVec3(z?: number): Vec3Like;
632
+ toRGB(): RGBLike;
633
+ toRGBA(): RGBALike;
634
+ toHSL(): HSLLike;
635
+ toHSLA(): HSLALike;
636
+ clone(): Vec2;
637
+ equals(vec: Vec2Like): boolean;
638
+ equals(x: number, y: number): boolean;
639
+ setX(x: number): this;
640
+ setY(y: number): this;
641
+ setW(w: number): this;
642
+ set(x: number, y: number): this;
643
+ set(vec: Vec2Like): this;
644
+ add(x: number, y: number): Vec2;
645
+ add(vec: Vec2Like): Vec2;
646
+ offset(x: number, y: number): this;
647
+ offset(vec: Vec2Like): this;
648
+ subtract(x: number, y: number): Vec2;
649
+ subtract(vec: Vec2Like): Vec2;
650
+ multiply(scalar: number): Vec2;
651
+ naiveMultiply(x: number, y: number): Vec2;
652
+ naiveMultiply(vec: Vec2Like): Vec2;
653
+ divide(x: number, y: number): Vec2;
654
+ divide(scalar: number): Vec2;
655
+ divide(vec: Vec2Like): Vec2;
656
+ dot(x: number, y: number): number;
657
+ dot(vec: Vec2Like): number;
658
+ distance(x: number, y: number): number;
659
+ distance(vec: Vec2Like): number;
660
+ distanceSquare(x: number, y: number): number;
661
+ distanceSquare(vec: Vec2Like): number;
662
+ length(): number;
663
+ cartesianify(): Vec2;
664
+ polarify(): Vec2;
665
+ normalize(): Vec2;
666
+ invert(): Vec2;
667
+ round(): Vec2;
668
+ }
669
+
670
+ /**
671
+ * An abstract class of a mathematical function
672
+ * @template Input The amount of input values the function can use
673
+ */
674
+ declare abstract class MathFunction<Input extends Array<number> = Array<number>> implements IToString {
675
+ /**
676
+ * Calculate y with input values
677
+ * @param args The input values
678
+ * @returns The y value from the input values
679
+ */
680
+ abstract get(...args: Input): number;
681
+ /**
682
+ * Get the root points of this function
683
+ * @returns The root points, this can be an empty array if no root points have been found
684
+ */
685
+ abstract roots(): Array<Vec2>;
686
+ abstract get [Symbol.toStringTag](): string;
687
+ abstract [NodeJSCustomInspect](): string;
688
+ }
689
+
690
+ /**
691
+ * The string representation of a linear function
692
+ */
693
+ type LinearFunctionString = `f(x) = ${number} * x ${"+" | "-"} ${number}` | `f(x) = ${number} * x`;
694
+ /**
695
+ * A class that implements a linear function with `m`, `b` and `x`
696
+ */
697
+ declare class LinearFunction extends MathFunction<[number]> {
698
+ /**
699
+ * The factor of the linear function
700
+ */
701
+ m: number;
702
+ /**
703
+ * The height of the linear function
704
+ */
705
+ b: number;
706
+ /**
707
+ * Create a linear function from two points
708
+ * @param a A point
709
+ * @param b A point
710
+ * @returns A linear function from two points
711
+ */
712
+ static fromPoints(a: Vec2Like, b: Vec2Like): LinearFunction;
713
+ /**
714
+ * Create a linear function with a factor and height
715
+ * @param m The factor
716
+ * @param b The height
717
+ */
718
+ constructor(m: number, b: number);
719
+ get(x: number): number;
720
+ roots(): Array<Vec2>;
721
+ toString(): LinearFunctionString;
722
+ get [Symbol.toStringTag](): string;
723
+ [NodeJSCustomInspect](): string;
724
+ }
725
+
726
+ /**
727
+ * A type that represents the sign of a number
728
+ */
729
+ type SignCharacter = "-" | "+";
730
+ /**
731
+ * Get the sign character from a number
732
+ * @param num A number
733
+ */
734
+ declare function signCharacter(num: number | bigint): SignCharacter | undefined;
735
+
736
+ /**
737
+ * The various types of how a quad function can be represented
738
+ */
739
+ type QuadFunctionType = "standard";
740
+ /**
741
+ * A typed map of each quad function representations
742
+ */
743
+ type QuadFunctionString = {
744
+ "standard": `f(x) = ${number}x^2 ${SignCharacter} ${number}x ${SignCharacter} ${number}` | `f(x) = ${number}x^2 ${SignCharacter} ${number}x` | `f(x) = ${number}x^2`;
745
+ };
746
+ /**
747
+ * A string representation of a quad function
748
+ */
749
+ type QuadFunctionStrings = QuadFunctionString[QuadFunctionType];
750
+ /**
751
+ * A class that implements a quad function with `a`, `b` and `c`
752
+ */
753
+ declare class QuadFunction extends MathFunction<[number]> {
754
+ a: number;
755
+ b: number;
756
+ c: number;
757
+ static get(a: number, b: number, c: number, x: number): number;
758
+ constructor(a: number, b: number, c: number);
759
+ get(x: number): number;
760
+ roots(): Array<Vec2>;
761
+ toString<T extends QuadFunctionType>(type?: T): QuadFunctionString[T];
762
+ get [Symbol.toStringTag](): string;
763
+ [NodeJSCustomInspect](): string;
704
764
  }
705
765
 
766
+ declare function numberToRGB(number: number): FixedArray<number, 3>;
767
+ declare function numberToRGBA(number: number): FixedArray<number, 4>;
768
+
769
+ /**
770
+ * A error when a value wasn't able to be resolved to another type
771
+ */
772
+ declare class ResolveError extends Error {
773
+ readonly target: string;
774
+ readonly value: unknown;
775
+ /**
776
+ * Create a resolve exception
777
+ * @param target The target type name
778
+ * @param value A value
779
+ */
780
+ constructor(target: string, value: unknown);
781
+ }
782
+
783
+ declare const DJB2_OFFSET = 5381n;
784
+ declare function djb2<V>(value: V): bigint;
785
+ declare const FNV1_OFFSET = 14695981039346656037n;
786
+ declare const FNV1_PRIME = 1099511628211n;
787
+ declare function fnv1<V>(value: V): bigint;
788
+ declare function sdbm<V>(value: V): bigint;
789
+ interface IHash extends IToString {
790
+ update(input: Uint8Array): this;
791
+ digest(): Uint8Array;
792
+ }
793
+
794
+ declare class MD2 implements IHash {
795
+ static readonly BLOCK_SIZE = 16;
796
+ private _data;
797
+ private _state;
798
+ private _checksum;
799
+ private _length;
800
+ constructor();
801
+ update(input: Uint8Array): this;
802
+ private _transform;
803
+ digest(): Uint8Array;
804
+ toString(): string;
805
+ get [Symbol.toStringTag](): string;
806
+ [NodeJSCustomInspect](): string;
807
+ }
808
+
809
+ declare const MAX_ANGLE_DEGREE = 360;
810
+ declare const clampAngleDegree: (angle: number) => number;
811
+ declare const clampAngleRadian: (angle: number) => number;
812
+ declare const radianToDegree: (angle: number) => number;
813
+ declare const degreeToRadian: (angle: number) => number;
814
+
815
+ interface ITriangle extends IGeometryObject {
816
+ readonly a: number;
817
+ readonly b: number;
818
+ readonly c: number;
819
+ readonly alpha: number;
820
+ readonly beta: number;
821
+ readonly gamma: number;
822
+ readonly semiperimeter: number;
823
+ readonly height: number;
824
+ readonly base: number;
825
+ }
826
+ declare abstract class Triangle<T> implements ITriangle {
827
+ A: T;
828
+ B: T;
829
+ C: T;
830
+ abstract get a(): number;
831
+ abstract get b(): number;
832
+ abstract get c(): number;
833
+ constructor(A: T, B: T, C: T);
834
+ get alpha(): number;
835
+ get beta(): number;
836
+ get gamma(): number;
837
+ get perimeter(): number;
838
+ get semiperimeter(): number;
839
+ get area(): number;
840
+ get base(): number;
841
+ get height(): number;
842
+ toString(): string;
843
+ get [Symbol.toStringTag](): string;
844
+ [NodeJSCustomInspect](): string;
845
+ }
846
+ declare class Triangle2D extends Triangle<Vec2> {
847
+ get a(): number;
848
+ get b(): number;
849
+ get c(): number;
850
+ }
851
+ declare class Triangle3D extends Triangle<Vec3> {
852
+ get a(): number;
853
+ get b(): number;
854
+ get c(): number;
855
+ }
856
+
857
+ type AnyColorArray = AnyRGBArray | AnyHSLArray;
858
+ type AnyColorString = AnyRGBString | AnyHSLString;
859
+ type IAnyColor = IAnyRGB | IAnyHSL;
860
+ type IAnyToColor = IAnyToRGB | IAnyToHSL;
861
+ type AnyColorLike = AnyColorArray | AnyColorString | IAnyColor | number;
862
+ type AnyColorArguments = AnyColorArray | [color: AnyColorLike];
863
+ type AnyColor = RGBA | HSLA;
864
+ declare namespace AnyColor {
865
+ function cast(a: unknown, preferHSL?: boolean): AnyColor | undefined;
866
+ function resolve(a: unknown, preferHSL?: boolean): AnyColor;
867
+ function resolveArgs(args: AnyColorArguments, preferHSL?: boolean): AnyColor;
868
+ }
869
+
870
+ declare class Transform2D implements IToMat3, IToString {
871
+ parent?: Transform2D | undefined;
872
+ origin: Vec2;
873
+ localPosition: Vec2;
874
+ localRotation: number;
875
+ get localRotationDegree(): number;
876
+ set localRotationDegree(v: number);
877
+ localScale: Vec2;
878
+ get globalPosition(): Vec2;
879
+ get globalRotation(): number;
880
+ get globalRotationDegree(): number;
881
+ get globalScale(): Vec2;
882
+ constructor(position: Vec2Like, rotation: number, scale: Vec2Like, parent?: Transform2D | undefined);
883
+ toString(): string;
884
+ get [Symbol.toStringTag](): string;
885
+ [NodeJSCustomInspect](): string;
886
+ toMat3(): Mat3;
887
+ toGlobalMat3(): Mat3;
888
+ }
706
889
  /**
707
890
  * Represents a 3D transform for 3D graphics
708
891
  */
709
- declare class Transform {
892
+ declare class Transform3D implements IToMat4, IToString {
893
+ parent?: Transform3D | undefined;
894
+ origin: Vec3;
710
895
  /**
711
- * The position of the object
896
+ * The local position
712
897
  */
713
- position: Vec3;
898
+ localPosition: Vec3;
714
899
  /**
715
- * The rotation of the object
900
+ * The local rotation
716
901
  */
717
- rotation: Quaternion;
902
+ localRotation: Quaternion;
718
903
  /**
719
- * The scale of the object
904
+ * The local scale
720
905
  */
721
- scale: Vec3;
906
+ localScale: Vec3;
907
+ get globalPosition(): Vec3;
908
+ get globalRotation(): Quaternion;
909
+ get globalScale(): Vec3;
722
910
  /**
723
911
  * Create a new transform with `position`, `rotation` and `scale`
724
912
  * @param position The position as a Vec3
725
913
  * @param rotation The rotation as a Quaternion
726
914
  * @param scale The scale as a Vec3
727
915
  */
728
- constructor(position: Vec3Like, rotation: QuaternionLike, scale: Vec3Like);
916
+ constructor(position: Vec3Like, rotation: QuaternionLike, scale: Vec3Like, parent?: Transform3D | undefined);
917
+ toString(): string;
918
+ get [Symbol.toStringTag](): string;
919
+ [NodeJSCustomInspect](): string;
729
920
  /**
730
921
  * Convert the transform into a 4x3 matrix
731
922
  * @returns A 4x4 matrix from the transform
732
923
  */
733
924
  toMat4(): Mat4;
925
+ toGlobalMat4(): Mat4;
734
926
  }
735
927
 
736
928
  /**
@@ -747,7 +939,8 @@ declare function clamp<T extends number | bigint>(value: T, min: T, max: T): T;
747
939
  * @param b The input value b
748
940
  * @returns The result
749
941
  */
750
- declare function log_hypot(a: number, b: number): number;
942
+ declare function logHypot(a: number, b: number): number;
751
943
  declare const EPSILON = 1e-16;
944
+ declare const lerp: <T extends number | bigint>(a: T, b: T, t: T) => number;
752
945
 
753
- export { ATriangle, type AnyColor, type AnyColorArray, type AnyColorLike, type AnyColorString, type AnyHSLArray, type AnyHSLLike, type AnyHSLString, type AnyRGBArray, type AnyRGBLike, type AnyRGBString, BoundingBox, type BoundingBoxArray, type BoundingBoxLike, type BoundingBoxString, Circle, type CircleArray, type CircleLike, type CircleString, DJB2_OFFSET, EPSILON, FNV1_OFFSET, FNV1_PRIME, type HSLAArray, type HSLALike, type HSLAString, type HSLArray, HSLColor, type HSLLike, type HSLString, type HexDigit, type HexLike, type IAnyHSL, type IAnyRGB, type IBoundingBox, type ICircle, type IColor, type IGeometryObject, type IHSL, type IHSLA, type IHash, type IMat3, type IMat4, type IQuaternion, type IRBBA, type IRGB, type IRectangle, type ISize, type IToString, type ITriangle, type IVec2, type IVec3, type JavaScriptTypeMap, type JavaScriptTypes, LinearFunction, type LinearFunctionString, MAX_ANGLE_DEGREE, MD2, Mat3, type Mat3Array, type Mat3Like, type Mat3NestedArray, type Mat3String, Mat4, type Mat4Array, type Mat4Like, type Mat4NestedArray, type Mat4String, MathFunction, type Predicate, QuadFunction, type QuadFunctionString, type QuadFunctionStrings, type QuadFunctionType, Quaternion, type QuaternionArray, type QuaternionLike, type QuaternionString, type RGBAArray, RGBAColor, type RGBALike, type RGBAString, type RGBArray, type RGBLike, type RGBString, Rectangle, type RectangleArray, type RectangleLike, type RectangleString, ResolveError, Size, type SizeArguments, type SizeArray, type SizeLike, type SizeString, Transform, Triangle2D, Triangle3D, Vec2, type Vec2Arguments, type Vec2Array, type Vec2Like, type Vec2String, Vec3, type Vec3Arguments, type Vec3Array, type Vec3Like, type Vec3String, cap_angle_degree, cap_angle_radian, castColor, check_array, check_hex, check_hex_digit, check_number, check_number_array, check_string, check_string_array, clamp, degree_to_radian, djb2, fnv1, get_hex_part, has_property, log_hypot, radian_to_degree, resolveColor, sdbm, sign_char, stringify };
946
+ export { AnyColor, type AnyColorArguments, type AnyColorArray, type AnyColorLike, type AnyColorString, type AnyHSLArguments, type AnyHSLArray, type AnyHSLLike, type AnyHSLString, type AnyRGBArguments, type AnyRGBArray, type AnyRGBLike, type AnyRGBString, BoundingBox, type BoundingBoxArgs, type BoundingBoxArray, type BoundingBoxLike, type BoundingBoxString, Circle, type CircleArguments, type CircleArray, type CircleLike, type CircleString, DJB2_OFFSET, EPSILON, FNV1_OFFSET, FNV1_PRIME, HSLA, type HSLAArguments, type HSLAArray, type HSLALike, type HSLAString, type HSLArguments, type HSLArray, type HSLLike, type HSLString, type IAnyColor, type IAnyHSL, type IAnyRGB, type IAnyToColor, type IAnyToHSL, type IAnyToRGB, type IBoundingBox, type ICircle, type IGeometryObject, type IHSL, type IHSLA, type IHash, type IMat3, type IMat4, type IQuaternion, type IRBBA, type IRGB, type IRectangle, type ISize, type IToBoundingBox, type IToCircle, type IToHSL, type IToHSLA, type IToMat3, type IToMat4, type IToQuaternion, type IToRGB, type IToRGBA, type IToRectangle, type IToSize, type IToVec2, type IToVec3, type ITriangle, type IVec2, type IVec3, LinearFunction, type LinearFunctionString, MAX_ANGLE_DEGREE, MD2, Mat3, type Mat3Arguments, type Mat3Array, type Mat3Like, type Mat3NestedArray, type Mat3String, Mat4, type Mat4Arguments, type Mat4Array, type Mat4Like, type Mat4NestedArray, type Mat4String, MathFunction, QuadFunction, type QuadFunctionString, type QuadFunctionStrings, type QuadFunctionType, Quaternion, type QuaternionArguments, type QuaternionArray, type QuaternionLike, type QuaternionString, RGBA, type RGBAArguments, type RGBAArray, type RGBALike, type RGBAString, type RGBArguments, type RGBArray, type RGBLike, type RGBString, Rectangle, type RectangleArguments, type RectangleArray, type RectangleLike, type RectangleString, ResolveError, type SignCharacter, Size, type SizeArguments, type SizeArray, type SizeLike, type SizeString, Transform2D, Transform3D, Triangle, Triangle2D, Triangle3D, Vec2, type Vec2Arguments, type Vec2Array, type Vec2Like, type Vec2String, Vec3, type Vec3Arguments, type Vec3Array, type Vec3Like, type Vec3String, clamp, clampAngleDegree, clampAngleRadian, degreeToRadian, djb2, fnv1, lerp, logHypot, numberToRGB, numberToRGBA, radianToDegree, sdbm, signCharacter };