Skip to content

Commit c596d18

Browse files
committed
feat(vector): xy xz xz getter for 3d to 2d conv
1 parent 3354467 commit c596d18

File tree

2 files changed

+81
-20
lines changed

2 files changed

+81
-20
lines changed

src/point.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
import formatNumber from './formatter';
1111

1212
/* eslint class-methods-use-this: 0 */
13+
/* eslint-disable no-unused-vars */
1314

1415
const X = 0;
1516
const Y = 1;
@@ -142,9 +143,18 @@ class APoint {
142143
}
143144

144145
/**
145-
*
146+
* @param {(point: APointType) => number} alg
147+
* @returns {this}
146148
* @throws NotImplementedError
147149
*/
150+
calc(alg) {
151+
throw new Error('calc() not implemented');
152+
}
153+
154+
/**
155+
* @throws NotImplementedError
156+
* @returns {APoint}
157+
*/
148158
clone() {
149159
throw new Error('clone() not implemented');
150160
}
@@ -232,7 +242,7 @@ class APoint {
232242

233243
/**
234244
*
235-
* @throws GetNotImplementedError
245+
* @returns {number}
236246
*/
237247
get z() {
238248
throw new Error('get z() not implemented');
@@ -294,15 +304,15 @@ export class Point extends APoint {
294304
}
295305

296306
/**
297-
* @param {(point: PointType) => number} alg
307+
* @param {(point: APointType) => number} alg
298308
* @returns {this}
299309
*/
300310
calc(alg) {
301311
return operatorCalc(alg, this);
302312
}
303313

304314
/**
305-
* @returns {Point}
315+
* @returns {APoint}
306316
*/
307317
clone() {
308318
return new Point(this.x, this.y);

src/vector.js

Lines changed: 67 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import {
88
cachedFactory
99
} from './operator';
1010
import formatNumber from './formatter';
11+
import { ipoint } from './point';
1112

1213
/* eslint class-methods-use-this: 0 */
14+
/* eslint-disable no-unused-vars */
1315

1416
const X = 0;
1517
const 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

297348
cachedValueOf(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

Comments
 (0)