Skip to content

Commit 71f6ae0

Browse files
committed
update: vector adjustments + tests
1 parent a3e5bc7 commit 71f6ae0

File tree

4 files changed

+60
-32
lines changed

4 files changed

+60
-32
lines changed

dist/js/vector.d.ts

+6-5
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,15 @@ export declare class Vector3D {
99
get z(): number;
1010
equals(other: number[] | Vector3DSchema | Vector3D): boolean;
1111
get norm(): number;
12+
translateByVector(vector: Vector3DSchema | Vector3D): Vector3D;
1213
}
1314
export declare class RoundedVector3D extends Vector3D {
1415
static roundPrecision: number;
1516
toJSON(skipRounding?: boolean): Vector3DSchema;
16-
get value_rounded(): Vector3DSchema;
17-
get x_rounded(): number;
18-
get y_rounded(): number;
19-
get z_rounded(): number;
17+
get valueRounded(): Vector3DSchema;
18+
get xRounded(): number;
19+
get yRounded(): number;
20+
get zRounded(): number;
2021
equals(other: Vector3DSchema | RoundedVector3D): boolean;
21-
get norm_rounded(): number;
22+
get normRounded(): number;
2223
}

dist/js/vector.js

+16-11
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ class Vector3D {
3737
get norm() {
3838
return math_1.math.vlen(this._value);
3939
}
40+
translateByVector(vector) {
41+
const arrayOfNumbers = vector instanceof Vector3D ? vector.value : vector;
42+
this._value = this._value.map((v, i) => v + arrayOfNumbers[i]);
43+
return this;
44+
}
4045
}
4146
exports.Vector3D = Vector3D;
4247
Vector3D.atol = 1e-8;
@@ -47,27 +52,27 @@ class RoundedVector3D extends Vector3D {
4752
: math_1.math.roundArrayOrNumber(this.value, RoundedVector3D.roundPrecision);
4853
return [...rounded];
4954
}
50-
get value_rounded() {
55+
get valueRounded() {
5156
return this.toJSON();
5257
}
53-
get x_rounded() {
54-
return this.value_rounded[0];
58+
get xRounded() {
59+
return this.valueRounded[0];
5560
}
56-
get y_rounded() {
57-
return this.value_rounded[1];
61+
get yRounded() {
62+
return this.valueRounded[1];
5863
}
59-
get z_rounded() {
60-
return this.value_rounded[2];
64+
get zRounded() {
65+
return this.valueRounded[2];
6166
}
6267
equals(other) {
63-
const arr1 = this.value_rounded;
68+
const arr1 = this.valueRounded;
6469
const arr2 = Array.isArray(other)
65-
? new RoundedVector3D(other).value_rounded
66-
: other.value_rounded;
70+
? new RoundedVector3D(other).valueRounded
71+
: other.valueRounded;
6772
const atol = RoundedVector3D.atol || 10 ** -RoundedVector3D.roundPrecision;
6873
return math_1.math.vEqualWithTolerance(arr1, arr2, atol);
6974
}
70-
get norm_rounded() {
75+
get normRounded() {
7176
return math_1.math.roundArrayOrNumber(this.norm, RoundedVector3D.roundPrecision);
7277
}
7378
}

src/js/vector.ts

+17-11
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,12 @@ export class Vector3D {
4949
get norm(): number {
5050
return math.vlen(this._value);
5151
}
52+
53+
translateByVector(vector: Vector3DSchema | Vector3D): Vector3D {
54+
const arrayOfNumbers = vector instanceof Vector3D ? vector.value : vector;
55+
this._value = this._value.map((v, i) => v + arrayOfNumbers[i]) as Vector3DSchema;
56+
return this;
57+
}
5258
}
5359

5460
export class RoundedVector3D extends Vector3D {
@@ -64,32 +70,32 @@ export class RoundedVector3D extends Vector3D {
6470
return [...rounded] as Vector3DSchema;
6571
}
6672

67-
get value_rounded(): Vector3DSchema {
73+
get valueRounded(): Vector3DSchema {
6874
return this.toJSON();
6975
}
7076

71-
get x_rounded(): number {
72-
return this.value_rounded[0];
77+
get xRounded(): number {
78+
return this.valueRounded[0];
7379
}
7480

75-
get y_rounded(): number {
76-
return this.value_rounded[1];
81+
get yRounded(): number {
82+
return this.valueRounded[1];
7783
}
7884

79-
get z_rounded(): number {
80-
return this.value_rounded[2];
85+
get zRounded(): number {
86+
return this.valueRounded[2];
8187
}
8288

8389
override equals(other: Vector3DSchema | RoundedVector3D): boolean {
84-
const arr1 = this.value_rounded;
90+
const arr1 = this.valueRounded;
8591
const arr2 = Array.isArray(other)
86-
? new RoundedVector3D(other).value_rounded
87-
: other.value_rounded;
92+
? new RoundedVector3D(other).valueRounded
93+
: other.valueRounded;
8894
const atol = RoundedVector3D.atol || 10 ** -RoundedVector3D.roundPrecision;
8995
return math.vEqualWithTolerance(arr1, arr2, atol);
9096
}
9197

92-
get norm_rounded(): number {
98+
get normRounded(): number {
9399
return math.roundArrayOrNumber(this.norm, RoundedVector3D.roundPrecision) as number;
94100
}
95101
}

tests/js/vector.ts

+21-5
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,14 @@ describe("Vector3D", () => {
4444
const vector = new Vector3D(VECTOR_FLOAT);
4545
expect(Math.abs(vector.norm - VECTOR_FLOAT_NORM)).to.be.lessThan(FLOAT_PRECISION);
4646
});
47+
48+
it("should translate vector", () => {
49+
const vector = new Vector3D(VECTOR_FLOAT);
50+
const translationVector3D = new Vector3D([1, 1, 1]);
51+
const expectedTranslation = [2.23456789, 3.345678901, 4.456789012];
52+
vector.translateByVector(translationVector3D);
53+
expect(vector.value).to.deep.equal(expectedTranslation);
54+
});
4755
});
4856

4957
describe("RoundedVector3D", () => {
@@ -57,18 +65,18 @@ describe("RoundedVector3D", () => {
5765
const vector = new RoundedVector3D(VECTOR_FLOAT);
5866

5967
expect(vector.toJSON()).to.deep.equal(VECTOR_FLOAT_ROUNDED_4);
60-
expect(vector.value_rounded).to.deep.equal(VECTOR_FLOAT_ROUNDED_4);
61-
expect(vector.x_rounded).to.be.deep.equal(VECTOR_FLOAT_ROUNDED_4[0]);
62-
expect(vector.y_rounded).to.be.deep.equal(VECTOR_FLOAT_ROUNDED_4[1]);
63-
expect(vector.z_rounded).to.be.deep.equal(VECTOR_FLOAT_ROUNDED_4[2]);
68+
expect(vector.valueRounded).to.deep.equal(VECTOR_FLOAT_ROUNDED_4);
69+
expect(vector.xRounded).to.be.deep.equal(VECTOR_FLOAT_ROUNDED_4[0]);
70+
expect(vector.yRounded).to.be.deep.equal(VECTOR_FLOAT_ROUNDED_4[1]);
71+
expect(vector.zRounded).to.be.deep.equal(VECTOR_FLOAT_ROUNDED_4[2]);
6472
});
6573

6674
it("should do serialization with precision 3", () => {
6775
RoundedVector3D.roundPrecision = 3;
6876
const vector = new RoundedVector3D(VECTOR_FLOAT);
6977

7078
expect(vector.toJSON()).to.deep.equal(VECTOR_FLOAT_ROUNDED_3);
71-
expect(vector.value_rounded).to.deep.equal(VECTOR_FLOAT_ROUNDED_3);
79+
expect(vector.valueRounded).to.deep.equal(VECTOR_FLOAT_ROUNDED_3);
7280
});
7381

7482
it("should do equality changes with precision", () => {
@@ -83,4 +91,12 @@ describe("RoundedVector3D", () => {
8391
expect(vector.equals(VECTOR_FLOAT_ROUNDED_4)).to.equal(true);
8492
expect(vector.equals(VECTOR_FLOAT_ROUNDED_3)).to.equal(true);
8593
});
94+
it("should extract rounded norm", () => {
95+
RoundedVector3D.roundPrecision = 4;
96+
const vector = new RoundedVector3D(VECTOR_FLOAT);
97+
expect(vector.normRounded).to.be.deep.equal(4.3561);
98+
99+
RoundedVector3D.roundPrecision = 3;
100+
expect(vector.normRounded).to.be.deep.equal(4.356);
101+
});
86102
});

0 commit comments

Comments
 (0)