@@ -8,8 +8,10 @@ import {
8
8
cachedFactory
9
9
} from './operator' ;
10
10
import formatNumber from './formatter' ;
11
+ import { ipoint } from './point' ;
11
12
12
13
/* eslint class-methods-use-this: 0 */
14
+ /* eslint-disable no-unused-vars */
13
15
14
16
const X = 0 ;
15
17
const Y = 1 ;
@@ -30,7 +32,6 @@ class AVector {
30
32
* @param {number | (Alg) } x
31
33
* @param {number } [y]
32
34
* @param {number } [z]
33
- * @returns {AVectorType }
34
35
*/
35
36
constructor ( x , y , z ) {
36
37
if ( typeof x === 'function' ) {
@@ -69,16 +70,15 @@ class AVector {
69
70
70
71
/**
71
72
*
72
- * @param {AVector } v
73
+ * @param {AVectorType } v
73
74
* @returns {number }
74
75
*/
75
76
dot ( v ) {
76
77
return this . x * v . x + this . y * v . y + this . z * v . z ;
77
78
}
78
79
79
80
/**
80
- *
81
- * @param {AVector } v
81
+ * @param {AVectorType } v
82
82
* @returns {AVectorType }
83
83
*/
84
84
cross ( v ) {
@@ -90,8 +90,7 @@ class AVector {
90
90
}
91
91
92
92
/**
93
- *
94
- * @param {AVector } v
93
+ * @param {AVectorType } v
95
94
* @returns {AVectorType }
96
95
*/
97
96
crossNormalize ( v ) {
@@ -104,8 +103,7 @@ class AVector {
104
103
}
105
104
106
105
/**
107
- *
108
- * @param {AVector } v
106
+ * @param {AVectorType } v
109
107
* @returns {AVectorType }
110
108
*/
111
109
cn ( v ) {
@@ -125,7 +123,7 @@ class AVector {
125
123
126
124
/**
127
125
*
128
- * @param {AVector } v
126
+ * @param {AVectorType } v
129
127
* @returns {number }
130
128
*/
131
129
angleTo ( v ) {
@@ -136,7 +134,7 @@ class AVector {
136
134
/**
137
135
*
138
136
* @param {{ x: number, y: number, z: number, w: number } } quat
139
- * @returns {AVector }
137
+ * @returns {AVectorType }
140
138
*/
141
139
rotate ( quat ) {
142
140
const { x, y, z } = this ;
@@ -159,7 +157,7 @@ class AVector {
159
157
160
158
/**
161
159
*
162
- * @param {AVector } v
160
+ * @param {AVectorType } v
163
161
* @returns {number }
164
162
*/
165
163
distance ( v ) {
@@ -168,7 +166,7 @@ class AVector {
168
166
169
167
/**
170
168
*
171
- * @param {AVector } v
169
+ * @param {AVectorType } v
172
170
* @returns {number }
173
171
*/
174
172
dist ( v ) {
@@ -188,17 +186,27 @@ class AVector {
188
186
return new this . constructor ( data [ 0 ] , data [ 1 ] , data [ 2 ] ) ;
189
187
}
190
188
189
+ /**
190
+ * @param {(vector: AVectorType) => number } arg
191
+ * @returns {this }
192
+ * @throws NotImplementedError
193
+ */
194
+ calc ( arg ) {
195
+ throw new Error ( 'calc() not implemented' ) ;
196
+ }
197
+
191
198
/**
192
199
*
193
200
* @throws NotImplementedError
201
+ * @return {AVectorType }
194
202
*/
195
203
clone ( ) {
196
204
throw new Error ( 'clone() not implemented' ) ;
197
205
}
198
206
199
207
/**
200
208
*
201
- * @param {AVector } v
209
+ * @param {AVectorType } v
202
210
* @returns {boolean }
203
211
*/
204
212
equals ( v ) {
@@ -292,6 +300,49 @@ class AVector {
292
300
set z ( _ ) {
293
301
throw new Error ( 'set z() not implemented' ) ;
294
302
}
303
+
304
+ /**
305
+ * @typedef {((import("./point").IPoint) & number) } IPointType
306
+ * @returns {IPointType }
307
+ */
308
+ get xy ( ) {
309
+ return ipoint ( this [ AXES ] [ X ] , this [ AXES ] [ Y ] ) ;
310
+ }
311
+
312
+ /**
313
+ * @throws SetNotImplementedError
314
+ */
315
+ set xy ( _ ) {
316
+ throw new Error ( 'set xz() not implemented' ) ;
317
+ }
318
+
319
+ /**
320
+ * @returns {IPointType }
321
+ */
322
+ get xz ( ) {
323
+ return ipoint ( this [ AXES ] [ X ] , this [ AXES ] [ Z ] ) ;
324
+ }
325
+
326
+ /**
327
+ * @throws SetNotImplementedError
328
+ */
329
+ set xz ( _ ) {
330
+ throw new Error ( 'set xz() not implemented' ) ;
331
+ }
332
+
333
+ /**
334
+ * @returns {IPointType }
335
+ */
336
+ get yz ( ) {
337
+ return ipoint ( this [ AXES ] [ Y ] , this [ AXES ] [ Z ] ) ;
338
+ }
339
+
340
+ /**
341
+ * @throws SetNotImplementedError
342
+ */
343
+ set yz ( _ ) {
344
+ throw new Error ( 'set yz() not implemented' ) ;
345
+ }
295
346
}
296
347
297
348
cachedValueOf ( AVector ) ;
@@ -360,15 +411,15 @@ export class Vector extends AVector {
360
411
}
361
412
362
413
/**
363
- * @param {(vector: VectorType ) => number } alg
414
+ * @param {(vector: AVectorType ) => number } alg
364
415
* @returns {this }
365
416
*/
366
417
calc ( alg ) {
367
418
return operatorCalc ( alg , this ) ;
368
419
}
369
420
370
421
/**
371
- * @returns {VectorType }
422
+ * @returns {AVectorType }
372
423
*/
373
424
clone ( ) {
374
425
return new Vector ( this . x , this . y , this . z ) ;
@@ -387,7 +438,7 @@ export class Victor extends AVector {
387
438
}
388
439
389
440
/**
390
- * @returns {this }
441
+ * @returns {AVectorType }
391
442
*/
392
443
clone ( ) {
393
444
return this ;
0 commit comments