toosoon-utils 1.4.0 → 2.0.0

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 (50) hide show
  1. package/README.md +27 -23
  2. package/package.json +8 -4
  3. package/tsconfig.json +1 -3
  4. package/lib/classes/_pool.d.ts +0 -56
  5. package/lib/classes/_pool.js +0 -92
  6. package/lib/classes/color-scale.d.ts +0 -52
  7. package/lib/classes/color-scale.js +0 -160
  8. package/lib/classes/frame-rate.d.ts +0 -25
  9. package/lib/classes/frame-rate.js +0 -48
  10. package/lib/colors.d.ts +0 -155
  11. package/lib/colors.js +0 -367
  12. package/lib/constants.d.ts +0 -162
  13. package/lib/constants.js +0 -170
  14. package/lib/dom.d.ts +0 -25
  15. package/lib/dom.js +0 -47
  16. package/lib/files.d.ts +0 -14
  17. package/lib/files.js +0 -38
  18. package/lib/functions.d.ts +0 -22
  19. package/lib/functions.js +0 -53
  20. package/lib/geometry.d.ts +0 -89
  21. package/lib/geometry.js +0 -128
  22. package/lib/index.d.ts +0 -10
  23. package/lib/index.js +0 -39
  24. package/lib/maths.d.ts +0 -161
  25. package/lib/maths.js +0 -219
  26. package/lib/now.d.ts +0 -5
  27. package/lib/now.js +0 -28
  28. package/lib/prng.d.ts +0 -124
  29. package/lib/prng.js +0 -234
  30. package/lib/random.d.ts +0 -91
  31. package/lib/random.js +0 -162
  32. package/lib/strings.d.ts +0 -14
  33. package/lib/strings.js +0 -18
  34. package/lib/tsconfig.tsbuildinfo +0 -1
  35. package/lib/types.d.ts +0 -18
  36. package/lib/types.js +0 -1
  37. package/src/classes/_pool.ts +0 -92
  38. package/src/classes/color-scale.ts +0 -181
  39. package/src/classes/frame-rate.ts +0 -49
  40. package/src/colors.ts +0 -389
  41. package/src/constants.ts +0 -172
  42. package/src/dom.ts +0 -50
  43. package/src/files.ts +0 -42
  44. package/src/functions.ts +0 -56
  45. package/src/geometry.ts +0 -160
  46. package/src/maths.ts +0 -241
  47. package/src/prng.ts +0 -250
  48. package/src/random.ts +0 -162
  49. package/src/strings.ts +0 -19
  50. package/src/types.ts +0 -33
