1
+ // @ts -nocheck
1
2
import {
2
3
cachedMethod ,
3
4
cachedGetter ,
@@ -19,14 +20,15 @@ function square(val) {
19
20
}
20
21
21
22
/**
22
- * @extends {number }
23
+ * @typedef {AVector & number } AVectorType
24
+ * @abstract
23
25
*/
24
26
class AVector {
25
27
/**
26
28
*
27
- * @param {number } x
28
- * @param {number } y
29
- * @param {number } z
29
+ * @param {number | (() => number) } x
30
+ * @param {number } [y]
31
+ * @param {number } [z]
30
32
*/
31
33
constructor ( x , y , z ) {
32
34
if ( typeof x === 'function' ) {
@@ -46,15 +48,15 @@ class AVector {
46
48
}
47
49
48
50
/**
49
- * @returns {AVector }
51
+ * @returns {AVectorType }
50
52
*/
51
53
normalize ( ) {
52
54
const { length } = this ;
53
55
return new this . constructor ( this . x / length , this . y / length , this . z / length ) ;
54
56
}
55
57
56
58
/**
57
- * @returns {AVector }
59
+ * @returns {AVectorType }
58
60
*/
59
61
norm ( ) {
60
62
return this . normalize ( ) ;
@@ -75,7 +77,7 @@ class AVector {
75
77
/**
76
78
*
77
79
* @param {AVector } v
78
- * @returns {AVector }
80
+ * @returns {AVectorType }
79
81
*/
80
82
cross ( v ) {
81
83
return new this . constructor (
@@ -88,7 +90,7 @@ class AVector {
88
90
/**
89
91
*
90
92
* @param {AVector } v
91
- * @returns {AVector }
93
+ * @returns {AVectorType }
92
94
*/
93
95
crossNormalize ( v ) {
94
96
const vec = this . cross ( v ) ;
@@ -102,7 +104,7 @@ class AVector {
102
104
/**
103
105
*
104
106
* @param {AVector } v
105
- * @returns {AVector }
107
+ * @returns {AVectorType }
106
108
*/
107
109
cn ( v ) {
108
110
return this . crossNormalize ( v ) ;
@@ -240,6 +242,54 @@ class AVector {
240
242
get len ( ) {
241
243
return this . length ;
242
244
}
245
+
246
+ /**
247
+ *
248
+ * @returns {number }
249
+ */
250
+ get x ( ) {
251
+ return this [ AXES ] [ X ] ;
252
+ }
253
+
254
+ /**
255
+ *
256
+ * @throws SetNotImplementedError
257
+ */
258
+ set x ( _ ) {
259
+ throw new Error ( 'set x() not implemented' ) ;
260
+ }
261
+
262
+ /**
263
+ *
264
+ * @returns {number }
265
+ */
266
+ get y ( ) {
267
+ return this [ AXES ] [ Y ] ;
268
+ }
269
+
270
+ /**
271
+ *
272
+ * @throws SetNotImplementedError
273
+ */
274
+ set y ( _ ) {
275
+ throw new Error ( 'set y() not implemented' ) ;
276
+ }
277
+
278
+ /**
279
+ *
280
+ * @returns {number }
281
+ */
282
+ get z ( ) {
283
+ return this [ AXES ] [ Z ] ;
284
+ }
285
+
286
+ /**
287
+ *
288
+ * @throws SetNotImplementedError
289
+ */
290
+ set z ( _ ) {
291
+ throw new Error ( 'set z() not implemented' ) ;
292
+ }
243
293
}
244
294
245
295
cachedValueOf ( AVector ) ;
@@ -255,6 +305,9 @@ cachedMethod(AVector, 'toArray');
255
305
cachedGetter ( AVector , 'length' ) ;
256
306
cachedGetter ( AVector , 'lengthSq' ) ;
257
307
308
+ /**
309
+ * @typedef {Vector & number } VectorType
310
+ */
258
311
export class Vector extends AVector {
259
312
/**
260
313
*
@@ -305,80 +358,59 @@ export class Vector extends AVector {
305
358
}
306
359
307
360
/**
308
- * @param {() => number } alg
361
+ * @param {(vector: VectorType ) => number } alg
309
362
* @returns {this }
310
363
*/
311
364
calc ( alg ) {
312
365
return operatorCalc ( alg , this ) ;
313
366
}
314
367
315
368
/**
316
- *
317
- * @returns {Vector }
369
+ * @returns {Vector & number }
318
370
*/
319
371
clone ( ) {
320
372
return new Vector ( this . x , this . y , this . z ) ;
321
373
}
322
374
}
323
375
376
+ /**
377
+ * @typedef {Victor & number } VictorType
378
+ */
324
379
export class Victor extends AVector {
325
380
/**
326
- *
327
- * @returns {number }
328
- */
329
- get x ( ) {
330
- return this [ AXES ] [ X ] ;
331
- }
332
-
333
- /**
334
- *
335
- * @throws SetNotImplementedError
336
- */
337
- set x ( _ ) {
338
- throw new Error ( 'set x() not implemented' ) ;
339
- }
340
-
341
- /**
342
- *
343
- * @returns {number }
344
- */
345
- get y ( ) {
346
- return this [ AXES ] [ Y ] ;
347
- }
348
-
349
- /**
350
- *
351
- * @throws SetNotImplementedError
381
+ * @returns {VectorType }
352
382
*/
353
- set y ( _ ) {
354
- throw new Error ( 'set y() not implemented' ) ;
355
- }
356
-
357
- /**
358
- *
359
- * @returns {number }
360
- */
361
- get z ( ) {
362
- return this [ AXES ] [ Z ] ;
363
- }
364
-
365
- /**
366
- *
367
- * @throws SetNotImplementedError
368
- */
369
- set z ( _ ) {
370
- throw new Error ( 'set z() not implemented' ) ;
371
- }
372
-
373
383
toVector ( ) {
374
384
return new Vector ( this . x , this . y , this . z ) ;
375
385
}
376
386
}
377
387
378
388
/**
379
389
* @param {() => number } alg
380
- * @return {Vector | Victor | number }
390
+ * @return {VectorType | VictorType }
381
391
*/
382
392
export function calc ( alg ) {
383
393
return operatorCalc ( alg ) ;
384
394
}
395
+
396
+ /**
397
+ * @typedef {(x: number, y: number, z: number) => VectorType } vector
398
+ * @param {number } x
399
+ * @param {number } y
400
+ * @param {number } z
401
+ * @return {VectorType }
402
+ */
403
+ export function vector ( x , y , z ) {
404
+ return new Vector ( x , y , z ) ;
405
+ }
406
+
407
+ /**
408
+ * @typedef {(x: number, y: number, z: number) => VictorType } victor
409
+ * @param {number } x
410
+ * @param {number } y
411
+ * @param {number } z
412
+ * @return {VictorType }
413
+ */
414
+ export function victor ( x , y , z ) {
415
+ return new Victor ( x , y , z ) ;
416
+ }
0 commit comments