@ntf/math 1.2.0 → 1.3.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.
Files changed (125) hide show
  1. package/dist/index.d.mts +754 -0
  2. package/dist/index.d.ts +754 -0
  3. package/dist/index.js +2892 -0
  4. package/dist/index.mjs +2869 -0
  5. package/package.json +23 -13
  6. package/dist/cjs/algebra/function.js +0 -7
  7. package/dist/cjs/algebra/function.js.map +0 -1
  8. package/dist/cjs/algebra/linear.js +0 -49
  9. package/dist/cjs/algebra/linear.js.map +0 -1
  10. package/dist/cjs/algebra/quad.js +0 -62
  11. package/dist/cjs/algebra/quad.js.map +0 -1
  12. package/dist/cjs/color.js +0 -243
  13. package/dist/cjs/color.js.map +0 -1
  14. package/dist/cjs/common/error.js +0 -14
  15. package/dist/cjs/common/error.js.map +0 -1
  16. package/dist/cjs/common/sign.js +0 -14
  17. package/dist/cjs/common/sign.js.map +0 -1
  18. package/dist/cjs/common/types.js +0 -77
  19. package/dist/cjs/common/types.js.map +0 -1
  20. package/dist/cjs/geometry/angle.js +0 -11
  21. package/dist/cjs/geometry/angle.js.map +0 -1
  22. package/dist/cjs/geometry/bbox.js +0 -102
  23. package/dist/cjs/geometry/bbox.js.map +0 -1
  24. package/dist/cjs/geometry/circle.js +0 -87
  25. package/dist/cjs/geometry/circle.js.map +0 -1
  26. package/dist/cjs/geometry/object.js +0 -3
  27. package/dist/cjs/geometry/object.js.map +0 -1
  28. package/dist/cjs/geometry/rectangle.js +0 -98
  29. package/dist/cjs/geometry/rectangle.js.map +0 -1
  30. package/dist/cjs/geometry/square.js +0 -70
  31. package/dist/cjs/geometry/square.js.map +0 -1
  32. package/dist/cjs/geometry/triangle.js +0 -65
  33. package/dist/cjs/geometry/triangle.js.map +0 -1
  34. package/dist/cjs/index.js +0 -59
  35. package/dist/cjs/index.js.map +0 -1
  36. package/dist/cjs/matrices/mat3.js +0 -202
  37. package/dist/cjs/matrices/mat3.js.map +0 -1
  38. package/dist/cjs/matrices/mat4.js +0 -292
  39. package/dist/cjs/matrices/mat4.js.map +0 -1
  40. package/dist/cjs/quaternion.js +0 -204
  41. package/dist/cjs/quaternion.js.map +0 -1
  42. package/dist/cjs/vectors/vec2.js +0 -168
  43. package/dist/cjs/vectors/vec2.js.map +0 -1
  44. package/dist/cjs/vectors/vec3.js +0 -177
  45. package/dist/cjs/vectors/vec3.js.map +0 -1
  46. package/dist/esm/algebra/function.js +0 -3
  47. package/dist/esm/algebra/function.js.map +0 -1
  48. package/dist/esm/algebra/linear.js +0 -45
  49. package/dist/esm/algebra/linear.js.map +0 -1
  50. package/dist/esm/algebra/quad.js +0 -58
  51. package/dist/esm/algebra/quad.js.map +0 -1
  52. package/dist/esm/color.js +0 -236
  53. package/dist/esm/color.js.map +0 -1
  54. package/dist/esm/common/error.js +0 -10
  55. package/dist/esm/common/error.js.map +0 -1
  56. package/dist/esm/common/sign.js +0 -10
  57. package/dist/esm/common/sign.js.map +0 -1
  58. package/dist/esm/common/types.js +0 -65
  59. package/dist/esm/common/types.js.map +0 -1
  60. package/dist/esm/geometry/angle.js +0 -5
  61. package/dist/esm/geometry/angle.js.map +0 -1
  62. package/dist/esm/geometry/bbox.js +0 -98
  63. package/dist/esm/geometry/bbox.js.map +0 -1
  64. package/dist/esm/geometry/circle.js +0 -83
  65. package/dist/esm/geometry/circle.js.map +0 -1
  66. package/dist/esm/geometry/object.js +0 -2
  67. package/dist/esm/geometry/object.js.map +0 -1
  68. package/dist/esm/geometry/rectangle.js +0 -94
  69. package/dist/esm/geometry/rectangle.js.map +0 -1
  70. package/dist/esm/geometry/square.js +0 -66
  71. package/dist/esm/geometry/square.js.map +0 -1
  72. package/dist/esm/geometry/triangle.js +0 -59
  73. package/dist/esm/geometry/triangle.js.map +0 -1
  74. package/dist/esm/index.js +0 -40
  75. package/dist/esm/index.js.map +0 -1
  76. package/dist/esm/matrices/mat3.js +0 -198
  77. package/dist/esm/matrices/mat3.js.map +0 -1
  78. package/dist/esm/matrices/mat4.js +0 -288
  79. package/dist/esm/matrices/mat4.js.map +0 -1
  80. package/dist/esm/quaternion.js +0 -200
  81. package/dist/esm/quaternion.js.map +0 -1
  82. package/dist/esm/vectors/vec2.js +0 -164
  83. package/dist/esm/vectors/vec2.js.map +0 -1
  84. package/dist/esm/vectors/vec3.js +0 -173
  85. package/dist/esm/vectors/vec3.js.map +0 -1
  86. package/dist/types/algebra/function.d.ts +0 -6
  87. package/dist/types/algebra/function.d.ts.map +0 -1
  88. package/dist/types/algebra/linear.d.ts +0 -14
  89. package/dist/types/algebra/linear.d.ts.map +0 -1
  90. package/dist/types/algebra/quad.d.ts +0 -18
  91. package/dist/types/algebra/quad.d.ts.map +0 -1
  92. package/dist/types/color.d.ts +0 -90
  93. package/dist/types/color.d.ts.map +0 -1
  94. package/dist/types/common/error.d.ts +0 -6
  95. package/dist/types/common/error.d.ts.map +0 -1
  96. package/dist/types/common/sign.d.ts +0 -2
  97. package/dist/types/common/sign.d.ts.map +0 -1
  98. package/dist/types/common/types.d.ts +0 -26
  99. package/dist/types/common/types.d.ts.map +0 -1
  100. package/dist/types/geometry/angle.d.ts +0 -5
  101. package/dist/types/geometry/angle.d.ts.map +0 -1
  102. package/dist/types/geometry/bbox.d.ts +0 -38
  103. package/dist/types/geometry/bbox.d.ts.map +0 -1
  104. package/dist/types/geometry/circle.d.ts +0 -32
  105. package/dist/types/geometry/circle.d.ts.map +0 -1
  106. package/dist/types/geometry/object.d.ts +0 -5
  107. package/dist/types/geometry/object.d.ts.map +0 -1
  108. package/dist/types/geometry/rectangle.d.ts +0 -34
  109. package/dist/types/geometry/rectangle.d.ts.map +0 -1
  110. package/dist/types/geometry/square.d.ts +0 -28
  111. package/dist/types/geometry/square.d.ts.map +0 -1
  112. package/dist/types/geometry/triangle.d.ts +0 -42
  113. package/dist/types/geometry/triangle.d.ts.map +0 -1
  114. package/dist/types/index.d.ts +0 -23
  115. package/dist/types/index.d.ts.map +0 -1
  116. package/dist/types/matrices/mat3.d.ts +0 -62
  117. package/dist/types/matrices/mat3.d.ts.map +0 -1
  118. package/dist/types/matrices/mat4.d.ts +0 -89
  119. package/dist/types/matrices/mat4.d.ts.map +0 -1
  120. package/dist/types/quaternion.d.ts +0 -50
  121. package/dist/types/quaternion.d.ts.map +0 -1
  122. package/dist/types/vectors/vec2.d.ts +0 -60
  123. package/dist/types/vectors/vec2.d.ts.map +0 -1
  124. package/dist/types/vectors/vec3.d.ts +0 -58
  125. package/dist/types/vectors/vec3.d.ts.map +0 -1
