@bhbr/affr2 0.0.0-stage → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/Transform.d.ts +32 -0
- package/dist/Transform.d.ts.map +1 -0
- package/dist/Transform.js +117 -0
- package/dist/Transform.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/vertex.d.ts +44 -0
- package/dist/vertex.d.ts.map +1 -0
- package/dist/vertex.js +169 -0
- package/dist/vertex.js.map +1 -0
- package/package.json +36 -4
package/README.md
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Description
|
|
2
2
|
|
|
3
|
-
This
|
|
3
|
+
This package provides functions for vertex operations in 2D, and a class of affine vertex transforms.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { BetterObject } from '@bhbr/better-things';
|
|
2
|
+
import { vertex } from './vertex.js';
|
|
3
|
+
export declare class Transform extends BetterObject {
|
|
4
|
+
anchor: vertex;
|
|
5
|
+
angle: number;
|
|
6
|
+
scale: number;
|
|
7
|
+
shift: vertex;
|
|
8
|
+
defaults(): object;
|
|
9
|
+
static identity(): Transform;
|
|
10
|
+
det(): number;
|
|
11
|
+
toCSSString(): string;
|
|
12
|
+
toString(): string;
|
|
13
|
+
toMatrix(): string;
|
|
14
|
+
a(): number;
|
|
15
|
+
b(): number;
|
|
16
|
+
c(): number;
|
|
17
|
+
d(): number;
|
|
18
|
+
e(): number;
|
|
19
|
+
f(): number;
|
|
20
|
+
inverse(): Transform;
|
|
21
|
+
appliedTo(p: vertex): vertex;
|
|
22
|
+
appliedToVertices(vertices: Array<vertex>): Array<vertex>;
|
|
23
|
+
copy(): Transform;
|
|
24
|
+
rightComposedWith(t: Transform): Transform;
|
|
25
|
+
rightComposeWith(t: Transform): void;
|
|
26
|
+
leftComposeWith(t: Transform): void;
|
|
27
|
+
leftComposedWith(t: Transform): Transform;
|
|
28
|
+
interpolate(newTransform: Transform, weight: number): Transform;
|
|
29
|
+
withoutAnchor(): Transform;
|
|
30
|
+
equals(t: Transform): boolean;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=Transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transform.d.ts","sourceRoot":"","sources":["../src/Transform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAqL,MAAM,aAAa,CAAA;AAEvN,qBAAa,SAAU,SAAQ,YAAY;IAK1C,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IAEb,QAAQ,IAAI,MAAM;IASlB,MAAM,CAAC,QAAQ,IAAI,SAAS;IAE5B,GAAG,IAAI,MAAM;IAEb,WAAW,IAAI,MAAM;IAUrB,QAAQ,IAAI,MAAM;IAQlB,QAAQ,IAAI,MAAM;IAKlB,CAAC,IAAI,MAAM;IACX,CAAC,IAAI,MAAM;IACX,CAAC,IAAI,MAAM;IACX,CAAC,IAAI,MAAM;IACX,CAAC,IAAI,MAAM;IACX,CAAC,IAAI,MAAM;IAEX,OAAO,IAAI,SAAS;IAYpB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM;IAO5B,iBAAiB,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IASzD,IAAI,IAAI,SAAS;IAMjB,iBAAiB,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS;IAW1C,gBAAgB,CAAC,CAAC,EAAE,SAAS;IAI7B,eAAe,CAAC,CAAC,EAAE,SAAS;IAI5B,gBAAgB,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS;IAIzC,WAAW,CAAC,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM;IASnD,aAAa,IAAI,SAAS;IAM1B,MAAM,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO;CAoB7B"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { BetterObject } from '@bhbr/better-things';
|
|
2
|
+
import { DEGREES } from './constants.js';
|
|
3
|
+
import { vertexOrigin, vertexIsZero, vertexOpposite, vertexAdd, vertexSubtract, vertexCentrallyRotatedBy, vertexCentrallyScaledBy, vertexTranslatedBy, vertexInterpolate } from './vertex.js';
|
|
4
|
+
export class Transform extends BetterObject {
|
|
5
|
+
/*
|
|
6
|
+
A Transform describes the positioning of a Mobject relative to its parent. Transforms compose as mobjects are nested into each other.
|
|
7
|
+
*/
|
|
8
|
+
anchor; // the point around which the Transform scales and rotates
|
|
9
|
+
angle;
|
|
10
|
+
scale;
|
|
11
|
+
shift; // translations are mainly realized by mobject anchors, but we offer the option. (Note that Transform({ anchor: p, angle: 0, scale: 1 }) is the identity, not a translation).
|
|
12
|
+
defaults() {
|
|
13
|
+
return {
|
|
14
|
+
anchor: vertexOrigin(),
|
|
15
|
+
angle: 0,
|
|
16
|
+
scale: 1,
|
|
17
|
+
shift: vertexOrigin()
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
static identity() { return new Transform(); }
|
|
21
|
+
det() { return this.scale ** 2; }
|
|
22
|
+
toCSSString() {
|
|
23
|
+
let str1 = vertexIsZero(this.shift) ? `` : `translate(${this.shift[0]}px,${this.shift[1]}px) `;
|
|
24
|
+
let str2 = vertexIsZero(this.anchor) || (this.scale == 1 && this.angle == 0) ? `` : `translate(${-this.anchor[0]}px,${-this.anchor[1]}px) `;
|
|
25
|
+
let str3 = this.scale == 1 ? `` : `scale(${this.scale}) `;
|
|
26
|
+
let str4 = this.angle == 0 ? `` : `rotate(${-this.angle / DEGREES}deg) `;
|
|
27
|
+
let str5 = vertexIsZero(this.anchor) || (this.scale == 1 && this.angle == 0) ? `` : `translate(${this.anchor[0]}px,${this.anchor[1]}px) `;
|
|
28
|
+
return (str1 + str2 + str3 + str4 + str5).replace(` `, ` `).trim();
|
|
29
|
+
}
|
|
30
|
+
toString() {
|
|
31
|
+
// for debugging
|
|
32
|
+
return `Transform(anchor: ${this.anchor}, angle: ${this.angle / DEGREES}°, scale: ${this.scale}, shift: ${this.shift})`;
|
|
33
|
+
}
|
|
34
|
+
// Matrix representation just in case anyone wants to do something fancy
|
|
35
|
+
toMatrix() {
|
|
36
|
+
// for debugging
|
|
37
|
+
return `[[${this.a()} ${this.b()}] [${this.c()} ${this.d()}]]; [${this.e()} ${this.f()}]`;
|
|
38
|
+
}
|
|
39
|
+
a() { return this.scale * Math.cos(this.angle); }
|
|
40
|
+
b() { return this.scale * Math.sin(this.angle); }
|
|
41
|
+
c() { return -this.scale * Math.sin(this.angle); }
|
|
42
|
+
d() { return this.scale * Math.cos(this.angle); }
|
|
43
|
+
e() { return (1 - this.a()) * this.anchor[0] - this.b() * this.anchor[1] + this.shift[0]; }
|
|
44
|
+
f() { return -this.c() * this.anchor[0] + (1 - this.d()) * this.anchor[1] + this.shift[1]; }
|
|
45
|
+
inverse() {
|
|
46
|
+
let t = new Transform({
|
|
47
|
+
angle: -this.angle,
|
|
48
|
+
scale: 1 / this.scale
|
|
49
|
+
});
|
|
50
|
+
t.update({
|
|
51
|
+
shift: vertexOpposite(t.appliedTo(this.shift)),
|
|
52
|
+
anchor: this.anchor
|
|
53
|
+
});
|
|
54
|
+
return t;
|
|
55
|
+
}
|
|
56
|
+
appliedTo(p) {
|
|
57
|
+
return [
|
|
58
|
+
this.a() * p[0] + this.b() * p[1] + this.e(),
|
|
59
|
+
this.c() * p[0] + this.d() * p[1] + this.f()
|
|
60
|
+
];
|
|
61
|
+
}
|
|
62
|
+
appliedToVertices(vertices) {
|
|
63
|
+
// This method also accepts an undertyped argument
|
|
64
|
+
let ret = [];
|
|
65
|
+
for (let v of vertices) {
|
|
66
|
+
ret.push(this.appliedTo(v));
|
|
67
|
+
}
|
|
68
|
+
return ret;
|
|
69
|
+
}
|
|
70
|
+
copy() {
|
|
71
|
+
let ct = new Transform();
|
|
72
|
+
ct.copyFrom(this);
|
|
73
|
+
return ct;
|
|
74
|
+
}
|
|
75
|
+
rightComposedWith(t) {
|
|
76
|
+
let v = vertexSubtract(vertexAdd(t.shift, t.anchor), this.anchor);
|
|
77
|
+
let w = vertexSubtract(vertexAdd(this.shift, this.anchor), t.anchor);
|
|
78
|
+
return new Transform({
|
|
79
|
+
anchor: t.anchor,
|
|
80
|
+
scale: this.scale * t.scale,
|
|
81
|
+
angle: this.angle + t.angle,
|
|
82
|
+
shift: vertexTranslatedBy(vertexCentrallyScaledBy(vertexCentrallyRotatedBy(v, this.angle), this.scale), w)
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
rightComposeWith(t) {
|
|
86
|
+
this.copyFrom(this.rightComposedWith(t));
|
|
87
|
+
}
|
|
88
|
+
leftComposeWith(t) {
|
|
89
|
+
this.copyFrom(this.leftComposedWith(t));
|
|
90
|
+
}
|
|
91
|
+
leftComposedWith(t) {
|
|
92
|
+
return t.rightComposedWith(this);
|
|
93
|
+
}
|
|
94
|
+
interpolate(newTransform, weight) {
|
|
95
|
+
return new Transform({
|
|
96
|
+
anchor: vertexInterpolate(this.anchor, newTransform.anchor, weight),
|
|
97
|
+
angle: (1 - weight) * this.angle + weight * newTransform.angle,
|
|
98
|
+
scale: (1 - weight) * this.scale + weight * newTransform.scale,
|
|
99
|
+
shift: vertexInterpolate(this.shift, newTransform.shift, weight)
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
withoutAnchor() {
|
|
103
|
+
let t = this.copy();
|
|
104
|
+
t.anchor = vertexOrigin();
|
|
105
|
+
return t;
|
|
106
|
+
}
|
|
107
|
+
equals(t) {
|
|
108
|
+
let tolerance = 1e-6;
|
|
109
|
+
return (Math.abs(this.a() - t.a()) < tolerance
|
|
110
|
+
&& Math.abs(this.b() - t.b()) < tolerance
|
|
111
|
+
&& Math.abs(this.c() - t.c()) < tolerance
|
|
112
|
+
&& Math.abs(this.d() - t.d()) < tolerance
|
|
113
|
+
&& Math.abs(this.e() - t.e()) < tolerance
|
|
114
|
+
&& Math.abs(this.f() - t.f()) < tolerance);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=Transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Transform.js","sourceRoot":"","sources":["../src/Transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,GAAG,EAAE,MAAoB,CAAA;AACtC,eAAO,MAAM,EAAE,EAAE,MAAgB,CAAA;AACjC,eAAO,MAAM,OAAO,EAAE,MAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,GAAG,GAAW,CAAC,GAAG,IAAI,CAAC,EAAE,CAAA;AACtC,MAAM,CAAC,MAAM,EAAE,GAAW,GAAG,GAAG,CAAC,CAAA;AACjC,MAAM,CAAC,MAAM,OAAO,GAAW,GAAG,GAAG,GAAG,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { Transform } from './Transform.js';
|
|
2
|
+
export { vertex, vertexArray, isVertex, isVertexArray, vertexX, vertexY, vertexOrigin, vertexDot, vertexNorm2, vertexNorm, vertexIsCloseTo, vertexIsZero, vertexEquals, vertexArrayEquals, vertexCopyFrom, vertexUpdate, vertexCopy, vertexImageUnder, vertexApply, vertexTranslatedBy, vertexTranslateBy, vertexCentrallyRotatedBy, vertexCentrallyRotateBy, vertexRotateBy, vertexCentrallyScaledBy, vertexCentrallyScaleBy, vertexNormalized, vertexNormalize, vertexAdd, vertexMultiply, vertexDivide, vertexOpposite, vertexSubtract, vertexIsNaN, vertexInterpolate, vertexToString, vertexInnerProduct, vertexOuterProduct, vertexArrayImageUnder } from './vertex.js';
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EACN,MAAM,EACN,WAAW,EACX,QAAQ,EACR,aAAa,EACb,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,cAAc,EACd,YAAY,EACZ,cAAc,EACd,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { Transform } from './Transform.js';
|
|
2
|
+
export { isVertex, isVertexArray, vertexX, vertexY, vertexOrigin, vertexDot, vertexNorm2, vertexNorm, vertexIsCloseTo, vertexIsZero, vertexEquals, vertexArrayEquals, vertexCopyFrom, vertexUpdate, vertexCopy, vertexImageUnder, vertexApply, vertexTranslatedBy, vertexTranslateBy, vertexCentrallyRotatedBy, vertexCentrallyRotateBy, vertexRotateBy, vertexCentrallyScaledBy, vertexCentrallyScaleBy, vertexNormalized, vertexNormalize, vertexAdd, vertexMultiply, vertexDivide, vertexOpposite, vertexSubtract, vertexIsNaN, vertexInterpolate, vertexToString, vertexInnerProduct, vertexOuterProduct, vertexArrayImageUnder } from './vertex.js';
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAGN,QAAQ,EACR,aAAa,EACb,OAAO,EACP,OAAO,EACP,YAAY,EACZ,SAAS,EACT,WAAW,EACX,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,uBAAuB,EACvB,sBAAsB,EACtB,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,cAAc,EACd,YAAY,EACZ,cAAc,EACd,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,MAAM,aAAa,CAAA"}
|
package/dist/vertex.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { Transform } from './Transform.js';
|
|
2
|
+
export type vertex = Array<number>;
|
|
3
|
+
export type vertexArray = Array<vertex>;
|
|
4
|
+
export declare function isVertex(obj: any): boolean;
|
|
5
|
+
export declare function isVertexArray(obj: any): boolean;
|
|
6
|
+
export declare function vertexX(v: vertex): number;
|
|
7
|
+
export declare function vertexY(v: vertex): number;
|
|
8
|
+
export declare function vertexOrigin(): vertex;
|
|
9
|
+
export declare function vertexDot(v: vertex, w: vertex): number;
|
|
10
|
+
export declare function vertexNorm2(v: vertex): number;
|
|
11
|
+
export declare function vertexNorm(v: vertex): number;
|
|
12
|
+
export declare function vertexIsCloseTo(v: vertex, w: vertex, tolerance?: number): boolean;
|
|
13
|
+
export declare function vertexIsZero(v: vertex): boolean;
|
|
14
|
+
export declare function vertexEquals(v: vertex, w: vertex): boolean;
|
|
15
|
+
export declare function vertexArrayEquals(va: vertexArray, wa: vertexArray): boolean;
|
|
16
|
+
export declare function vertexCopyFrom(v: vertex, w: vertex): void;
|
|
17
|
+
export declare function vertexUpdate(v: vertex, w: vertex): void;
|
|
18
|
+
export declare function vertexCopy(v: vertex): vertex;
|
|
19
|
+
export declare function vertexImageUnder(v: vertex, t: Transform): vertex;
|
|
20
|
+
export declare function vertexApply(v: vertex, t: Transform): void;
|
|
21
|
+
export declare function vertexTranslatedBy(v: vertex, w: vertex): vertex;
|
|
22
|
+
export declare function vertexTranslateBy(v: vertex, w: vertex): void;
|
|
23
|
+
export declare function vertexCentrallyRotatedBy(v: vertex, angle: number): vertex;
|
|
24
|
+
export declare function vertexRotatedBy(v: vertex, angle: number, center: vertex): vertex;
|
|
25
|
+
export declare function vertexCentrallyRotateBy(v: vertex, angle: number): void;
|
|
26
|
+
export declare function vertexRotateBy(v: vertex, angle: number, center: vertex): void;
|
|
27
|
+
export declare function vertexCentrallyScaledBy(v: vertex, scale: number): vertex;
|
|
28
|
+
export declare function vertexScaledBy(v: vertex, scale: number, center: vertex | undefined): vertex;
|
|
29
|
+
export declare function vertexCentrallyScaleBy(v: vertex, scale: number, center: vertex | undefined): void;
|
|
30
|
+
export declare function vertexNormalized(v: vertex): vertex;
|
|
31
|
+
export declare function vertexNormalize(v: vertex): void;
|
|
32
|
+
export declare function vertexAdd(v: vertex, w: vertex): vertex;
|
|
33
|
+
export declare function vertexMultiply(v: vertex, factor: number): vertex;
|
|
34
|
+
export declare function vertexDivide(v: vertex, factor: number): vertex;
|
|
35
|
+
export declare function vertexOpposite(v: vertex): vertex;
|
|
36
|
+
export declare function vertexSubtract(v: vertex, w: vertex): vertex;
|
|
37
|
+
export declare function vertexIsNaN(v: vertex): boolean;
|
|
38
|
+
export declare function vertexInterpolate(v: vertex, w: vertex, weight: number): vertex;
|
|
39
|
+
export declare function vertexToString(v: vertex): string;
|
|
40
|
+
export declare function vertexInnerProduct(v: vertex, w: vertex): number;
|
|
41
|
+
export declare function vertexOuterProduct(v: vertex, w: vertex): number;
|
|
42
|
+
export declare function vertexArrayInterpolate(vtxArray1: vertexArray, vtxArray2: vertexArray, weight: any): vertexArray;
|
|
43
|
+
export declare function vertexArrayImageUnder(vtxArray: vertexArray, transform: Transform): vertexArray;
|
|
44
|
+
//# sourceMappingURL=vertex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex.d.ts","sourceRoot":"","sources":["../src/vertex.ts"],"names":[],"mappings":"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"}
|
package/dist/vertex.js
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
export function isVertex(obj) {
|
|
2
|
+
if (!(obj instanceof Array)) {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
if (obj.length != 2) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
return (typeof obj[0] == 'number') && (typeof obj[1] == 'number');
|
|
9
|
+
}
|
|
10
|
+
export function isVertexArray(obj) {
|
|
11
|
+
if (!(obj instanceof Array)) {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
return obj.every((el) => isVertex(el));
|
|
15
|
+
}
|
|
16
|
+
export function vertexX(v) { return v[0]; }
|
|
17
|
+
export function vertexY(v) { return v[1]; }
|
|
18
|
+
export function vertexOrigin() { return [0, 0]; }
|
|
19
|
+
export function vertexDot(v, w) {
|
|
20
|
+
return v[0] * w[0] + v[1] * w[1];
|
|
21
|
+
}
|
|
22
|
+
export function vertexNorm2(v) {
|
|
23
|
+
return v[0] ** 2 + v[1] ** 2;
|
|
24
|
+
}
|
|
25
|
+
export function vertexNorm(v) {
|
|
26
|
+
return Math.sqrt(vertexNorm2(v));
|
|
27
|
+
}
|
|
28
|
+
export function vertexIsCloseTo(v, w, tolerance = 1e-6) {
|
|
29
|
+
if (vertexIsNaN(v)) {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
if (vertexIsNaN(w)) {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
if (!tolerance) {
|
|
36
|
+
tolerance = 1;
|
|
37
|
+
}
|
|
38
|
+
return vertexNorm2(vertexSubtract(v, w)) < tolerance ** 2;
|
|
39
|
+
}
|
|
40
|
+
export function vertexIsZero(v) {
|
|
41
|
+
return v[0] == 0 && v[1] == 0;
|
|
42
|
+
}
|
|
43
|
+
export function vertexEquals(v, w) {
|
|
44
|
+
return vertexIsCloseTo(v, w, 1e-6);
|
|
45
|
+
}
|
|
46
|
+
export function vertexArrayEquals(va, wa) {
|
|
47
|
+
if (va.length != wa.length) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
for (let i = 0; i < va.length; i++) {
|
|
51
|
+
if (!vertexEquals(va[i], wa[i])) {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
export function vertexCopyFrom(v, w) {
|
|
58
|
+
v[0] = w[0];
|
|
59
|
+
v[1] = w[1];
|
|
60
|
+
}
|
|
61
|
+
export function vertexUpdate(v, w) {
|
|
62
|
+
vertexCopyFrom(v, w);
|
|
63
|
+
}
|
|
64
|
+
export function vertexCopy(v) {
|
|
65
|
+
return [v[0], v[1]];
|
|
66
|
+
}
|
|
67
|
+
export function vertexImageUnder(v, t) {
|
|
68
|
+
return [t.a() * v[0] + t.b() * v[1] + t.e(), t.c() * v[0] + t.d() * v[1] + t.f()];
|
|
69
|
+
}
|
|
70
|
+
export function vertexApply(v, t) {
|
|
71
|
+
vertexCopyFrom(v, vertexImageUnder(v, t));
|
|
72
|
+
}
|
|
73
|
+
export function vertexTranslatedBy(v, w) {
|
|
74
|
+
return vertexAdd(v, w);
|
|
75
|
+
}
|
|
76
|
+
export function vertexTranslateBy(v, w) {
|
|
77
|
+
vertexCopyFrom(v, vertexTranslatedBy(v, w));
|
|
78
|
+
}
|
|
79
|
+
export function vertexCentrallyRotatedBy(v, angle) {
|
|
80
|
+
let c = Math.cos(angle);
|
|
81
|
+
let s = Math.sin(angle);
|
|
82
|
+
return [c * v[0] + s * v[1], -s * v[0] + c * v[1]];
|
|
83
|
+
}
|
|
84
|
+
export function vertexRotatedBy(v, angle, center) {
|
|
85
|
+
if (vertexIsZero(center)) {
|
|
86
|
+
return vertexCentrallyRotatedBy(v, angle);
|
|
87
|
+
}
|
|
88
|
+
let w = vertexSubtract(v, center);
|
|
89
|
+
let rw = vertexCentrallyRotatedBy(w, angle);
|
|
90
|
+
return vertexAdd(rw, center);
|
|
91
|
+
}
|
|
92
|
+
export function vertexCentrallyRotateBy(v, angle) {
|
|
93
|
+
vertexCopyFrom(v, vertexCentrallyRotatedBy(v, angle));
|
|
94
|
+
}
|
|
95
|
+
export function vertexRotateBy(v, angle, center) {
|
|
96
|
+
if (vertexIsZero(center)) {
|
|
97
|
+
vertexCopyFrom(v, vertexCentrallyRotatedBy(v, angle));
|
|
98
|
+
}
|
|
99
|
+
vertexCopyFrom(v, vertexRotatedBy(v, angle, center));
|
|
100
|
+
}
|
|
101
|
+
export function vertexCentrallyScaledBy(v, scale) {
|
|
102
|
+
return [scale * v[0], scale * v[1]];
|
|
103
|
+
}
|
|
104
|
+
export function vertexScaledBy(v, scale, center) {
|
|
105
|
+
if (center == undefined || vertexIsZero(center)) {
|
|
106
|
+
return vertexCentrallyScaledBy(v, scale);
|
|
107
|
+
}
|
|
108
|
+
let w = vertexSubtract(v, center);
|
|
109
|
+
let rw = vertexCentrallyScaledBy(w, scale);
|
|
110
|
+
return vertexAdd(rw, center);
|
|
111
|
+
}
|
|
112
|
+
export function vertexCentrallyScaleBy(v, scale, center) {
|
|
113
|
+
if (center == undefined) {
|
|
114
|
+
vertexCopyFrom(v, vertexCentrallyScaledBy(v, scale));
|
|
115
|
+
}
|
|
116
|
+
vertexCopyFrom(v, vertexScaledBy(v, scale, center));
|
|
117
|
+
}
|
|
118
|
+
export function vertexNormalized(v) {
|
|
119
|
+
let l = 1 / vertexNorm(v);
|
|
120
|
+
return vertexCentrallyScaledBy(v, l);
|
|
121
|
+
}
|
|
122
|
+
export function vertexNormalize(v) {
|
|
123
|
+
vertexCopyFrom(v, vertexNormalized(v));
|
|
124
|
+
}
|
|
125
|
+
export function vertexAdd(v, w) {
|
|
126
|
+
return [v[0] + w[0], v[1] + w[1]];
|
|
127
|
+
}
|
|
128
|
+
export function vertexMultiply(v, factor) {
|
|
129
|
+
return [v[0] * factor, v[1] * factor];
|
|
130
|
+
}
|
|
131
|
+
export function vertexDivide(v, factor) {
|
|
132
|
+
return [v[0] / factor, v[1] / factor];
|
|
133
|
+
}
|
|
134
|
+
export function vertexOpposite(v) {
|
|
135
|
+
return [-v[0], -v[1]];
|
|
136
|
+
}
|
|
137
|
+
export function vertexSubtract(v, w) {
|
|
138
|
+
return [v[0] - w[0], v[1] - w[1]];
|
|
139
|
+
}
|
|
140
|
+
export function vertexIsNaN(v) {
|
|
141
|
+
return (isNaN(v[0]) || isNaN(v[1]));
|
|
142
|
+
}
|
|
143
|
+
export function vertexInterpolate(v, w, weight) {
|
|
144
|
+
return [v[0] + weight * (w[0] - v[0]), v[1] + weight * (w[1] - v[1])];
|
|
145
|
+
}
|
|
146
|
+
export function vertexToString(v) {
|
|
147
|
+
return `[${v[0]}, ${v[1]}]`;
|
|
148
|
+
}
|
|
149
|
+
export function vertexInnerProduct(v, w) {
|
|
150
|
+
return vertexDot(v, w);
|
|
151
|
+
}
|
|
152
|
+
export function vertexOuterProduct(v, w) {
|
|
153
|
+
return v[0] * w[1] - v[1] * w[0];
|
|
154
|
+
}
|
|
155
|
+
export function vertexArrayInterpolate(vtxArray1, vtxArray2, weight) {
|
|
156
|
+
let interpolatedVertexArray = [];
|
|
157
|
+
for (let i = 0; i < vtxArray1.length; i++) {
|
|
158
|
+
interpolatedVertexArray.push(vertexInterpolate(vtxArray1[i], vtxArray2[i], weight));
|
|
159
|
+
}
|
|
160
|
+
return interpolatedVertexArray;
|
|
161
|
+
}
|
|
162
|
+
export function vertexArrayImageUnder(vtxArray, transform) {
|
|
163
|
+
let image = [];
|
|
164
|
+
for (let i = 0; i < vtxArray.length; i++) {
|
|
165
|
+
image.push(vertexImageUnder(vtxArray[i], transform));
|
|
166
|
+
}
|
|
167
|
+
return image;
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=vertex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vertex.js","sourceRoot":"","sources":["../src/vertex.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,38 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bhbr/affr2",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.0.1",
|
|
4
|
+
"description": "Vertex operations in the affine plane (translations, rotations and scalings)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"import": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist/",
|
|
16
|
+
"!dist/_tests/"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"build": "cd build && ./build.sh",
|
|
20
|
+
"test": "node dist/_tests/affr2_tests.js",
|
|
21
|
+
"prepack": "npm run build"
|
|
22
|
+
},
|
|
23
|
+
"repository": {
|
|
24
|
+
"type": "git",
|
|
25
|
+
"url": "https://github.com/bhbr/affr2"
|
|
26
|
+
},
|
|
27
|
+
"bugs": {
|
|
28
|
+
"url": "https://github.com/bhbr/affr2/issues"
|
|
29
|
+
},
|
|
30
|
+
"homepage": "https://github.com/bhbr/affr2#readme",
|
|
31
|
+
"keywords": [],
|
|
32
|
+
"author": "Ben Hambrecht",
|
|
33
|
+
"license": "ISC",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"@bhbr/better-things": "^1.0.2",
|
|
36
|
+
"@bhbr/tsts": "^1.1.3"
|
|
37
|
+
}
|
|
38
|
+
}
|