@@ -8,8 +8,10 @@ import {
88 cachedFactory
99} from './operator' ;
1010import formatNumber from './formatter' ;
11+ import { ipoint } from './point' ;
1112
1213/* eslint class-methods-use-this: 0 */
14+ /* eslint-disable no-unused-vars */
1315
1416const X = 0 ;
1517const Y = 1 ;
@@ -30,7 +32,6 @@ class AVector {
3032 * @param {number | (Alg) } x
3133 * @param {number } [y]
3234 * @param {number } [z]
33- * @returns {AVectorType }
3435 */
3536 constructor ( x , y , z ) {
3637 if ( typeof x === 'function' ) {
@@ -69,16 +70,15 @@ class AVector {
6970
7071 /**
7172 *
72- * @param {AVector } v
73+ * @param {AVectorType } v
7374 * @returns {number }
7475 */
7576 dot ( v ) {
7677 return this . x * v . x + this . y * v . y + this . z * v . z ;
7778 }
7879
7980 /**
80- *
81- * @param {AVector } v
81+ * @param {AVectorType } v
8282 * @returns {AVectorType }
8383 */
8484 cross ( v ) {
@@ -90,8 +90,7 @@ class AVector {
9090 }
9191
9292 /**
93- *
94- * @param {AVector } v
93+ * @param {AVectorType } v
9594 * @returns {AVectorType }
9695 */
9796 crossNormalize ( v ) {
@@ -104,8 +103,7 @@ class AVector {
104103 }
105104
106105 /**
107- *
108- * @param {AVector } v
106+ * @param {AVectorType } v
109107 * @returns {AVectorType }
110108 */
111109 cn ( v ) {
@@ -125,7 +123,7 @@ class AVector {
125123
126124 /**
127125 *
128- * @param {AVector } v
126+ * @param {AVectorType } v
129127 * @returns {number }
130128 */
131129 angleTo ( v ) {
@@ -136,7 +134,7 @@ class AVector {
136134 /**
137135 *
138136 * @param {{ x: number, y: number, z: number, w: number } } quat
139- * @returns {AVector }
137+ * @returns {AVectorType }
140138 */
141139 rotate ( quat ) {
142140 const { x, y, z } = this ;
@@ -159,7 +157,7 @@ class AVector {
159157
160158 /**
161159 *
162- * @param {AVector } v
160+ * @param {AVectorType } v
163161 * @returns {number }
164162 */
165163 distance ( v ) {
@@ -168,7 +166,7 @@ class AVector {
168166
169167 /**
170168 *
171- * @param {AVector } v
169+ * @param {AVectorType } v
172170 * @returns {number }
173171 */
174172 dist ( v ) {
@@ -188,17 +186,27 @@ class AVector {
188186 return new this . constructor ( data [ 0 ] , data [ 1 ] , data [ 2 ] ) ;
189187 }
190188
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+
191198 /**
192199 *
193200 * @throws NotImplementedError
201+ * @return {AVectorType }
194202 */
195203 clone ( ) {
196204 throw new Error ( 'clone() not implemented' ) ;
197205 }
198206
199207 /**
200208 *
201- * @param {AVector } v
209+ * @param {AVectorType } v
202210 * @returns {boolean }
203211 */
204212 equals ( v ) {
@@ -292,6 +300,49 @@ class AVector {
292300 set z ( _ ) {
293301 throw new Error ( 'set z() not implemented' ) ;
294302 }
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+ }
295346}
296347
297348cachedValueOf ( AVector ) ;
@@ -360,15 +411,15 @@ export class Vector extends AVector {
360411 }
361412
362413 /**
363- * @param {(vector: VectorType ) => number } alg
414+ * @param {(vector: AVectorType ) => number } alg
364415 * @returns {this }
365416 */
366417 calc ( alg ) {
367418 return operatorCalc ( alg , this ) ;
368419 }
369420
370421 /**
371- * @returns {VectorType }
422+ * @returns {AVectorType }
372423 */
373424 clone ( ) {
374425 return new Vector ( this . x , this . y , this . z ) ;
@@ -387,7 +438,7 @@ export class Victor extends AVector {
387438 }
388439
389440 /**
390- * @returns {this }
441+ * @returns {AVectorType }
391442 */
392443 clone ( ) {
393444 return this ;
0 commit comments