1+ // @ts -nocheck
12import {
23 cachedMethod ,
34 cachedGetter ,
@@ -19,14 +20,15 @@ function square(val) {
1920}
2021
2122/**
22- * @extends {number }
23+ * @typedef {AVector & number } AVectorType
24+ * @abstract
2325 */
2426class AVector {
2527 /**
2628 *
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]
3032 */
3133 constructor ( x , y , z ) {
3234 if ( typeof x === 'function' ) {
@@ -46,15 +48,15 @@ class AVector {
4648 }
4749
4850 /**
49- * @returns {AVector }
51+ * @returns {AVectorType }
5052 */
5153 normalize ( ) {
5254 const { length } = this ;
5355 return new this . constructor ( this . x / length , this . y / length , this . z / length ) ;
5456 }
5557
5658 /**
57- * @returns {AVector }
59+ * @returns {AVectorType }
5860 */
5961 norm ( ) {
6062 return this . normalize ( ) ;
@@ -75,7 +77,7 @@ class AVector {
7577 /**
7678 *
7779 * @param {AVector } v
78- * @returns {AVector }
80+ * @returns {AVectorType }
7981 */
8082 cross ( v ) {
8183 return new this . constructor (
@@ -88,7 +90,7 @@ class AVector {
8890 /**
8991 *
9092 * @param {AVector } v
91- * @returns {AVector }
93+ * @returns {AVectorType }
9294 */
9395 crossNormalize ( v ) {
9496 const vec = this . cross ( v ) ;
@@ -102,7 +104,7 @@ class AVector {
102104 /**
103105 *
104106 * @param {AVector } v
105- * @returns {AVector }
107+ * @returns {AVectorType }
106108 */
107109 cn ( v ) {
108110 return this . crossNormalize ( v ) ;
@@ -240,6 +242,54 @@ class AVector {
240242 get len ( ) {
241243 return this . length ;
242244 }
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+ }
243293}
244294
245295cachedValueOf ( AVector ) ;
@@ -255,6 +305,9 @@ cachedMethod(AVector, 'toArray');
255305cachedGetter ( AVector , 'length' ) ;
256306cachedGetter ( AVector , 'lengthSq' ) ;
257307
308+ /**
309+ * @typedef {Vector & number } VectorType
310+ */
258311export class Vector extends AVector {
259312 /**
260313 *
@@ -305,80 +358,59 @@ export class Vector extends AVector {
305358 }
306359
307360 /**
308- * @param {() => number } alg
361+ * @param {(vector: VectorType ) => number } alg
309362 * @returns {this }
310363 */
311364 calc ( alg ) {
312365 return operatorCalc ( alg , this ) ;
313366 }
314367
315368 /**
316- *
317- * @returns {Vector }
369+ * @returns {Vector & number }
318370 */
319371 clone ( ) {
320372 return new Vector ( this . x , this . y , this . z ) ;
321373 }
322374}
323375
376+ /**
377+ * @typedef {Victor & number } VictorType
378+ */
324379export class Victor extends AVector {
325380 /**
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 }
352382 */
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-
373383 toVector ( ) {
374384 return new Vector ( this . x , this . y , this . z ) ;
375385 }
376386}
377387
378388/**
379389 * @param {() => number } alg
380- * @return {Vector | Victor | number }
390+ * @return {VectorType | VictorType }
381391 */
382392export function calc ( alg ) {
383393 return operatorCalc ( alg ) ;
384394}
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