@johnhenry/math 0.0.0
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 +165 -0
- package/dist/Bivector4.d.ts +52 -0
- package/dist/Bivector4.d.ts.map +1 -0
- package/dist/Bivector4.js +105 -0
- package/dist/Bivector4.js.map +1 -0
- package/dist/CellGraph.d.ts +259 -0
- package/dist/CellGraph.d.ts.map +1 -0
- package/dist/CellGraph.js +637 -0
- package/dist/CellGraph.js.map +1 -0
- package/dist/Clifford4Internal.d.ts +35 -0
- package/dist/Clifford4Internal.d.ts.map +1 -0
- package/dist/Clifford4Internal.js +86 -0
- package/dist/Clifford4Internal.js.map +1 -0
- package/dist/Combinatorics.d.ts +61 -0
- package/dist/Combinatorics.d.ts.map +1 -0
- package/dist/Combinatorics.js +186 -0
- package/dist/Combinatorics.js.map +1 -0
- package/dist/CombinatoricsGenerators.d.ts +44 -0
- package/dist/CombinatoricsGenerators.d.ts.map +1 -0
- package/dist/CombinatoricsGenerators.js +148 -0
- package/dist/CombinatoricsGenerators.js.map +1 -0
- package/dist/ComplexMath.d.ts +46 -0
- package/dist/ComplexMath.d.ts.map +1 -0
- package/dist/ComplexMath.js +98 -0
- package/dist/ComplexMath.js.map +1 -0
- package/dist/ComplexNumber.d.ts +174 -0
- package/dist/ComplexNumber.d.ts.map +1 -0
- package/dist/ComplexNumber.js +443 -0
- package/dist/ComplexNumber.js.map +1 -0
- package/dist/Cycle.d.ts +42 -0
- package/dist/Cycle.d.ts.map +1 -0
- package/dist/Cycle.js +120 -0
- package/dist/Cycle.js.map +1 -0
- package/dist/Decimal.d.ts +45 -0
- package/dist/Decimal.d.ts.map +1 -0
- package/dist/Decimal.js +135 -0
- package/dist/Decimal.js.map +1 -0
- package/dist/Distributions.d.ts +55 -0
- package/dist/Distributions.d.ts.map +1 -0
- package/dist/Distributions.js +222 -0
- package/dist/Distributions.js.map +1 -0
- package/dist/DualNumber.d.ts +42 -0
- package/dist/DualNumber.d.ts.map +1 -0
- package/dist/DualNumber.js +91 -0
- package/dist/DualNumber.js.map +1 -0
- package/dist/Environment.d.ts +44 -0
- package/dist/Environment.d.ts.map +1 -0
- package/dist/Environment.js +129 -0
- package/dist/Environment.js.map +1 -0
- package/dist/Expression.d.ts +19 -0
- package/dist/Expression.d.ts.map +1 -0
- package/dist/Expression.js +43 -0
- package/dist/Expression.js.map +1 -0
- package/dist/FFT.d.ts +21 -0
- package/dist/FFT.d.ts.map +1 -0
- package/dist/FFT.js +136 -0
- package/dist/FFT.js.map +1 -0
- package/dist/GeometricAlgebra4.d.ts +73 -0
- package/dist/GeometricAlgebra4.d.ts.map +1 -0
- package/dist/GeometricAlgebra4.js +115 -0
- package/dist/GeometricAlgebra4.js.map +1 -0
- package/dist/Geometry.d.ts +41 -0
- package/dist/Geometry.d.ts.map +1 -0
- package/dist/Geometry.js +167 -0
- package/dist/Geometry.js.map +1 -0
- package/dist/Graph.d.ts +72 -0
- package/dist/Graph.d.ts.map +1 -0
- package/dist/Graph.js +337 -0
- package/dist/Graph.js.map +1 -0
- package/dist/Graph3DUtils.d.ts +80 -0
- package/dist/Graph3DUtils.d.ts.map +1 -0
- package/dist/Graph3DUtils.js +156 -0
- package/dist/Graph3DUtils.js.map +1 -0
- package/dist/GraphUtils.d.ts +67 -0
- package/dist/GraphUtils.d.ts.map +1 -0
- package/dist/GraphUtils.js +72 -0
- package/dist/GraphUtils.js.map +1 -0
- package/dist/GroupTheory.d.ts +73 -0
- package/dist/GroupTheory.d.ts.map +1 -0
- package/dist/GroupTheory.js +194 -0
- package/dist/GroupTheory.js.map +1 -0
- package/dist/IntUtils.d.ts +33 -0
- package/dist/IntUtils.d.ts.map +1 -0
- package/dist/IntUtils.js +185 -0
- package/dist/IntUtils.js.map +1 -0
- package/dist/Interval.d.ts +44 -0
- package/dist/Interval.d.ts.map +1 -0
- package/dist/Interval.js +165 -0
- package/dist/Interval.js.map +1 -0
- package/dist/Lattice.d.ts +48 -0
- package/dist/Lattice.d.ts.map +1 -0
- package/dist/Lattice.js +65 -0
- package/dist/Lattice.js.map +1 -0
- package/dist/Logic.d.ts +22 -0
- package/dist/Logic.d.ts.map +1 -0
- package/dist/Logic.js +34 -0
- package/dist/Logic.js.map +1 -0
- package/dist/MatrixMath.d.ts +71 -0
- package/dist/MatrixMath.d.ts.map +1 -0
- package/dist/MatrixMath.js +302 -0
- package/dist/MatrixMath.js.map +1 -0
- package/dist/NumberTheory.d.ts +49 -0
- package/dist/NumberTheory.d.ts.map +1 -0
- package/dist/NumberTheory.js +230 -0
- package/dist/NumberTheory.js.map +1 -0
- package/dist/Numerical.d.ts +85 -0
- package/dist/Numerical.d.ts.map +1 -0
- package/dist/Numerical.js +343 -0
- package/dist/Numerical.js.map +1 -0
- package/dist/Permutation.d.ts +43 -0
- package/dist/Permutation.d.ts.map +1 -0
- package/dist/Permutation.js +142 -0
- package/dist/Permutation.js.map +1 -0
- package/dist/Polygon.d.ts +64 -0
- package/dist/Polygon.d.ts.map +1 -0
- package/dist/Polygon.js +221 -0
- package/dist/Polygon.js.map +1 -0
- package/dist/PolynomialRing.d.ts +74 -0
- package/dist/PolynomialRing.d.ts.map +1 -0
- package/dist/PolynomialRing.js +231 -0
- package/dist/PolynomialRing.js.map +1 -0
- package/dist/Quaternion.d.ts +37 -0
- package/dist/Quaternion.d.ts.map +1 -0
- package/dist/Quaternion.js +106 -0
- package/dist/Quaternion.js.map +1 -0
- package/dist/Rational.d.ts +34 -0
- package/dist/Rational.d.ts.map +1 -0
- package/dist/Rational.js +136 -0
- package/dist/Rational.js.map +1 -0
- package/dist/RealMath.d.ts +112 -0
- package/dist/RealMath.d.ts.map +1 -0
- package/dist/RealMath.js +262 -0
- package/dist/RealMath.js.map +1 -0
- package/dist/Rotor4.d.ts +180 -0
- package/dist/Rotor4.d.ts.map +1 -0
- package/dist/Rotor4.js +388 -0
- package/dist/Rotor4.js.map +1 -0
- package/dist/SpecialFunctions.d.ts +32 -0
- package/dist/SpecialFunctions.d.ts.map +1 -0
- package/dist/SpecialFunctions.js +161 -0
- package/dist/SpecialFunctions.js.map +1 -0
- package/dist/SpecialOperator.d.ts +21 -0
- package/dist/SpecialOperator.d.ts.map +1 -0
- package/dist/SpecialOperator.js +26 -0
- package/dist/SpecialOperator.js.map +1 -0
- package/dist/Statistics.d.ts +50 -0
- package/dist/Statistics.d.ts.map +1 -0
- package/dist/Statistics.js +131 -0
- package/dist/Statistics.js.map +1 -0
- package/dist/StringEvaluator.d.ts +48 -0
- package/dist/StringEvaluator.d.ts.map +1 -0
- package/dist/StringEvaluator.js +190 -0
- package/dist/StringEvaluator.js.map +1 -0
- package/dist/Structure.d.ts +130 -0
- package/dist/Structure.d.ts.map +1 -0
- package/dist/Structure.js +394 -0
- package/dist/Structure.js.map +1 -0
- package/dist/Symbolic.d.ts +501 -0
- package/dist/Symbolic.d.ts.map +1 -0
- package/dist/Symbolic.js +4077 -0
- package/dist/Symbolic.js.map +1 -0
- package/dist/Type.d.ts +31 -0
- package/dist/Type.d.ts.map +1 -0
- package/dist/Type.js +47 -0
- package/dist/Type.js.map +1 -0
- package/dist/Utilities.d.ts +27 -0
- package/dist/Utilities.d.ts.map +1 -0
- package/dist/Utilities.js +47 -0
- package/dist/Utilities.js.map +1 -0
- package/dist/Vec4.d.ts +39 -0
- package/dist/Vec4.d.ts.map +1 -0
- package/dist/Vec4.js +82 -0
- package/dist/Vec4.js.map +1 -0
- package/dist/Vector.d.ts +83 -0
- package/dist/Vector.d.ts.map +1 -0
- package/dist/Vector.js +173 -0
- package/dist/Vector.js.map +1 -0
- package/dist/VectorCalculus.d.ts +42 -0
- package/dist/VectorCalculus.d.ts.map +1 -0
- package/dist/VectorCalculus.js +82 -0
- package/dist/VectorCalculus.js.map +1 -0
- package/dist/VectorUtils.d.ts +172 -0
- package/dist/VectorUtils.d.ts.map +1 -0
- package/dist/VectorUtils.js +706 -0
- package/dist/VectorUtils.js.map +1 -0
- package/dist/differentiation-rules.d.ts +21 -0
- package/dist/differentiation-rules.d.ts.map +1 -0
- package/dist/differentiation-rules.js +52 -0
- package/dist/differentiation-rules.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/package.json +68 -0
- package/src/Bivector4.ts +136 -0
- package/src/CellGraph.ts +669 -0
- package/src/Clifford4Internal.ts +90 -0
- package/src/Combinatorics.ts +183 -0
- package/src/CombinatoricsGenerators.ts +144 -0
- package/src/ComplexMath.ts +162 -0
- package/src/ComplexNumber.ts +491 -0
- package/src/Cycle.ts +126 -0
- package/src/Decimal.ts +145 -0
- package/src/Distributions.ts +269 -0
- package/src/DualNumber.ts +105 -0
- package/src/Environment.ts +127 -0
- package/src/Expression.ts +48 -0
- package/src/FFT.ts +146 -0
- package/src/GeometricAlgebra4.ts +157 -0
- package/src/Geometry.ts +173 -0
- package/src/Graph.ts +337 -0
- package/src/Graph3DUtils.ts +269 -0
- package/src/GraphUtils.ts +159 -0
- package/src/GroupTheory.ts +214 -0
- package/src/IntUtils.ts +200 -0
- package/src/Interval.ts +171 -0
- package/src/Lattice.ts +87 -0
- package/src/Logic.ts +38 -0
- package/src/MatrixMath.ts +326 -0
- package/src/NumberTheory.ts +228 -0
- package/src/Numerical.ts +390 -0
- package/src/Permutation.ts +148 -0
- package/src/Polygon.ts +229 -0
- package/src/PolynomialRing.ts +242 -0
- package/src/Quaternion.ts +125 -0
- package/src/Rational.ts +148 -0
- package/src/RealMath.ts +346 -0
- package/src/Rotor4.ts +440 -0
- package/src/SpecialFunctions.ts +152 -0
- package/src/SpecialOperator.ts +28 -0
- package/src/Statistics.ts +170 -0
- package/src/StringEvaluator.ts +208 -0
- package/src/Structure.ts +481 -0
- package/src/Symbolic.ts +4313 -0
- package/src/Type.ts +48 -0
- package/src/Utilities.ts +49 -0
- package/src/Vec4.ts +98 -0
- package/src/Vector.ts +189 -0
- package/src/VectorCalculus.ts +87 -0
- package/src/VectorUtils.ts +797 -0
- package/src/differentiation-rules.ts +73 -0
- package/src/index.ts +140 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DualNumber.js","sourceRoot":"","sources":["../src/DualNumber.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment — a symbol table mapping string keys to values, with a separate
|
|
3
|
+
* pool of immutable bindings. Used by {@link StringEvaluator} and
|
|
4
|
+
* {@link Expression} to resolve variables and functions.
|
|
5
|
+
*
|
|
6
|
+
* Ported from Mallory's ActionScript `Enviornment` (the original class name was
|
|
7
|
+
* misspelled; corrected here). Deep-clone via Flash `ByteArray` serialisation is
|
|
8
|
+
* replaced with an ordinary entry copy — values are treated as immutable data.
|
|
9
|
+
*/
|
|
10
|
+
export declare class Environment {
|
|
11
|
+
private _items;
|
|
12
|
+
private _immutableItems;
|
|
13
|
+
/**
|
|
14
|
+
* Each consecutive pair of arguments `(key, value)` becomes an immutable
|
|
15
|
+
* binding. A trailing unpaired argument is ignored.
|
|
16
|
+
*/
|
|
17
|
+
constructor(...rest: unknown[]);
|
|
18
|
+
existKey(request: string): boolean;
|
|
19
|
+
existImmutableKey(request: string): boolean;
|
|
20
|
+
existValue(request: unknown): boolean;
|
|
21
|
+
toString(showImmutable?: boolean, showRest?: boolean): string;
|
|
22
|
+
/** A copy of the environment (bindings are shared by reference). */
|
|
23
|
+
clone(): Environment;
|
|
24
|
+
get size(): number;
|
|
25
|
+
get keys(): string[];
|
|
26
|
+
get immutableKeys(): string[];
|
|
27
|
+
get values(): unknown[];
|
|
28
|
+
/** Bind `key` to `value`. Assigning `undefined` (or the key to itself) removes it. */
|
|
29
|
+
assign(key: string, value?: unknown): boolean;
|
|
30
|
+
/** Bind `key` immutably. Fails if the key already exists in either pool. */
|
|
31
|
+
assignImmutable(key: string, value?: unknown): boolean;
|
|
32
|
+
/** Bind `key` to `value` after first resolving `value` in this environment. */
|
|
33
|
+
assignDeep(key: string, value: string): boolean;
|
|
34
|
+
assignImmutableDeep(key: string, value: string): boolean;
|
|
35
|
+
/** Look up `key`; an unknown key resolves to itself (symbolic passthrough). */
|
|
36
|
+
retrieve(key: string): unknown;
|
|
37
|
+
/** Follow chains of string references to the deepest concrete value. */
|
|
38
|
+
retrieveDeep(key: string): unknown;
|
|
39
|
+
/** Remove a mutable binding (immutable ones cannot be removed). */
|
|
40
|
+
remove(key: string): boolean;
|
|
41
|
+
/** Remove an immutable binding (for debugging; normally you should not). */
|
|
42
|
+
removeImmutable(key: string): boolean;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=Environment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Environment.d.ts","sourceRoot":"","sources":["../src/Environment.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,eAAe,CAA8B;IAErD;;;OAGG;gBACS,GAAG,IAAI,EAAE,OAAO,EAAE;IAO9B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIlC,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI3C,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO;IAMrC,QAAQ,CAAC,aAAa,UAAO,EAAE,QAAQ,UAAO,GAAG,MAAM;IAOvD,oEAAoE;IACpE,KAAK,IAAI,WAAW;IAOpB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,IAAI,MAAM,EAAE,CAEnB;IAED,IAAI,aAAa,IAAI,MAAM,EAAE,CAE5B;IAED,IAAI,MAAM,IAAI,OAAO,EAAE,CAEtB;IAED,sFAAsF;IACtF,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAO7C,4EAA4E;IAC5E,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO;IAOtD,+EAA+E;IAC/E,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAI/C,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAIxD,+EAA+E;IAC/E,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAM9B,wEAAwE;IACxE,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAclC,mEAAmE;IACnE,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAK5B,4EAA4E;IAC5E,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGtC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment — a symbol table mapping string keys to values, with a separate
|
|
3
|
+
* pool of immutable bindings. Used by {@link StringEvaluator} and
|
|
4
|
+
* {@link Expression} to resolve variables and functions.
|
|
5
|
+
*
|
|
6
|
+
* Ported from Mallory's ActionScript `Enviornment` (the original class name was
|
|
7
|
+
* misspelled; corrected here). Deep-clone via Flash `ByteArray` serialisation is
|
|
8
|
+
* replaced with an ordinary entry copy — values are treated as immutable data.
|
|
9
|
+
*/
|
|
10
|
+
export class Environment {
|
|
11
|
+
_items = new Map();
|
|
12
|
+
_immutableItems = new Map();
|
|
13
|
+
/**
|
|
14
|
+
* Each consecutive pair of arguments `(key, value)` becomes an immutable
|
|
15
|
+
* binding. A trailing unpaired argument is ignored.
|
|
16
|
+
*/
|
|
17
|
+
constructor(...rest) {
|
|
18
|
+
if (rest.length % 2 === 1)
|
|
19
|
+
rest.pop();
|
|
20
|
+
for (let i = 0; i < rest.length; i += 2) {
|
|
21
|
+
if (typeof rest[i] === "string")
|
|
22
|
+
this.assignImmutable(rest[i], rest[i + 1]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
existKey(request) {
|
|
26
|
+
return this._immutableItems.has(request) || this._items.has(request);
|
|
27
|
+
}
|
|
28
|
+
existImmutableKey(request) {
|
|
29
|
+
return this._immutableItems.has(request);
|
|
30
|
+
}
|
|
31
|
+
existValue(request) {
|
|
32
|
+
for (const v of this._immutableItems.values())
|
|
33
|
+
if (v === request)
|
|
34
|
+
return true;
|
|
35
|
+
for (const v of this._items.values())
|
|
36
|
+
if (v === request)
|
|
37
|
+
return true;
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
toString(showImmutable = true, showRest = true) {
|
|
41
|
+
const result = [];
|
|
42
|
+
if (showImmutable)
|
|
43
|
+
for (const [k, v] of this._immutableItems)
|
|
44
|
+
result.push(`${k} : ${v}`);
|
|
45
|
+
if (showRest)
|
|
46
|
+
for (const [k, v] of this._items)
|
|
47
|
+
result.push(`${k} : ${v}`);
|
|
48
|
+
return `{${result.join(" ; ")}}`;
|
|
49
|
+
}
|
|
50
|
+
/** A copy of the environment (bindings are shared by reference). */
|
|
51
|
+
clone() {
|
|
52
|
+
const out = new Environment();
|
|
53
|
+
out._items = new Map(this._items);
|
|
54
|
+
out._immutableItems = new Map(this._immutableItems);
|
|
55
|
+
return out;
|
|
56
|
+
}
|
|
57
|
+
get size() {
|
|
58
|
+
return this._items.size + this._immutableItems.size;
|
|
59
|
+
}
|
|
60
|
+
get keys() {
|
|
61
|
+
return [...this._immutableItems.keys(), ...this._items.keys()];
|
|
62
|
+
}
|
|
63
|
+
get immutableKeys() {
|
|
64
|
+
return [...this._immutableItems.keys()];
|
|
65
|
+
}
|
|
66
|
+
get values() {
|
|
67
|
+
return [...this._immutableItems.values(), ...this._items.values()];
|
|
68
|
+
}
|
|
69
|
+
/** Bind `key` to `value`. Assigning `undefined` (or the key to itself) removes it. */
|
|
70
|
+
assign(key, value) {
|
|
71
|
+
if (value === undefined || key === value)
|
|
72
|
+
return this.remove(key);
|
|
73
|
+
if (this.existImmutableKey(key))
|
|
74
|
+
return false;
|
|
75
|
+
this._items.set(key, value);
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
/** Bind `key` immutably. Fails if the key already exists in either pool. */
|
|
79
|
+
assignImmutable(key, value) {
|
|
80
|
+
if (value === undefined || key === value)
|
|
81
|
+
return this.remove(key);
|
|
82
|
+
if (this.existKey(key))
|
|
83
|
+
return false;
|
|
84
|
+
this._immutableItems.set(key, value);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
/** Bind `key` to `value` after first resolving `value` in this environment. */
|
|
88
|
+
assignDeep(key, value) {
|
|
89
|
+
return this.assign(key, this.retrieveDeep(value));
|
|
90
|
+
}
|
|
91
|
+
assignImmutableDeep(key, value) {
|
|
92
|
+
return this.assignImmutable(key, this.retrieveDeep(value));
|
|
93
|
+
}
|
|
94
|
+
/** Look up `key`; an unknown key resolves to itself (symbolic passthrough). */
|
|
95
|
+
retrieve(key) {
|
|
96
|
+
if (!this.existKey(key))
|
|
97
|
+
return key;
|
|
98
|
+
if (this.existImmutableKey(key))
|
|
99
|
+
return this._immutableItems.get(key);
|
|
100
|
+
return this._items.get(key);
|
|
101
|
+
}
|
|
102
|
+
/** Follow chains of string references to the deepest concrete value. */
|
|
103
|
+
retrieveDeep(key) {
|
|
104
|
+
let previous = this.retrieve(key);
|
|
105
|
+
// <= (not <): the initial `retrieve` above already consumes one lookup
|
|
106
|
+
// that isn't tied to a loop iteration, so even an empty environment
|
|
107
|
+
// (size 0) must still get one pass to notice `previous === key` and
|
|
108
|
+
// return the symbolic passthrough instead of falling through below.
|
|
109
|
+
for (let i = 0; i <= this.size; i++) {
|
|
110
|
+
if (previous === key)
|
|
111
|
+
return key;
|
|
112
|
+
if (typeof previous !== "string" || previous === this.retrieve(previous))
|
|
113
|
+
return previous;
|
|
114
|
+
previous = this.retrieve(previous);
|
|
115
|
+
}
|
|
116
|
+
return undefined;
|
|
117
|
+
}
|
|
118
|
+
/** Remove a mutable binding (immutable ones cannot be removed). */
|
|
119
|
+
remove(key) {
|
|
120
|
+
if (this.existImmutableKey(key))
|
|
121
|
+
return false;
|
|
122
|
+
return this._items.delete(key);
|
|
123
|
+
}
|
|
124
|
+
/** Remove an immutable binding (for debugging; normally you should not). */
|
|
125
|
+
removeImmutable(key) {
|
|
126
|
+
return this._immutableItems.delete(key);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=Environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Environment.js","sourceRoot":"","sources":["../src/Environment.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Environment } from "./Environment.ts";
|
|
2
|
+
/**
|
|
3
|
+
* Expression — a named formula over a list of independent variables, evaluated
|
|
4
|
+
* by substituting values and delegating to {@link StringEvaluator}. Ported from
|
|
5
|
+
* Mallory's ActionScript `Expression`. (The dead `mx.messaging` import is dropped.)
|
|
6
|
+
*/
|
|
7
|
+
export declare class Expression {
|
|
8
|
+
private readonly _representation;
|
|
9
|
+
private readonly _indeVars;
|
|
10
|
+
constructor(representation?: unknown, independentVariables?: string[] | null);
|
|
11
|
+
indeVarString(): string;
|
|
12
|
+
toString(expanded?: boolean, name?: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Evaluate the expression. `values` are bound to the independent variables
|
|
15
|
+
* (in order); an outer `environment` supplies everything else.
|
|
16
|
+
*/
|
|
17
|
+
evaluate(values?: unknown, environment?: Environment | null): unknown;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=Expression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Expression.d.ts","sourceRoot":"","sources":["../src/Expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;gBAEzB,cAAc,GAAE,OAAY,EAAE,oBAAoB,GAAE,MAAM,EAAE,GAAG,IAAW;IAKtF,aAAa,IAAI,MAAM;IAIvB,QAAQ,CAAC,QAAQ,UAAO,EAAE,IAAI,SAAa,GAAG,MAAM;IAKpD;;;OAGG;IACH,QAAQ,CAAC,MAAM,GAAE,OAAc,EAAE,WAAW,GAAE,WAAW,GAAG,IAAW,GAAG,OAAO;CAiBlF"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Environment } from "./Environment.js";
|
|
2
|
+
import { StringEvaluator } from "./StringEvaluator.js";
|
|
3
|
+
/**
|
|
4
|
+
* Expression — a named formula over a list of independent variables, evaluated
|
|
5
|
+
* by substituting values and delegating to {@link StringEvaluator}. Ported from
|
|
6
|
+
* Mallory's ActionScript `Expression`. (The dead `mx.messaging` import is dropped.)
|
|
7
|
+
*/
|
|
8
|
+
export class Expression {
|
|
9
|
+
_representation;
|
|
10
|
+
_indeVars;
|
|
11
|
+
constructor(representation = "", independentVariables = null) {
|
|
12
|
+
this._representation = String(representation);
|
|
13
|
+
this._indeVars = independentVariables ?? [];
|
|
14
|
+
}
|
|
15
|
+
indeVarString() {
|
|
16
|
+
return this._indeVars.join(",");
|
|
17
|
+
}
|
|
18
|
+
toString(expanded = true, name = "function") {
|
|
19
|
+
if (expanded)
|
|
20
|
+
return `${name}(${this.indeVarString()})=${this._representation}`;
|
|
21
|
+
return this._representation;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Evaluate the expression. `values` are bound to the independent variables
|
|
25
|
+
* (in order); an outer `environment` supplies everything else.
|
|
26
|
+
*/
|
|
27
|
+
evaluate(values = null, environment = null) {
|
|
28
|
+
const args = Array.isArray(values) ? values : [values];
|
|
29
|
+
if (environment === null) {
|
|
30
|
+
const subEnvironment = new Environment();
|
|
31
|
+
for (let i = 0; i < this._indeVars.length; i++) {
|
|
32
|
+
subEnvironment.assign(this._indeVars[i], args[i]);
|
|
33
|
+
}
|
|
34
|
+
return StringEvaluator.evaluate(this._representation, subEnvironment);
|
|
35
|
+
}
|
|
36
|
+
const subEnvironment = environment.clone();
|
|
37
|
+
for (let i = 0; i < this._indeVars.length; i++) {
|
|
38
|
+
subEnvironment.assign(this._indeVars[i], args[i]);
|
|
39
|
+
}
|
|
40
|
+
return StringEvaluator.evaluate(StringEvaluator.evaluate(this._representation, subEnvironment), environment);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=Expression.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Expression.js","sourceRoot":"","sources":["../src/Expression.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,OAAO,UAAU;IACJ,eAAe,CAAS;IACxB,SAAS,CAAW;IAErC,YAAY,iBAA0B,EAAE,EAAE,uBAAwC,IAAI;QACpF,IAAI,CAAC,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAC9C,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,CAAC,QAAQ,GAAG,IAAI,EAAE,IAAI,GAAG,UAAU;QACzC,IAAI,QAAQ;YAAE,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,KAAK,IAAI,CAAC,eAAe,EAAE,CAAC;QAChF,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,QAAQ,CAAC,SAAkB,IAAI,EAAE,cAAkC,IAAI;QACrE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAEvD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/C,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,CAAC;YACD,OAAO,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;QACxE,CAAC;QAED,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,eAAe,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IAC/G,CAAC;CACF"}
|
package/dist/FFT.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ComplexNumber } from "./ComplexNumber.ts";
|
|
2
|
+
/**
|
|
3
|
+
* FFT — the discrete Fourier transform and its fast (Cooley-Tukey) radix-2
|
|
4
|
+
* implementation, plus the inverse transform and FFT-based convolution. Builds
|
|
5
|
+
* on {@link ComplexNumber}. Inputs may be complex numbers or plain reals.
|
|
6
|
+
*/
|
|
7
|
+
type Signal = ReadonlyArray<ComplexNumber | number>;
|
|
8
|
+
export declare class FFT {
|
|
9
|
+
/** Fast Fourier transform (input length must be a power of two). */
|
|
10
|
+
static fft(input: Signal): ComplexNumber[];
|
|
11
|
+
/** Inverse fast Fourier transform. */
|
|
12
|
+
static ifft(input: Signal): ComplexNumber[];
|
|
13
|
+
/** FFT with the input zero-padded up to the next power of two. */
|
|
14
|
+
static fftPadded(input: Signal): ComplexNumber[];
|
|
15
|
+
/** Direct O(n²) discrete Fourier transform for any length (reference implementation). */
|
|
16
|
+
static dft(input: Signal): ComplexNumber[];
|
|
17
|
+
/** Linear convolution of two real (or complex) signals, via the FFT. */
|
|
18
|
+
static convolve(a: Signal, b: Signal): ComplexNumber[];
|
|
19
|
+
}
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=FFT.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FFT.d.ts","sourceRoot":"","sources":["../src/FFT.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD;;;;GAIG;AAEH,KAAK,MAAM,GAAG,aAAa,CAAC,aAAa,GAAG,MAAM,CAAC,CAAC;AA+DpD,qBAAa,GAAG;IACd,oEAAoE;IACpE,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAO1C,sCAAsC;IACtC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAO3C,kEAAkE;IAClE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAYhD,yFAAyF;IACzF,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE;IAiB1C,wEAAwE;IACxE,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,aAAa,EAAE;CAyBvD"}
|
package/dist/FFT.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { ComplexNumber } from "./ComplexNumber.js";
|
|
2
|
+
const toParts = (input) => {
|
|
3
|
+
const re = [];
|
|
4
|
+
const im = [];
|
|
5
|
+
for (const x of input) {
|
|
6
|
+
if (x instanceof ComplexNumber) {
|
|
7
|
+
re.push(x.value);
|
|
8
|
+
im.push(x.iValue);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
re.push(x);
|
|
12
|
+
im.push(0);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return { re, im };
|
|
16
|
+
};
|
|
17
|
+
const toComplex = (re, im) => re.map((r, i) => new ComplexNumber(r, im[i]));
|
|
18
|
+
const isPowerOfTwo = (n) => n > 0 && (n & (n - 1)) === 0;
|
|
19
|
+
/** In-place iterative radix-2 Cooley-Tukey. `invert` runs the inverse transform. */
|
|
20
|
+
function transform(re, im, invert) {
|
|
21
|
+
const n = re.length;
|
|
22
|
+
// bit-reversal permutation
|
|
23
|
+
for (let i = 1, j = 0; i < n; i++) {
|
|
24
|
+
let bit = n >> 1;
|
|
25
|
+
for (; j & bit; bit >>= 1)
|
|
26
|
+
j ^= bit;
|
|
27
|
+
j ^= bit;
|
|
28
|
+
if (i < j) {
|
|
29
|
+
[re[i], re[j]] = [re[j], re[i]];
|
|
30
|
+
[im[i], im[j]] = [im[j], im[i]];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
for (let len = 2; len <= n; len <<= 1) {
|
|
34
|
+
const ang = ((2 * Math.PI) / len) * (invert ? 1 : -1);
|
|
35
|
+
const wlenR = Math.cos(ang);
|
|
36
|
+
const wlenI = Math.sin(ang);
|
|
37
|
+
for (let i = 0; i < n; i += len) {
|
|
38
|
+
let wr = 1;
|
|
39
|
+
let wi = 0;
|
|
40
|
+
for (let j = 0; j < len / 2; j++) {
|
|
41
|
+
const uR = re[i + j];
|
|
42
|
+
const uI = im[i + j];
|
|
43
|
+
const vR = re[i + j + len / 2] * wr - im[i + j + len / 2] * wi;
|
|
44
|
+
const vI = re[i + j + len / 2] * wi + im[i + j + len / 2] * wr;
|
|
45
|
+
re[i + j] = uR + vR;
|
|
46
|
+
im[i + j] = uI + vI;
|
|
47
|
+
re[i + j + len / 2] = uR - vR;
|
|
48
|
+
im[i + j + len / 2] = uI - vI;
|
|
49
|
+
const nwr = wr * wlenR - wi * wlenI;
|
|
50
|
+
wi = wr * wlenI + wi * wlenR;
|
|
51
|
+
wr = nwr;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (invert)
|
|
56
|
+
for (let i = 0; i < n; i++) {
|
|
57
|
+
re[i] /= n;
|
|
58
|
+
im[i] /= n;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export class FFT {
|
|
62
|
+
/** Fast Fourier transform (input length must be a power of two). */
|
|
63
|
+
static fft(input) {
|
|
64
|
+
const { re, im } = toParts(input);
|
|
65
|
+
if (!isPowerOfTwo(re.length))
|
|
66
|
+
throw new Error("FFT input length must be a power of two (see fftPadded).");
|
|
67
|
+
transform(re, im, false);
|
|
68
|
+
return toComplex(re, im);
|
|
69
|
+
}
|
|
70
|
+
/** Inverse fast Fourier transform. */
|
|
71
|
+
static ifft(input) {
|
|
72
|
+
const { re, im } = toParts(input);
|
|
73
|
+
if (!isPowerOfTwo(re.length))
|
|
74
|
+
throw new Error("IFFT input length must be a power of two.");
|
|
75
|
+
transform(re, im, true);
|
|
76
|
+
return toComplex(re, im);
|
|
77
|
+
}
|
|
78
|
+
/** FFT with the input zero-padded up to the next power of two. */
|
|
79
|
+
static fftPadded(input) {
|
|
80
|
+
const { re, im } = toParts(input);
|
|
81
|
+
let n = 1;
|
|
82
|
+
while (n < re.length)
|
|
83
|
+
n <<= 1;
|
|
84
|
+
while (re.length < n) {
|
|
85
|
+
re.push(0);
|
|
86
|
+
im.push(0);
|
|
87
|
+
}
|
|
88
|
+
transform(re, im, false);
|
|
89
|
+
return toComplex(re, im);
|
|
90
|
+
}
|
|
91
|
+
/** Direct O(n²) discrete Fourier transform for any length (reference implementation). */
|
|
92
|
+
static dft(input) {
|
|
93
|
+
const { re, im } = toParts(input);
|
|
94
|
+
const n = re.length;
|
|
95
|
+
const out = [];
|
|
96
|
+
for (let k = 0; k < n; k++) {
|
|
97
|
+
let sumR = 0;
|
|
98
|
+
let sumI = 0;
|
|
99
|
+
for (let t = 0; t < n; t++) {
|
|
100
|
+
const ang = (-2 * Math.PI * k * t) / n;
|
|
101
|
+
sumR += re[t] * Math.cos(ang) - im[t] * Math.sin(ang);
|
|
102
|
+
sumI += re[t] * Math.sin(ang) + im[t] * Math.cos(ang);
|
|
103
|
+
}
|
|
104
|
+
out.push(new ComplexNumber(sumR, sumI));
|
|
105
|
+
}
|
|
106
|
+
return out;
|
|
107
|
+
}
|
|
108
|
+
/** Linear convolution of two real (or complex) signals, via the FFT. */
|
|
109
|
+
static convolve(a, b) {
|
|
110
|
+
const resultLen = a.length + b.length - 1;
|
|
111
|
+
let n = 1;
|
|
112
|
+
while (n < resultLen)
|
|
113
|
+
n <<= 1;
|
|
114
|
+
const pad = (s) => {
|
|
115
|
+
const { re, im } = toParts(s);
|
|
116
|
+
while (re.length < n) {
|
|
117
|
+
re.push(0);
|
|
118
|
+
im.push(0);
|
|
119
|
+
}
|
|
120
|
+
return { re, im };
|
|
121
|
+
};
|
|
122
|
+
const A = pad(a);
|
|
123
|
+
const B = pad(b);
|
|
124
|
+
transform(A.re, A.im, false);
|
|
125
|
+
transform(B.re, B.im, false);
|
|
126
|
+
const re = new Array(n);
|
|
127
|
+
const im = new Array(n);
|
|
128
|
+
for (let i = 0; i < n; i++) {
|
|
129
|
+
re[i] = A.re[i] * B.re[i] - A.im[i] * B.im[i];
|
|
130
|
+
im[i] = A.re[i] * B.im[i] + A.im[i] * B.re[i];
|
|
131
|
+
}
|
|
132
|
+
transform(re, im, true);
|
|
133
|
+
return toComplex(re.slice(0, resultLen), im.slice(0, resultLen));
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=FFT.js.map
|
package/dist/FFT.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FFT.js","sourceRoot":"","sources":["../src/FFT.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GeometricAlgebra4 — the products that combine {@link Vec4} and
|
|
3
|
+
* {@link Bivector4} objects, mirroring how {@link ComplexMath} and
|
|
4
|
+
* {@link RealMath} hold the free-function operations for their respective
|
|
5
|
+
* types. {@link Rotor4} is built on top of these.
|
|
6
|
+
*
|
|
7
|
+
* Scope note: this module only implements the specific products the physics
|
|
8
|
+
* and rendering layers of a 4D engine actually need (vector·vector,
|
|
9
|
+
* vector∧vector, bivector*bivector, and the Hodge dual of a bivector) rather
|
|
10
|
+
* than a fully generic arbitrary-grade multivector type — Cl(4,0) has 16
|
|
11
|
+
* basis blades across grades 0–4, but rotors only ever touch grades 0, 2, 4,
|
|
12
|
+
* and nothing in this package needs grade-1 (vector) or grade-3 (trivector)
|
|
13
|
+
* results from a product.
|
|
14
|
+
*/
|
|
15
|
+
import { Bivector4 } from "./Bivector4.ts";
|
|
16
|
+
import { type Multivector4 } from "./Clifford4Internal.ts";
|
|
17
|
+
import { Vec4 } from "./Vec4.ts";
|
|
18
|
+
export declare function bivectorToMV(b: Bivector4): Multivector4;
|
|
19
|
+
export declare function bivectorFromMV(mv: Multivector4): Bivector4;
|
|
20
|
+
/** The Euclidean inner product `a · b` (a scalar). Equivalent to `a.dot(b)`. */
|
|
21
|
+
export declare function dotProduct(a: Vec4, b: Vec4): number;
|
|
22
|
+
/** The outer (wedge) product `a ∧ b` — the oriented 2-plane spanned by `a` and `b`. */
|
|
23
|
+
export declare function wedgeProduct(a: Vec4, b: Vec4): Bivector4;
|
|
24
|
+
export interface VectorGeometricProduct {
|
|
25
|
+
readonly scalar: number;
|
|
26
|
+
readonly bivector: Bivector4;
|
|
27
|
+
}
|
|
28
|
+
/** The full geometric product `a * b = a·b + a∧b` of two vectors. */
|
|
29
|
+
export declare function geometricProductVectors(a: Vec4, b: Vec4): VectorGeometricProduct;
|
|
30
|
+
export interface BivectorGeometricProduct {
|
|
31
|
+
readonly scalar: number;
|
|
32
|
+
readonly bivector: Bivector4;
|
|
33
|
+
readonly pseudoscalar: number;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The full geometric product `A * B` of two bivectors: `⟨AB⟩₀ + ⟨AB⟩₂ + ⟨AB⟩₄`.
|
|
37
|
+
* This is the operation that makes 4D rotors an 8-component (1 + 6 + 1)
|
|
38
|
+
* object — the grade-4 (pseudoscalar) term has no 3D analogue, since in 3D
|
|
39
|
+
* the product of two bivectors never produces a grade-4 term (3D has no
|
|
40
|
+
* grade above 3). It's exactly this term that lets a 4D rotor encode a
|
|
41
|
+
* *double rotation*: simultaneous rotation in two independent orthogonal
|
|
42
|
+
* planes at once.
|
|
43
|
+
*/
|
|
44
|
+
export declare function geometricProductBivectors(a: Bivector4, b: Bivector4): BivectorGeometricProduct;
|
|
45
|
+
/**
|
|
46
|
+
* Hodge dual of a bivector in 4D: maps each basis 2-plane to its orthogonal
|
|
47
|
+
* complement 2-plane (e.g. `dual(e12) = ±e34`), scaled by the pseudoscalar.
|
|
48
|
+
* Unlike 3D (where the dual of a bivector is a vector), the 4D dual of a
|
|
49
|
+
* bivector is again a bivector — this is a 4D-specific fact worth remembering
|
|
50
|
+
* when porting 3D geometric intuition.
|
|
51
|
+
*/
|
|
52
|
+
export declare function dual(b: Bivector4): Bivector4;
|
|
53
|
+
/**
|
|
54
|
+
* The commutator product `A × B = ½(AB − BA)` of two bivectors -- distinct
|
|
55
|
+
* from {@link geometricProductBivectors}'s full `AB`. This is the operation
|
|
56
|
+
* n-dimensional rigid body dynamics needs for the generalized Euler's
|
|
57
|
+
* equation `L_t(ω) = I(ω_t) − ω × I(ω) = τ` (angular momentum, inertia
|
|
58
|
+
* tensor, and torque are all bivectors in 4D; this `×` is the commutator,
|
|
59
|
+
* not the 3D cross product it specializes to in 3D).
|
|
60
|
+
*/
|
|
61
|
+
export declare function commutatorProduct(a: Bivector4, b: Bivector4): Bivector4;
|
|
62
|
+
/**
|
|
63
|
+
* The left contraction `v⌋B` of a vector into a bivector, producing a
|
|
64
|
+
* vector -- the grade-1 part of the geometric product `vB` (the geometric
|
|
65
|
+
* product of a grade-1 and a grade-2 element splits into grade 1 [this] and
|
|
66
|
+
* grade 3, and this package doesn't otherwise need grade-3/trivector
|
|
67
|
+
* results, so only the grade-1 part is extracted here). Needed for a rigid
|
|
68
|
+
* body's point velocity: `v_point = v + r⌋ω`, where `v` is linear velocity
|
|
69
|
+
* (Vec4), `ω` is angular velocity (Bivector4), and `r` is the point's offset
|
|
70
|
+
* from the body's center of mass.
|
|
71
|
+
*/
|
|
72
|
+
export declare function leftContraction(v: Vec4, b: Bivector4): Vec4;
|
|
73
|
+
//# sourceMappingURL=GeometricAlgebra4.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeometricAlgebra4.d.ts","sourceRoot":"","sources":["../src/GeometricAlgebra4.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAYL,KAAK,YAAY,EAIlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAWjC,wBAAgB,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,YAAY,CASvD;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,YAAY,GAAG,SAAS,CAS1D;AAED,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,MAAM,CAEnD;AAED,uFAAuF;AACvF,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,SAAS,CAExD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;CAC9B;AAED,qEAAqE;AACrE,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,GAAG,sBAAsB,CAGhF;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,wBAAwB,CAO9F;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,SAAS,CAQ5C;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAMvE;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,GAAG,IAAI,CAG3D"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GeometricAlgebra4 — the products that combine {@link Vec4} and
|
|
3
|
+
* {@link Bivector4} objects, mirroring how {@link ComplexMath} and
|
|
4
|
+
* {@link RealMath} hold the free-function operations for their respective
|
|
5
|
+
* types. {@link Rotor4} is built on top of these.
|
|
6
|
+
*
|
|
7
|
+
* Scope note: this module only implements the specific products the physics
|
|
8
|
+
* and rendering layers of a 4D engine actually need (vector·vector,
|
|
9
|
+
* vector∧vector, bivector*bivector, and the Hodge dual of a bivector) rather
|
|
10
|
+
* than a fully generic arbitrary-grade multivector type — Cl(4,0) has 16
|
|
11
|
+
* basis blades across grades 0–4, but rotors only ever touch grades 0, 2, 4,
|
|
12
|
+
* and nothing in this package needs grade-1 (vector) or grade-3 (trivector)
|
|
13
|
+
* results from a product.
|
|
14
|
+
*/
|
|
15
|
+
import { Bivector4 } from "./Bivector4.js";
|
|
16
|
+
import { E1, E2, E3, E4, E12, E13, E14, E23, E24, E34, geometricProductMV, mvZero, PSEUDOSCALAR4, wedgeProductMV, } from "./Clifford4Internal.js";
|
|
17
|
+
import { Vec4 } from "./Vec4.js";
|
|
18
|
+
function vecToMV(v) {
|
|
19
|
+
const mv = mvZero();
|
|
20
|
+
mv[E1] = v.x;
|
|
21
|
+
mv[E2] = v.y;
|
|
22
|
+
mv[E3] = v.z;
|
|
23
|
+
mv[E4] = v.w;
|
|
24
|
+
return mv;
|
|
25
|
+
}
|
|
26
|
+
export function bivectorToMV(b) {
|
|
27
|
+
const mv = mvZero();
|
|
28
|
+
mv[E12] = b.xy;
|
|
29
|
+
mv[E13] = b.xz;
|
|
30
|
+
mv[E14] = b.xw;
|
|
31
|
+
mv[E23] = b.yz;
|
|
32
|
+
mv[E24] = b.yw;
|
|
33
|
+
mv[E34] = b.zw;
|
|
34
|
+
return mv;
|
|
35
|
+
}
|
|
36
|
+
export function bivectorFromMV(mv) {
|
|
37
|
+
return new Bivector4(mv[E12], mv[E13], mv[E14], mv[E23], mv[E24], mv[E34]);
|
|
38
|
+
}
|
|
39
|
+
/** The Euclidean inner product `a · b` (a scalar). Equivalent to `a.dot(b)`. */
|
|
40
|
+
export function dotProduct(a, b) {
|
|
41
|
+
return a.dot(b);
|
|
42
|
+
}
|
|
43
|
+
/** The outer (wedge) product `a ∧ b` — the oriented 2-plane spanned by `a` and `b`. */
|
|
44
|
+
export function wedgeProduct(a, b) {
|
|
45
|
+
return bivectorFromMV(wedgeProductMV(vecToMV(a), vecToMV(b)));
|
|
46
|
+
}
|
|
47
|
+
/** The full geometric product `a * b = a·b + a∧b` of two vectors. */
|
|
48
|
+
export function geometricProductVectors(a, b) {
|
|
49
|
+
const mv = geometricProductMV(vecToMV(a), vecToMV(b));
|
|
50
|
+
return { scalar: mv[0], bivector: bivectorFromMV(mv) };
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* The full geometric product `A * B` of two bivectors: `⟨AB⟩₀ + ⟨AB⟩₂ + ⟨AB⟩₄`.
|
|
54
|
+
* This is the operation that makes 4D rotors an 8-component (1 + 6 + 1)
|
|
55
|
+
* object — the grade-4 (pseudoscalar) term has no 3D analogue, since in 3D
|
|
56
|
+
* the product of two bivectors never produces a grade-4 term (3D has no
|
|
57
|
+
* grade above 3). It's exactly this term that lets a 4D rotor encode a
|
|
58
|
+
* *double rotation*: simultaneous rotation in two independent orthogonal
|
|
59
|
+
* planes at once.
|
|
60
|
+
*/
|
|
61
|
+
export function geometricProductBivectors(a, b) {
|
|
62
|
+
const mv = geometricProductMV(bivectorToMV(a), bivectorToMV(b));
|
|
63
|
+
return {
|
|
64
|
+
scalar: mv[0],
|
|
65
|
+
bivector: bivectorFromMV(mv),
|
|
66
|
+
pseudoscalar: mv[PSEUDOSCALAR4],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Hodge dual of a bivector in 4D: maps each basis 2-plane to its orthogonal
|
|
71
|
+
* complement 2-plane (e.g. `dual(e12) = ±e34`), scaled by the pseudoscalar.
|
|
72
|
+
* Unlike 3D (where the dual of a bivector is a vector), the 4D dual of a
|
|
73
|
+
* bivector is again a bivector — this is a 4D-specific fact worth remembering
|
|
74
|
+
* when porting 3D geometric intuition.
|
|
75
|
+
*/
|
|
76
|
+
export function dual(b) {
|
|
77
|
+
// Multiplying by the inverse pseudoscalar (I⁻¹ = -I in Cl(4,0), since
|
|
78
|
+
// I*I = +1... actually for Cl(4,0), I^2 = (e1e2e3e4)^2 = +1, so I⁻¹ = I)
|
|
79
|
+
// implements the Hodge dual via the geometric product with I.
|
|
80
|
+
const I = mvZero();
|
|
81
|
+
I[PSEUDOSCALAR4] = 1;
|
|
82
|
+
const mv = geometricProductMV(bivectorToMV(b), I);
|
|
83
|
+
return bivectorFromMV(mv);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The commutator product `A × B = ½(AB − BA)` of two bivectors -- distinct
|
|
87
|
+
* from {@link geometricProductBivectors}'s full `AB`. This is the operation
|
|
88
|
+
* n-dimensional rigid body dynamics needs for the generalized Euler's
|
|
89
|
+
* equation `L_t(ω) = I(ω_t) − ω × I(ω) = τ` (angular momentum, inertia
|
|
90
|
+
* tensor, and torque are all bivectors in 4D; this `×` is the commutator,
|
|
91
|
+
* not the 3D cross product it specializes to in 3D).
|
|
92
|
+
*/
|
|
93
|
+
export function commutatorProduct(a, b) {
|
|
94
|
+
const ab = geometricProductMV(bivectorToMV(a), bivectorToMV(b));
|
|
95
|
+
const ba = geometricProductMV(bivectorToMV(b), bivectorToMV(a));
|
|
96
|
+
const commutator = mvZero();
|
|
97
|
+
for (let i = 0; i < commutator.length; i++)
|
|
98
|
+
commutator[i] = (ab[i] - ba[i]) / 2;
|
|
99
|
+
return bivectorFromMV(commutator);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* The left contraction `v⌋B` of a vector into a bivector, producing a
|
|
103
|
+
* vector -- the grade-1 part of the geometric product `vB` (the geometric
|
|
104
|
+
* product of a grade-1 and a grade-2 element splits into grade 1 [this] and
|
|
105
|
+
* grade 3, and this package doesn't otherwise need grade-3/trivector
|
|
106
|
+
* results, so only the grade-1 part is extracted here). Needed for a rigid
|
|
107
|
+
* body's point velocity: `v_point = v + r⌋ω`, where `v` is linear velocity
|
|
108
|
+
* (Vec4), `ω` is angular velocity (Bivector4), and `r` is the point's offset
|
|
109
|
+
* from the body's center of mass.
|
|
110
|
+
*/
|
|
111
|
+
export function leftContraction(v, b) {
|
|
112
|
+
const mv = geometricProductMV(vecToMV(v), bivectorToMV(b));
|
|
113
|
+
return new Vec4(mv[E1], mv[E2], mv[E3], mv[E4]);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=GeometricAlgebra4.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GeometricAlgebra4.js","sourceRoot":"","sources":["../src/GeometricAlgebra4.ts"],"names":[],"mappings":"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"}
|