@@ -0,0 +1,754 @@
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
+ }
8
+
9
+ interface IGeometryObject {
10
+ readonly area: number;
11
+ readonly perimeter: number;
12
+ }
13
+
14
+ interface ISize {
15
+ width: number;
16
+ height: number;
17
+ }
18
+ type SizeArray = [number, number];
19
+ 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 {
23
+ width: number;
24
+ height: number;
25
+ get aspectRatio(): number;
26
+ get area(): number;
27
+ get perimeter(): number;
28
+ static resolve(a: unknown): Size;
29
+ static cast(a: unknown): Size | undefined;
30
+ static is(a: unknown): a is SizeLike;
31
+ constructor(width: number, height: number);
32
+ toArray(): SizeArray;
33
+ toString(): SizeString;
34
+ toJSON(): ISize;
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;
63
+ 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
+ }
279
+
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
+ interface ICircle extends IVec2 {
287
+ radius: number;
288
+ }
289
+ type CircleArray = [...Vec2Array, number];
290
+ type CircleString = `${Vec2String}|${number}`;
291
+ type CircleLike = ICircle | CircleArray | CircleString;
292
+ declare class Circle implements ICircle, IGeometryObject, IToString {
293
+ radius: number;
294
+ get perimeter(): number;
295
+ get area(): number;
296
+ position: Vec2;
297
+ get x(): number;
298
+ set x(val: number);
299
+ get y(): number;
300
+ set y(val: number);
301
+ get w(): number;
302
+ set w(val: number);
303
+ static resolve(a: unknown): Circle;
304
+ static cast(a: unknown): Circle | undefined;
305
+ static is(a: unknown): a is CircleLike;
306
+ constructor(position: Vec2Like, radius: number);
307
+ toArray(): CircleArray;
308
+ toJSON(): ICircle;
309
+ toString(): CircleString;
310
+ clone(): Circle;
311
+ equals(circle: CircleLike): boolean;
312
+ inside(a: CircleLike): boolean;
313
+ insidePoint(a: Vec2Like): boolean;
314
+ }
315
+
316
+ interface IRectangle extends IVec2, ISize {
317
+ }
318
+ type RectangleArray = [...Vec2Array, ...SizeArray];
319
+ type RectangleString = `${Vec2String}|${SizeString}`;
320
+ type RectangleLike = IRectangle | RectangleArray | RectangleString;
321
+ declare class Rectangle implements IRectangle, IGeometryObject, IToString {
322
+ position: Vec2;
323
+ size: Size;
324
+ get area(): number;
325
+ get perimeter(): number;
326
+ get x(): number;
327
+ set x(val: number);
328
+ get y(): number;
329
+ set y(val: number);
330
+ get w(): number;
331
+ set w(val: number);
332
+ get width(): number;
333
+ set width(val: number);
334
+ get height(): number;
335
+ set height(val: number);
336
+ static resolve(a: unknown): Rectangle;
337
+ static cast(a: unknown): Rectangle | undefined;
338
+ static is(a: unknown): a is RectangleLike;
339
+ constructor(pos: Vec2Like, size: SizeLike);
340
+ constructor(x: number, y: number, width: number, height: number);
341
+ toArray(w?: boolean): RectangleArray;
342
+ toString(w?: boolean): RectangleString;
343
+ toJSON(): IRectangle;
344
+ toBoundingBox(): BoundingBoxLike;
345
+ clone(): Rectangle;
346
+ equals(rectangle: RectangleLike): boolean;
347
+ }
348
+
349
+ interface IBoundingBox {
350
+ left: number;
351
+ right: number;
352
+ top: number;
353
+ bottom: number;
354
+ }
355
+ type BoundingBoxArray = [number, number, number, number];
356
+ type BoundingBoxString = `${number},${number},${number},${number}`;
357
+ type BoundingBoxLike = IBoundingBox | BoundingBoxArray | BoundingBoxString;
358
+ declare class BoundingBox implements IBoundingBox, ISize, IToString {
359
+ left: number;
360
+ right: number;
361
+ top: number;
362
+ bottom: number;
363
+ get width(): number;
364
+ set width(val: number);
365
+ get height(): number;
366
+ set height(val: number);
367
+ static resolve(a: unknown): BoundingBox;
368
+ static cast(a: unknown): BoundingBox | undefined;
369
+ static is(a: unknown): a is BoundingBoxLike;
370
+ constructor(left: number, right: number, top: number, bottom: number);
371
+ toArray(): BoundingBoxArray;
372
+ toString(): BoundingBoxString;
373
+ toJSON(): IBoundingBox;
374
+ clone(): BoundingBox;
375
+ equals(bbox: BoundingBoxLike): boolean;
376
+ toSquare(): Size;
377
+ toRectangle(): Rectangle;
378
+ inside(a: BoundingBoxLike): boolean;
379
+ insidePoint(a: Vec2Like): boolean;
380
+ insideCircle(a: CircleLike): boolean;
381
+ }
382
+
383
+ interface ITriangle extends IGeometryObject {
384
+ readonly a: number;
385
+ readonly b: number;
386
+ readonly c: number;
387
+ readonly alpha: number;
388
+ readonly beta: number;
389
+ readonly gamma: number;
390
+ readonly semiperimeter: number;
391
+ readonly height: number;
392
+ readonly base: number;
393
+ }
394
+ declare abstract class ATriangle<P extends Vec2 | Vec3> implements ITriangle, IToString {
395
+ A: P;
396
+ B: P;
397
+ C: P;
398
+ abstract get a(): number;
399
+ abstract get b(): number;
400
+ abstract get c(): number;
401
+ constructor(A: P, B: P, C: P);
402
+ get alpha(): number;
403
+ get beta(): number;
404
+ get gamma(): number;
405
+ get perimeter(): number;
406
+ get semiperimeter(): number;
407
+ get area(): number;
408
+ get base(): number;
409
+ get height(): number;
410
+ }
411
+ declare class Triangle2D extends ATriangle<Vec2> implements IToString {
412
+ get a(): number;
413
+ get b(): number;
414
+ get c(): number;
415
+ }
416
+ declare class Triangle3D extends ATriangle<Vec3> {
417
+ get a(): number;
418
+ get b(): number;
419
+ get c(): number;
420
+ }
421
+
422
+ interface IMat4 {
423
+ m00: number;
424
+ m01: number;
425
+ m02: number;
426
+ m03: number;
427
+ m10: number;
428
+ m11: number;
429
+ m12: number;
430
+ m13: number;
431
+ m20: number;
432
+ m21: number;
433
+ m22: number;
434
+ m23: number;
435
+ m30: number;
436
+ m31: number;
437
+ m32: number;
438
+ m33: number;
439
+ }
440
+ type Mat4Array = [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number];
441
+ type Mat4NestedArray = [[number, number, number, number], [number, number, number, number], [number, number, number, number], [number, number, number, number]];
442
+ type Mat4String = `${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
443
+ type Mat4Like = IMat4 | Mat4Array | Mat4NestedArray | Mat4String | number;
444
+ declare class Mat4 implements IMat4 {
445
+ protected _raw: Mat4Array;
446
+ get m00(): number;
447
+ set m00(val: number);
448
+ get m01(): number;
449
+ set m01(val: number);
450
+ get m02(): number;
451
+ set m02(val: number);
452
+ get m03(): number;
453
+ set m03(val: number);
454
+ get m10(): number;
455
+ set m10(val: number);
456
+ get m11(): number;
457
+ set m11(val: number);
458
+ get m12(): number;
459
+ set m12(val: number);
460
+ get m13(): number;
461
+ set m13(val: number);
462
+ get m20(): number;
463
+ set m20(val: number);
464
+ get m21(): number;
465
+ set m21(val: number);
466
+ get m22(): number;
467
+ set m22(val: number);
468
+ get m23(): number;
469
+ set m23(val: number);
470
+ get m30(): number;
471
+ set m30(val: number);
472
+ get m31(): number;
473
+ set m31(val: number);
474
+ get m32(): number;
475
+ set m32(val: number);
476
+ get m33(): number;
477
+ set m33(val: number);
478
+ static resolve(a: unknown): Mat4;
479
+ static cast(a: unknown): Mat4 | undefined;
480
+ static is(a: unknown): a is Mat4Like;
481
+ static orthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Mat4;
482
+ static perspective(fov: number, aspect: number, near: number, far: number): Mat4;
483
+ static pointAt(position: Vec3Like, target: Vec3Like, up: Vec3Like): Mat4;
484
+ constructor(init?: Mat4Array);
485
+ toArray(): Mat4Array;
486
+ toNestetArray(): Mat4NestedArray;
487
+ toJSON(): IMat4;
488
+ toString(): Mat4String;
489
+ clone(): Mat4;
490
+ equals(mat: Mat4Like): boolean;
491
+ add(mat: Mat4Like): Mat4;
492
+ subtract(mat: Mat4Like): Mat4;
493
+ multiply(mat: Mat4Like): Mat4;
494
+ multiply(scalar: number): Mat4;
495
+ multiply(vec: Vec3Like): Vec3;
496
+ translate(x: number, y: number, z: number): this;
497
+ translate(vec: Vec3Like): this;
498
+ rotateX(angle: number): Mat4;
499
+ rotateY(angle: number): Mat4;
500
+ rotateZ(angle: number): Mat4;
501
+ rotate(x: number, y: number, z: number): this;
502
+ rotate(vec: Vec3Like): this;
503
+ scale(x: number, y: number, z: number): this;
504
+ scale(vec: Vec3Like): this;
505
+ inverse(): Mat4;
506
+ toMat3(): Mat3Like;
507
+ }
508
+
509
+ interface IMat3 {
510
+ m00: number;
511
+ m01: number;
512
+ m02: number;
513
+ m10: number;
514
+ m11: number;
515
+ m12: number;
516
+ m20: number;
517
+ m21: number;
518
+ m22: number;
519
+ }
520
+ type Mat3Array = [number, number, number, number, number, number, number, number, number];
521
+ type Mat3NestedArray = [[number, number, number], [number, number, number], [number, number, number]];
522
+ type Mat3String = `${number},${number},${number},${number},${number},${number},${number},${number},${number}`;
523
+ type Mat3Like = IMat3 | Mat3Array | Mat3NestedArray | Mat3String | number;
524
+ declare class Mat3 implements IMat3 {
525
+ protected _raw: Mat3Array;
526
+ get m00(): number;
527
+ set m00(val: number);
528
+ get m01(): number;
529
+ set m01(val: number);
530
+ get m02(): number;
531
+ set m02(val: number);
532
+ get m10(): number;
533
+ set m10(val: number);
534
+ get m11(): number;
535
+ set m11(val: number);
536
+ get m12(): number;
537
+ set m12(val: number);
538
+ get m20(): number;
539
+ set m20(val: number);
540
+ get m21(): number;
541
+ set m21(val: number);
542
+ get m22(): number;
543
+ set m22(val: number);
544
+ static resolve(a: unknown): Mat3;
545
+ static cast(a: unknown): Mat3 | undefined;
546
+ static is(a: unknown): a is Mat3Like;
547
+ static projection(width: number, height: number): Mat3;
548
+ constructor(init?: Mat3Array);
549
+ toArray(): Mat3Array;
550
+ toNestetArray(): Mat3NestedArray;
551
+ toJSON(): IMat3;
552
+ toString(): Mat3String;
553
+ clone(): Mat3;
554
+ equals(mat: Mat3Like): boolean;
555
+ add(mat: Mat3Like): Mat3;
556
+ subtract(mat: Mat3Like): Mat3;
557
+ multiply(mat: Mat3Like): Mat3;
558
+ multiply(scalar: number): Mat3;
559
+ translate(x: number, y: number): Mat3;
560
+ translate(vec: Vec2Like): Mat3;
561
+ rotate(angle: number): Mat3;
562
+ scale(x: number, y: number): Mat3;
563
+ scale(vec: Vec2Like): Mat3;
564
+ determinant(): number;
565
+ inverse(): Mat3;
566
+ toMat4(): Mat4Like;
567
+ }
568
+
569
+ interface IRGB {
570
+ red: number;
571
+ green: number;
572
+ blue: number;
573
+ }
574
+ type RGBArray = [number, number, number];
575
+ type RGBString = `rgb(${number},${number},${number})`;
576
+ type RGBLike = IRGB | RGBArray | RGBString;
577
+ interface IRBBA extends IRGB {
578
+ alpha: number;
579
+ }
580
+ type RGBAArray = [number, number, number, number];
581
+ type RGBAString = `rgba(${number},${number},${number},${number})`;
582
+ type RGBALike = IRBBA | RGBAArray | RGBAString;
583
+ type IAnyRGB = IRGB | IRBBA;
584
+ type AnyRGBArray = RGBArray | RGBAArray;
585
+ type AnyRGBString = RGBString | RGBAString;
586
+ type AnyRGBLike = IAnyRGB | AnyRGBArray | AnyRGBString | HexLike | number;
587
+ declare class RGBAColor implements IRBBA {
588
+ private _red;
589
+ get red(): number;
590
+ set red(val: number);
591
+ private _green;
592
+ get green(): number;
593
+ set green(val: number);
594
+ private _blue;
595
+ get blue(): number;
596
+ set blue(val: number);
597
+ private _alpha;
598
+ get alpha(): number;
599
+ set alpha(val: number);
600
+ static resolve(a: unknown): RGBAColor;
601
+ static cast(a: unknown): RGBAColor | undefined;
602
+ static is(a: unknown): a is AnyRGBLike;
603
+ constructor(red: number, green: number, blue: number, alpha?: number);
604
+ toArray(withAlpha?: boolean): AnyRGBArray;
605
+ toJSON(withAlpha?: boolean): IAnyRGB;
606
+ toString(withAlpha?: boolean): AnyRGBString;
607
+ toHSL(withAlpha?: boolean): HSLColor;
608
+ invert(withAlpha?: boolean): RGBAColor;
609
+ }
610
+ interface IHSL {
611
+ hue: number;
612
+ saturation: number;
613
+ luminace: number;
614
+ }
615
+ type HSLArray = [number, number, number];
616
+ type HSLString = `hsl(${number},${number},${number})`;
617
+ type HSLLike = IHSL | HSLArray | HSLString;
618
+ interface IHSLA extends IHSL {
619
+ alpha: number;
620
+ }
621
+ type HSLAArray = [number, number, number, number];
622
+ type HSLAString = `hsla(${number},${number},${number},${number})`;
623
+ type HSLALike = IHSLA | HSLAArray | HSLAString;
624
+ type IAnyHSL = IHSL | IHSLA;
625
+ type AnyHSLArray = HSLArray | HSLAArray;
626
+ type AnyHSLString = HSLString | HSLAString;
627
+ type AnyHSLLike = IAnyHSL | AnyHSLArray | AnyHSLString | HexLike | number;
628
+ declare class HSLColor implements IHSLA {
629
+ private _hue;
630
+ get hue(): number;
631
+ set hue(val: number);
632
+ private _saturation;
633
+ get saturation(): number;
634
+ set saturation(val: number);
635
+ private _luminace;
636
+ get luminace(): number;
637
+ set luminace(val: number);
638
+ private _alpha;
639
+ get alpha(): number;
640
+ set alpha(val: number);
641
+ static resolve(a: unknown): HSLColor;
642
+ static cast(a: unknown): HSLColor | undefined;
643
+ static is(a: unknown): boolean;
644
+ constructor(hue: number, saturation: number, luminace: number, alpha?: number);
645
+ toArray(withAlpha?: boolean): AnyHSLArray;
646
+ toJSON(withAlpha?: boolean): IAnyHSL;
647
+ toString(withAlpha?: boolean): AnyHSLString;
648
+ toRGB(withAlpha?: boolean): RGBAColor;
649
+ invert(withAlpha?: boolean): HSLColor;
650
+ }
651
+ type AnyColor = RGBAColor | HSLColor;
652
+ type AnyColorArray = AnyRGBArray | AnyHSLArray;
653
+ type AnyColorString = AnyRGBString | AnyHSLString;
654
+ type IColor = IAnyRGB | IAnyHSL;
655
+ type AnyColorLike = AnyColorArray | AnyColorString | IColor | HexLike | number;
656
+ declare function resolveColor(a: unknown, preferHSL?: boolean): AnyColor;
657
+ declare function castColor(a: unknown, preferHSL?: boolean): AnyColor | undefined;
658
+
659
+ interface IQuaternion {
660
+ w: number;
661
+ x: number;
662
+ y: number;
663
+ z: number;
664
+ }
665
+ type QuaternionArray = [number, number, number, number];
666
+ type QuaternionString = `${number} + ${number}i + ${number}j + ${number}k`;
667
+ type QuaternionLike = IQuaternion | QuaternionArray | QuaternionString;
668
+ declare class Quaternion {
669
+ w: number;
670
+ x: number;
671
+ y: number;
672
+ z: number;
673
+ static is(a: unknown): a is IQuaternion;
674
+ static resolve(a: unknown): Quaternion;
675
+ static cast(a: unknown): Quaternion | undefined;
676
+ static fromAxisAngle(axis: Vec3Like, angle: number): Quaternion;
677
+ static fromEuler(x: number, y: number, z: number): Quaternion;
678
+ static fromEuler(vec: Vec3Like): Quaternion;
679
+ constructor(w?: number, x?: number, y?: number, z?: number);
680
+ toArray(): QuaternionArray;
681
+ toString(): QuaternionString;
682
+ toJSON(): IQuaternion;
683
+ clone(): Quaternion;
684
+ add(a: QuaternionLike): Quaternion;
685
+ offset(a: QuaternionLike): this;
686
+ subtract(a: QuaternionLike): Quaternion;
687
+ negative(): Quaternion;
688
+ length(sqrt?: boolean): number;
689
+ normalize(): Quaternion;
690
+ multiply(a: QuaternionLike): Quaternion;
691
+ multiplyVector(x: number, y: number, z: number): Vec3;
692
+ multiplyVector(vec: Vec3Like): Vec3;
693
+ scale(scalar: number): Quaternion;
694
+ dot(a: QuaternionLike): number;
695
+ inverse(): Quaternion;
696
+ divide(a: QuaternionLike): Quaternion;
697
+ conjugate(): Quaternion;
698
+ exp(): Quaternion;
699
+ log(): Quaternion;
700
+ toVector(): Vec3;
701
+ toAxisAngle(): Vec3;
702
+ toEuler(): Vec3;
703
+ toMat3(): Mat3;
704
+ toMat4(): Mat4;
705
+ }
706
+
707
+ /**
708
+ * Represents a 3D transform for 3D graphics
709
+ */
710
+ declare class Transform {
711
+ /**
712
+ * The position of the object
713
+ */
714
+ position: Vec3;
715
+ /**
716
+ * The rotation of the object
717
+ */
718
+ rotation: Quaternion;
719
+ /**
720
+ * The scale of the object
721
+ */
722
+ scale: Vec3;
723
+ /**
724
+ * Create a new transform with `position`, `rotation` and `scale`
725
+ * @param position The position as a Vec3
726
+ * @param rotation The rotation as a Quaternion
727
+ * @param scale The scale as a Vec3
728
+ */
729
+ constructor(position: Vec3Like, rotation: QuaternionLike, scale: Vec3Like);
730
+ /**
731
+ * Convert the transform into a 4x3 matrix
732
+ * @returns A 4x4 matrix from the transform
733
+ */
734
+ toMat4(): Mat4;
735
+ }
736
+
737
+ /**
738
+ * Clamp `value` between `min` and `max`
739
+ * @param value The input value
740
+ * @param min The minimum value
741
+ * @param max The maximum value
742
+ * @returns A value between `min` and `max`
743
+ */
744
+ declare function clamp<T extends number | bigint>(value: T, min: T, max: T): T;
745
+ /**
746
+ * Calculate the natural logarithm of the magnitude of a complex number `a+bia+bi`
747
+ * @param a The input value a
748
+ * @param b The input value b
749
+ * @returns The result
750
+ */
751
+ declare function log_hypot(a: number, b: number): number;
752
+ declare const EPSILON = 1e-16;
753
+
754
+ 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 };