package/src/maths.ts DELETED
@@ -1,241 +0,0 @@
1
- /**
2
- * Check if a number is even
3
- *
4
- * @param {number} value Value to check
5
- * @returns {boolean} True if the given number is even, false otherwise
6
- */
7
- export function isEven(value: number): boolean {
8
- return !(value & 1);
9
- }
10
-
11
- /**
12
- * Check if a number is odd
13
- *
14
- * @param {number} value Value to check
15
- * @returns {boolean} True if the given number is odd, false otherwise
16
- */
17
- export function isOdd(value: number): boolean {
18
- return !!(value & 1);
19
- }
20
-
21
- /**
22
- * Check if a number is a power of 2
23
- *
24
- * @param {number} value Value to check
25
- * @returns {boolean} True if the given number is a power of 2, false otherwise
26
- */
27
- export function isPowerOf2(value: number): boolean {
28
- return (value & (value - 1)) === 0;
29
- }
30
-
31
- /**
32
- * Find closest power of 2 that fits a number
33
- *
34
- * @param {number} value Incoming value
35
- * @param {string} [mode='ceil'] Can be 'floor' | 'ceil' | 'round'
36
- * @returns {number} Power of 2
37
- */
38
- export function toPowerOf2(value: number, mode: 'floor' | 'ceil' | 'round' = 'ceil'): number {
39
- return Math.pow(2, Math[mode](Math.log(value) / Math.log(2)));
40
- }
41
-
42
- /**
43
- * Return the sign (positive or negative) of a number
44
- *
45
- * @param {number} value Value to check
46
- * @returns {number} 1 if the given number is positive, -1 if it is negative, otherwise 0
47
- */
48
- export function sign(value: number): number {
49
- if (value > 0) return 1;
50
- else if (value < 0) return -1;
51
- return 0;
52
- }
53
-
54
- /**
55
- * Clamp a value between two bounds
56
- *
57
- * @param {number} value Value to clamp
58
- * @param {number} [min=0] Minimum boundary
59
- * @param {number} [max=1] Maximum boundary
60
- * @returns {number} Clamped value
61
- */
62
- export function clamp(value: number, min: number = 0, max: number = 1): number {
63
- return Math.min(max, Math.max(min, value));
64
- }
65
-
66
- /**
67
- * Linear interpolation between two values (lerping)
68
- *
69
- * @param {number} value Normalized value to interpolate
70
- * @param {number} min Minimum value
71
- * @param {number} max Maximum value
72
- * @returns {number} Lerped value
73
- */
74
- export function lerp(value: number, min: number, max: number): number {
75
- return min + (max - min) * value;
76
- }
77
-
78
- /**
79
- * Triangular interpolation between two values
80
- *
81
- * @param {number} value Normalized value to interpolate
82
- * @param {number} min Minimum value
83
- * @param {number} max Maximum value
84
- * @param {number} target Triangle target value
85
- * @returns {number} Interpolated value
86
- */
87
- export function triLerp(value: number, min: number, max: number, target: number): number {
88
- const x = Math.pow(1 + Math.abs(target - max) / Math.abs(target - min), -1);
89
- return value <= x ? min - (min - target) * (value / x) : target - (target - max) * ((value - x) / (1 - x));
90
- }
91
-
92
- /**
93
- * Exponential interpolation between two values
94
- *
95
- * @param {number} value Value to interpolate
96
- * @param {number} currentMin Lower bound of the value's current range
97
- * @param {number} currentMax Upper bound of the value's current range
98
- * @param {number} targetMin Lower bound of the value's target range
99
- * @param {number} targetMax Upper bound of the value's target range
100
- * @returns {number} Interpolated value
101
- */
102
- export function expLerp(
103
- value: number,
104
- currentMin: number,
105
- currentMax: number,
106
- targetMin: number,
107
- targetMax: number
108
- ): number {
109
- return (
110
- targetMin *
111
- Math.pow(targetMax / targetMin, (clamp(value, currentMin, currentMax) - currentMin) / (currentMax - currentMin))
112
- );
113
- }
114
-
115
- /**
116
- * Normalize a value between two bounds
117
- *
118
- * @param {number} value Value to normalize
119
- * @param {number} min Minimum boundary
120
- * @param {number} max Maximum boundary
121
- * @returns {number} Normalized value
122
- */
123
- export function normalize(value: number, min: number, max: number): number {
124
- return (value - min) / (max - min);
125
- }
126
-
127
- /**
128
- * Re-map a number from one range to another
129
- *
130
- * @param {number} value Value to re-map
131
- * @param {number} currentMin Lower bound of the value's current range
132
- * @param {number} currentMax Upper bound of the value's current range
133
- * @param {number} targetMin Lower bound of the value's target range
134
- * @param {number} targetMax Upper bound of the value's target range
135
- * @returns {number} Re-mapped value
136
- */
137
- export function map(
138
- value: number,
139
- currentMin: number,
140
- currentMax: number,
141
- targetMin: number,
142
- targetMax: number
143
- ): number {
144
- return ((value - currentMin) / (currentMax - currentMin)) * (targetMax - targetMin) + targetMin;
145
- }
146
-
147
- /**
148
- * Round a number up to a nearest multiple
149
- *
150
- * @param {number} value Value to round
151
- * @param {number} [multiple=1] Multiple to round to
152
- * @returns {number} Closest multiple
153
- */
154
- export function roundTo(value: number, multiple: number = 1): number {
155
- if (multiple === 0) return value;
156
- return Math.round(value / multiple) * multiple;
157
- }
158
-
159
- /**
160
- * Modulo absolute a value based on a length
161
- *
162
- * @param {number} value Value to modulate
163
- * @param {number} length Total length
164
- * @returns {number} Modulated value
165
- */
166
- export function modAbs(value: number, length: number): number {
167
- if (value < 0) {
168
- return length + (value % length);
169
- }
170
- return value % length;
171
- }
172
-
173
- /**
174
- * Move back and forth a value between 0 and length, so that it is never larger than length and never smaller than 0
175
- *
176
- * @param {number} value Value to modulate
177
- * @param {number} length Total length
178
- * @returns {number} PingPonged value
179
- */
180
- export function pingPong(value: number, length: number): number {
181
- value = modAbs(value, length * 2);
182
- return length - Math.abs(value - length);
183
- }
184
-
185
- /**
186
- * Smooth a value using cubic Hermite interpolation
187
- *
188
- * @param {number} value Value to smooth
189
- * @param {number} [min=0] Minimum boundary
190
- * @param {number} [max=1] Maximum boundary
191
- * @returns {number} Normalized smoothed value
192
- */
193
- export function smoothstep(value: number, min: number = 0, max: number = 1): number {
194
- const x = clamp(normalize(value, min, max));
195
- return x * x * (3 - 2 * x);
196
- }
197
-
198
- /**
199
- * Re-map the [0, 1] interval into [0, 1] parabola, such that corners are remaped to 0 and the center to 1
200
- * -> parabola(0) = parabola(1) = 0, and parabola(0.5) = 1
201
- *
202
- * @param {number} x Normalized coordinate on X axis
203
- * @param {number} [power=1] Parabola power
204
- * @returns {number} Normalized re-mapped value
205
- */
206
- export function parabola(x: number, power: number = 1): number {
207
- return Math.pow(4 * x * (1 - x), power);
208
- }
209
-
210
- /**
211
- * Return the sum of numbers
212
- *
213
- * @param {number[]} array Array of numbers
214
- * @returns {number} Total sum
215
- */
216
- export function sum(array: number[]): number {
217
- return array.reduce((previous, current) => previous + current);
218
- }
219
-
220
- /**
221
- * Return the average of numbers
222
- *
223
- * @param {number[]} array Array of numbers
224
- * @returns {number} Total average
225
- */
226
- export function average(array: number[]): number {
227
- return sum(array) / array.length;
228
- }
229
-
230
- /**
231
- * Smoothly interpolate a number toward another
232
- *
233
- * @param {number} value Value to interpolate
234
- * @param {number} target Destination of the interpolation
235
- * @param {number} damping A higher value will make the movement more sudden, and a lower value will make the movement more gradual
236
- * @param {number} delta Delta time (in seconds)
237
- * @returns {number} Interpolated number
238
- */
239
- export function damp(value: number, target: number, damping: number, delta: number): number {
240
- return lerp(1 - Math.exp(-damping * delta), value, target);
241
- }
package/src/prng.ts DELETED
@@ -1,250 +0,0 @@
1
- /**
2
- * Produce a 128-bit hash value from a seed
3
- *
4
- * @param {string} seed Initial seed state
5
- * @returns {[number, number, number, number]} Hash numbers
6
- */
7
- export function cyrb128(seed: string): [number, number, number, number] {
8
- let h1 = 1779033703;
9
- let h2 = 3144134277;
10
- let h3 = 1013904242;
11
- let h4 = 2773480762;
12
- for (let i = 0, k; i < seed.length; i++) {
13
- k = seed.charCodeAt(i);
14
- h1 = h2 ^ Math.imul(h1 ^ k, 597399067);
15
- h2 = h3 ^ Math.imul(h2 ^ k, 2869860233);
16
- h3 = h4 ^ Math.imul(h3 ^ k, 951274213);
17
- h4 = h1 ^ Math.imul(h4 ^ k, 2716044179);
18
- }
19
- h1 = Math.imul(h3 ^ (h1 >>> 18), 597399067);
20
- h2 = Math.imul(h4 ^ (h2 >>> 22), 2869860233);
21
- h3 = Math.imul(h1 ^ (h3 >>> 17), 951274213);
22
- h4 = Math.imul(h2 ^ (h4 >>> 19), 2716044179);
23
- return [(h1 ^ h2 ^ h3 ^ h4) >>> 0, (h2 ^ h1) >>> 0, (h3 ^ h1) >>> 0, (h4 ^ h1) >>> 0];
24
- }
25
-
26
- // *********************
27
- // PRNG Algorithms
28
- // *********************
29
-
30
- /**
31
- * Simple Fast Counter, Generator with a 128-bit state
32
- *
33
- * @param {number} a
34
- * @param {number} b
35
- * @param {number} c
36
- * @param {number} d
37
- * @returns {number} Pseudo-random number
38
- */
39
- export function sfc32(a: number, b: number, c: number, d: number): number {
40
- a >>>= 0;
41
- b >>>= 0;
42
- c >>>= 0;
43
- d >>>= 0;
44
- let t = (a + b) | 0;
45
- a = b ^ (b >>> 9);
46
- b = (c + (c << 3)) | 0;
47
- c = (c << 21) | (c >>> 11);
48
- d = (d + 1) | 0;
49
- t = (t + d) | 0;
50
- c = (c + t) | 0;
51
- return (t >>> 0) / 4294967296;
52
- }
53
-
54
- /**
55
- * SplitMix32, Generator with a 32-bit state
56
- *
57
- * @param {number} a
58
- * @returns {number} Pseudo-random number
59
- */
60
- export function splitmix32(a: number): number {
61
- a |= 0;
62
- a = (a + 0x9e3779b9) | 0;
63
- var t = a ^ (a >>> 16);
64
- t = Math.imul(t, 0x21f0aaad);
65
- t = t ^ (t >>> 15);
66
- t = Math.imul(t, 0x735a2d97);
67
- return ((t = t ^ (t >>> 15)) >>> 0) / 4294967296;
68
- }
69
-
70
- /**
71
- * Mulberry32, Generator with a 32-bit state
72
- *
73
- * @param {number} a
74
- * @returns {number} Pseudo-random number
75
- */
76
- export function mulberry32(a: number): number {
77
- let t = (a += 0x6d2b79f5);
78
- t = Math.imul(t ^ (t >>> 15), t | 1);
79
- t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
80
- return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
81
- }
82
-
83
- /**
84
- * Jenkins' Small Fast, Generator with a 32-bit state
85
- *
86
- * @param {number} a
87
- * @returns {number} Pseudo-random number
88
- */
89
- export function jsf32(a: number, b: number, c: number, d: number): number {
90
- a |= 0;
91
- b |= 0;
92
- c |= 0;
93
- d |= 0;
94
- let t = (a - ((b << 27) | (b >>> 5))) | 0;
95
- a = b ^ ((c << 17) | (c >>> 15));
96
- b = (c + d) | 0;
97
- c = (d + t) | 0;
98
- d = (a + t) | 0;
99
- return (d >>> 0) / 4294967296;
100
- }
101
-
102
- /**
103
- * xoshiro128**, Generator with a 128-bit state
104
- *
105
- * @param {number} a
106
- * @returns {number} Pseudo-random number
107
- */
108
- export function xoshiro128ss(a: number, b: number, c: number, d: number): number {
109
- let t = b << 9;
110
- let r = a * 5;
111
- r = ((r << 7) | (r >>> 25)) * 9;
112
- c ^= a;
113
- d ^= b;
114
- b ^= c;
115
- a ^= d;
116
- c ^= t;
117
- d = (d << 11) | (d >>> 21);
118
- return (r >>> 0) / 4294967296;
119
- }
120
-
121
- // *********************
122
- // PRNG Functions
123
- // *********************
124
-
125
- type PRNGParameters = string | { seed: string; algorithm: (...args: number[]) => number };
126
-
127
- /**
128
- * Generate a pseudo-random number in the interval [0, 1]
129
- * PRNG equivalent of `Math.random()`
130
- *
131
- * @param {string|object} prng
132
- * @returns {number} Pseudo-random number
133
- */
134
- export function random(prng: PRNGParameters): number {
135
- const seed = typeof prng === 'string' ? prng : prng.seed;
136
- const algorithm = typeof prng === 'string' ? splitmix32 : prng.algorithm;
137
-
138
- const hashes = cyrb128(seed);
139
- return algorithm(...hashes);
140
- }
141
-
142
- /**
143
- * Generate a pseudo-random boolean (true or false)
144
- *
145
- * @param {string|object} prng
146
- * @param {number} [probability=0.5] Probability to get true
147
- * @returns {boolean} Either `true` or `false`
148
- */
149
- export function randomBoolean(prng: PRNGParameters, probability: number = 0.5): boolean {
150
- return random(prng) < probability;
151
- }
152
-
153
- /**
154
- * Generate a pseudo-random sign (1 or -1)
155
- *
156
- * @param {string|object} prng
157
- * @param {number} [probability=0.5] Probability to get 1
158
- * @returns {number} Either 1 or -1
159
- */
160
- export function randomSign(prng: PRNGParameters, probability: number = 0.5): number {
161
- return randomBoolean(prng, probability) ? 1 : -1;
162
- }
163
-
164
- /**
165
- * Generate a pseudo-random floating-point number within a specified range
166
- *
167
- * @param {string|object} prng
168
- * @param {number} [min=0] Minimum boundary
169
- * @param {number} [max=1] Maximum boundary
170
- * @param {number} [precision=2] Number of digits after the decimal point
171
- * @returns {number} Generated float
172
- */
173
- export function randomFloat(prng: PRNGParameters, min: number = 0, max: number = 1, precision: number = 2): number {
174
- return parseFloat(Math.min(min + random(prng) * (max - min), max).toFixed(precision));
175
- }
176
-
177
- /**
178
- * Generate a pseudo-random integer number within a specified range
179
- *
180
- * @param {string|object} prng
181
- * @param {number} min Minimum boundary
182
- * @param {number} max Maximum boundary
183
- * @returns {number} Generated integer
184
- */
185
- export function randomInt(prng: PRNGParameters, min: number, max: number): number {
186
- return Math.floor(random(prng) * (max - min + 1) + min);
187
- }
188
-
189
- /**
190
- * Generate a pseudo-random hexadecimal color
191
- *
192
- * @param {string|object} prng
193
- * @returns {string} Generated hexadecimal color
194
- */
195
- export function randomHexColor(prng: PRNGParameters): string {
196
- return '#' + ('00000' + ((random(prng) * (1 << 24)) | 0).toString(16)).slice(-6);
197
- }
198
-
199
- /**
200
- * Pick a pseudo-random item from a given array
201
- *
202
- * @param {string|object} prng
203
- * @param {T[]} array Array to pick the item from
204
- * @returns {T|undefined} Random item picked
205
- */
206
- export function randomItem<T = unknown>(prng: PRNGParameters, array: T[]): T | undefined {
207
- if (array.length === 0) return undefined;
208
- return array[randomInt(prng, 0, array.length - 1)];
209
- }
210
-
211
- /**
212
- * Pick a pseudo-random property value from a given object
213
- *
214
- * @param {string|object} prng
215
- * @param {object} object Object to pick the property from
216
- * @returns {T|undefined} Random item picked
217
- */
218
- export function randomObjectProperty<T = unknown>(prng: PRNGParameters, object: Record<string, T>): T | undefined {
219
- const keys = Object.keys(object);
220
- const key = randomItem(prng, keys);
221
- if (key && object.hasOwnProperty(key)) {
222
- return object[key as keyof object];
223
- }
224
- }
225
-
226
- /**
227
- * Select a pseudo-random index from an array of weighted items
228
- *
229
- * @param {string|object} prng
230
- * @param {number[]} weights Array of weights
231
- * @returns {number} Random index based on weights
232
- */
233
- export function randomIndex(prng: PRNGParameters, weights: number[]): number {
234
- if (weights.length === 0) return -1;
235
-
236
- let totalWeight = 0;
237
- for (let weight of weights) {
238
- totalWeight += weight;
239
- }
240
-
241
- if (totalWeight <= 0) console.warn('PRNG randomIndex()', 'Weights must sum to > 0', totalWeight);
242
-
243
- let weight = random(prng) * totalWeight;
244
- for (let i = 0; i < weights.length; i++) {
245
- if (weight < weights[i]) return i;
246
- weight -= weights[i];
247
- }
248
-
249
- return 0;
250
- }
package/src/random.ts DELETED
@@ -1,162 +0,0 @@
1
- import { radToSphere } from './geometry';
2
- import { Vector2, Vector3 } from './types';
3
-
4
- /**
5
- * Generate a random boolean (true or false)
6
- *
7
- * @param {number} [probability=0.5] Probability to get true
8
- * @returns {boolean} Either `true` or `false`
9
- */
10
- export function randomBoolean(probability: number = 0.5): boolean {
11
- return Math.random() < probability;
12
- }
13
-
14
- /**
15
- * Generate a random sign (1 or -1)
16
- *
17
- * @param {number} [probability=0.5] Probability to get 1
18
- * @returns {number} Either 1 or -1
19
- */
20
- export function randomSign(probability: number = 0.5): number {
21
- return randomBoolean(probability) ? 1 : -1;
22
- }
23
-
24
- /**
25
- * Generate a random floating-point number within a specified range
26
- *
27
- * @param {number} [min=0] Minimum boundary
28
- * @param {number} [max=1] Maximum boundary
29
- * @param {number} [precision=2] Number of digits after the decimal point
30
- * @returns {number} Generated float
31
- */
32
- export function randomFloat(min: number = 0, max: number = 1, precision: number = 2): number {
33
- return parseFloat(Math.min(min + Math.random() * (max - min), max).toFixed(precision));
34
- }
35
-
36
- /**
37
- * Generate a random integer number within a specified range
38
- *
39
- * @param {number} min Minimum boundary
40
- * @param {number} max Maximum boundary
41
- * @returns {number} Generated integer
42
- */
43
- export function randomInt(min: number, max: number): number {
44
- return Math.floor(Math.random() * (max - min + 1) + min);
45
- }
46
-
47
- /**
48
- * Generate a random hexadecimal color
49
- *
50
- * @returns {string} Generated hexadecimal color
51
- */
52
- export function randomHexColor(): string {
53
- return '#' + ('00000' + ((Math.random() * (1 << 24)) | 0).toString(16)).slice(-6);
54
- }
55
-
56
- /**
57
- * Pick a random item from a given array
58
- *
59
- * @param {T[]} array Array to pick the item from
60
- * @returns {T|undefined} Random item picked
61
- */
62
- export function randomItem<T = unknown>(array: T[]): T | undefined {
63
- if (array.length === 0) return undefined;
64
- return array[randomInt(0, array.length - 1)];
65
- }
66
-
67
- /**
68
- * Pick a random property value from a given object
69
- *
70
- * @param {object} object Object to pick the property from
71
- * @returns {T|undefined} Random item picked
72
- */
73
- export function randomObjectProperty<T = unknown>(object: Record<string, T>): T | undefined {
74
- const keys = Object.keys(object);
75
- const key = randomItem(keys);
76
- if (key && object.hasOwnProperty(key)) {
77
- return object[key as keyof object];
78
- }
79
- }
80
-
81
- /**
82
- * Select a random index from an array of weighted items
83
- *
84
- * @param {number[]} weights Array of weights
85
- * @returns {number} Random index based on weights
86
- */
87
- export function randomIndex(weights: number[]): number {
88
- if (weights.length === 0) return -1;
89
-
90
- let totalWeight = 0;
91
- for (let weight of weights) {
92
- totalWeight += weight;
93
- }
94
-
95
- if (totalWeight <= 0) {
96
- console.warn('randomIndex()', 'Weights must sum to > 0', totalWeight);
97
- }
98
-
99
- let weight = Math.random() * totalWeight;
100
- for (let i = 0; i < weights.length; i++) {
101
- if (weight < weights[i]) return i;
102
- weight -= weights[i];
103
- }
104
-
105
- return 0;
106
- }
107
-
108
- // *********************
109
- // Geometry
110
- // *********************
111
- /**
112
- * Produce a random 2D point around the perimiter of a unit circle
113
- *
114
- * @param {number} [radius=1] Radius of the circle
115
- * @param {Vector2} [target] Target vector
116
- * @returns {Vector2} Random 2D point on circle
117
- */
118
- export function onCircle(radius: number = 1, target: Vector2 = { x: 0, y: 0 }): Vector2 {
119
- const angle = Math.random() * 2.0 * Math.PI;
120
- target.x = radius * Math.cos(angle);
121
- target.y = radius * Math.sin(angle);
122
- return target;
123
- }
124
-
125
- /**
126
- * Produce a random 2D point inside a unit circle
127
- *
128
- * @param {number} [radius=1] Radius of the circle
129
- * @param {Vector2} [target] Target vector
130
- * @returns {Vector2} Random 2D point inside circle
131
- */
132
- export function insideCircle(radius: number = 1, target: Vector2 = { x: 0, y: 0 }): Vector2 {
133
- radius *= Math.random();
134
- return onCircle(radius, target);
135
- }
136
-
137
- /**
138
- * Produce a random 3D point on the surface of a unit sphere
139
- *
140
- * @param {number} [radius=1] Radius of the sphere
141
- * @param {Vector3} [target] Target vector
142
- * @returns {Vector3} Random 3D point on sphere
143
- */
144
- export function onSphere(radius: number = 1, target: Vector3 = { x: 0, y: 0, z: 0 }): Vector3 {
145
- const u = Math.random() * Math.PI * 2;
146
- const v = Math.random() * 2 - 1;
147
- const phi = u;
148
- const theta = Math.acos(v);
149
- return radToSphere(radius, phi, theta, target);
150
- }
151
-
152
- /**
153
- * Produce a random 3D point inside a unit sphere
154
- *
155
- * @param {number} [radius=1] Radius of the sphere
156
- * @param {Vector3} [target] Target vector
157
- * @returns {Vector3} Random 3D point inside sphere
158
- */
159
- export function insideSphere(radius: number = 1, target: Vector3 = { x: 0, y: 0, z: 0 }): Vector3 {
160
- radius *= Math.random();
161
- return onSphere(radius, target);
162
- }
package/src/strings.ts DELETED
@@ -1,19 +0,0 @@
1
- /**
2
- * Capitalize a string
3
- *
4
- * @param {string} string String to capitalize
5
- * @returns {string} Capitalized string
6
- */
7
- export function capitalize(string: string): string {
8
- return string.charAt(0).toUpperCase() + string.slice(1);
9
- }
10
-
11
- /**
12
- * Clean a path by removing params
13
- *
14
- * @param {string} path Path to clean
15
- * @returns {string} Cleaned path
16
- */
17
- export function cleanPath(path: string): string {
18
- return path.split('#')[0].split('?')[0];
19
- }
package/src/types.ts DELETED
@@ -1,33 +0,0 @@
1
- import { W3CX11 } from './constants';
2
-
3
- // *********************
4
- // Colors
5
- // *********************
6
- export type ColorName = keyof typeof W3CX11;
7
-
8
- export type ColorRepresentation = ColorName | string | number | [number, number, number];
9
-
10
- // *********************
11
- // Functions
12
- // *********************
13
- export interface Deferred<T> {
14
- promise: Promise<T>;
15
- resolve: (value: T | PromiseLike<T>) => void;
16
- reject: (reason?: unknown) => void;
17
- }
18
-
19
- // *********************
20
- // Geometry
21
- // *********************
22
- export interface Vector2 {
23
- x: number;
24
- y: number;
25
- }
26
-
27
- export interface Vector3 extends Vector2 {
28
- z: number;
29
- }
30
-
31
- export interface Vector4 extends Vector3 {
32
- w: number;
33
- }