@2112-lab/central-plant 0.1.4 → 0.1.5
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/dist/cjs/_virtual/_rollupPluginBabelHelpers.js +432 -1
- package/dist/cjs/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1448 -1
- package/dist/cjs/node_modules/three/examples/jsm/controls/OrbitControls.js +1853 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3537 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/OBJExporter.js +305 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/PLYExporter.js +542 -1
- package/dist/cjs/node_modules/three/examples/jsm/exporters/STLExporter.js +218 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/DRACOLoader.js +683 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4811 -1
- package/dist/cjs/node_modules/three/examples/jsm/loaders/RGBELoader.js +480 -1
- package/dist/cjs/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +309 -1
- package/dist/cjs/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +120 -1
- package/dist/cjs/src/analysis/analysis.js +560 -1
- package/dist/cjs/src/analysis/testing.js +958 -1
- package/dist/cjs/src/core/centralPlant.js +1149 -1
- package/dist/cjs/src/core/debugLogger.js +175 -1
- package/dist/cjs/src/core/mathUtils.js +574 -1
- package/dist/cjs/src/core/nameUtils.js +93 -1
- package/dist/cjs/src/data/export.js +716 -1
- package/dist/cjs/src/data/import.js +380 -1
- package/dist/cjs/src/data/numerics.js +522 -1
- package/dist/cjs/src/helpers/sceneHelper.js +572 -1
- package/dist/cjs/src/index.js +69 -1
- package/dist/cjs/src/managers/components/animationManager.js +123 -1
- package/dist/cjs/src/managers/components/componentManager.js +332 -1
- package/dist/cjs/src/managers/components/pathfindingManager.js +1441 -1
- package/dist/cjs/src/managers/controls/TransformControls.js +1063 -1
- package/dist/cjs/src/managers/controls/cameraControlsManager.js +79 -1
- package/dist/cjs/src/managers/controls/dragDropManager.js +1026 -1
- package/dist/cjs/src/managers/controls/keyboardControlsManager.js +395 -1
- package/dist/cjs/src/managers/controls/transformControlsManager.js +1807 -1
- package/dist/cjs/src/managers/environment/environmentManager.js +714 -1
- package/dist/cjs/src/managers/environment/textureConfig.js +229 -1
- package/dist/cjs/src/managers/scene/sceneExportManager.js +264 -1
- package/dist/cjs/src/managers/scene/sceneInitializationManager.js +346 -1
- package/dist/cjs/src/managers/scene/sceneOperationsManager.js +1509 -1
- package/dist/cjs/src/managers/scene/sceneTooltipsManager.js +661 -1
- package/dist/cjs/src/managers/system/disposalManager.js +444 -1
- package/dist/cjs/src/managers/system/hotReloadManager.js +291 -1
- package/dist/cjs/src/managers/system/performanceMonitor.js +863 -1
- package/dist/cjs/src/rendering/modelPreloader.js +369 -1
- package/dist/cjs/src/rendering/rendering2D.js +631 -1
- package/dist/cjs/src/rendering/rendering3D.js +685 -1
- package/dist/esm/_virtual/_rollupPluginBabelHelpers.js +396 -1
- package/dist/esm/node_modules/@2112-lab/pathfinder/dist/index.esm.js +1444 -1
- package/dist/esm/node_modules/three/examples/jsm/controls/OrbitControls.js +1849 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/GLTFExporter.js +3533 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/OBJExporter.js +301 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/PLYExporter.js +538 -1
- package/dist/esm/node_modules/three/examples/jsm/exporters/STLExporter.js +214 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/DRACOLoader.js +679 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/GLTFLoader.js +4807 -1
- package/dist/esm/node_modules/three/examples/jsm/loaders/RGBELoader.js +476 -1
- package/dist/esm/node_modules/three/examples/jsm/renderers/CSS2DRenderer.js +304 -1
- package/dist/esm/node_modules/three/examples/jsm/utils/BufferGeometryUtils.js +116 -1
- package/dist/esm/src/analysis/analysis.js +536 -1
- package/dist/esm/src/analysis/testing.js +954 -1
- package/dist/esm/src/core/centralPlant.js +1144 -1
- package/dist/esm/src/core/debugLogger.js +167 -1
- package/dist/esm/src/core/mathUtils.js +570 -1
- package/dist/esm/src/core/nameUtils.js +87 -1
- package/dist/esm/src/data/export.js +712 -1
- package/dist/esm/src/data/import.js +356 -1
- package/dist/esm/src/data/numerics.js +518 -1
- package/dist/esm/src/helpers/sceneHelper.js +547 -1
- package/dist/esm/src/index.js +35 -1
- package/dist/esm/src/managers/components/animationManager.js +119 -1
- package/dist/esm/src/managers/components/componentManager.js +328 -1
- package/dist/esm/src/managers/components/pathfindingManager.js +1417 -1
- package/dist/esm/src/managers/controls/TransformControls.js +1057 -1
- package/dist/esm/src/managers/controls/cameraControlsManager.js +75 -1
- package/dist/esm/src/managers/controls/dragDropManager.js +1002 -1
- package/dist/esm/src/managers/controls/keyboardControlsManager.js +371 -1
- package/dist/esm/src/managers/controls/transformControlsManager.js +1782 -1
- package/dist/esm/src/managers/environment/environmentManager.js +690 -1
- package/dist/esm/src/managers/environment/textureConfig.js +202 -1
- package/dist/esm/src/managers/scene/sceneExportManager.js +260 -1
- package/dist/esm/src/managers/scene/sceneInitializationManager.js +322 -1
- package/dist/esm/src/managers/scene/sceneOperationsManager.js +1485 -1
- package/dist/esm/src/managers/scene/sceneTooltipsManager.js +637 -1
- package/dist/esm/src/managers/system/disposalManager.js +440 -1
- package/dist/esm/src/managers/system/hotReloadManager.js +287 -1
- package/dist/esm/src/managers/system/performanceMonitor.js +858 -1
- package/dist/esm/src/rendering/modelPreloader.js +364 -1
- package/dist/esm/src/rendering/rendering2D.js +627 -1
- package/dist/esm/src/rendering/rendering3D.js +661 -1
- package/package.json +1 -1
|
@@ -1 +1,522 @@
|
|
|
1
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('../../_virtual/_rollupPluginBabelHelpers.js');
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Numerics
|
|
9
|
+
* Handles numerical computations, calculations, and data processing
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
var Numerics = /*#__PURE__*/function () {
|
|
13
|
+
function Numerics() {
|
|
14
|
+
var _this = this;
|
|
15
|
+
_rollupPluginBabelHelpers.classCallCheck(this, Numerics);
|
|
16
|
+
/**
|
|
17
|
+
* Vector operations
|
|
18
|
+
*/
|
|
19
|
+
_rollupPluginBabelHelpers.defineProperty(this, "vector", {
|
|
20
|
+
/**
|
|
21
|
+
* Add two vectors
|
|
22
|
+
* @param {Array} a - First vector
|
|
23
|
+
* @param {Array} b - Second vector
|
|
24
|
+
* @returns {Array} Result vector
|
|
25
|
+
*/
|
|
26
|
+
add: function add(a, b) {
|
|
27
|
+
return a.map(function (val, i) {
|
|
28
|
+
return val + (b[i] || 0);
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
/**
|
|
32
|
+
* Subtract two vectors
|
|
33
|
+
* @param {Array} a - First vector
|
|
34
|
+
* @param {Array} b - Second vector
|
|
35
|
+
* @returns {Array} Result vector
|
|
36
|
+
*/
|
|
37
|
+
subtract: function subtract(a, b) {
|
|
38
|
+
return a.map(function (val, i) {
|
|
39
|
+
return val - (b[i] || 0);
|
|
40
|
+
});
|
|
41
|
+
},
|
|
42
|
+
/**
|
|
43
|
+
* Multiply vector by scalar
|
|
44
|
+
* @param {Array} vector - Input vector
|
|
45
|
+
* @param {number} scalar - Scalar value
|
|
46
|
+
* @returns {Array} Result vector
|
|
47
|
+
*/
|
|
48
|
+
scale: function scale(vector, scalar) {
|
|
49
|
+
return vector.map(function (val) {
|
|
50
|
+
return val * scalar;
|
|
51
|
+
});
|
|
52
|
+
},
|
|
53
|
+
/**
|
|
54
|
+
* Calculate dot product
|
|
55
|
+
* @param {Array} a - First vector
|
|
56
|
+
* @param {Array} b - Second vector
|
|
57
|
+
* @returns {number} Dot product
|
|
58
|
+
*/
|
|
59
|
+
dot: function dot(a, b) {
|
|
60
|
+
return a.reduce(function (sum, val, i) {
|
|
61
|
+
return sum + val * (b[i] || 0);
|
|
62
|
+
}, 0);
|
|
63
|
+
},
|
|
64
|
+
/**
|
|
65
|
+
* Calculate cross product (3D only)
|
|
66
|
+
* @param {Array} a - First vector [x, y, z]
|
|
67
|
+
* @param {Array} b - Second vector [x, y, z]
|
|
68
|
+
* @returns {Array} Cross product vector
|
|
69
|
+
*/
|
|
70
|
+
cross: function cross(a, b) {
|
|
71
|
+
return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
|
|
72
|
+
},
|
|
73
|
+
/**
|
|
74
|
+
* Calculate vector magnitude
|
|
75
|
+
* @param {Array} vector - Input vector
|
|
76
|
+
* @returns {number} Magnitude
|
|
77
|
+
*/
|
|
78
|
+
magnitude: function magnitude(vector) {
|
|
79
|
+
return Math.sqrt(vector.reduce(function (sum, val) {
|
|
80
|
+
return sum + val * val;
|
|
81
|
+
}, 0));
|
|
82
|
+
},
|
|
83
|
+
/**
|
|
84
|
+
* Normalize vector
|
|
85
|
+
* @param {Array} vector - Input vector
|
|
86
|
+
* @returns {Array} Normalized vector
|
|
87
|
+
*/
|
|
88
|
+
normalize: function normalize(vector) {
|
|
89
|
+
var mag = _this.vector.magnitude(vector);
|
|
90
|
+
return mag > 0 ? vector.map(function (val) {
|
|
91
|
+
return val / mag;
|
|
92
|
+
}) : vector.slice();
|
|
93
|
+
},
|
|
94
|
+
/**
|
|
95
|
+
* Calculate distance between two points
|
|
96
|
+
* @param {Array} a - First point
|
|
97
|
+
* @param {Array} b - Second point
|
|
98
|
+
* @returns {number} Distance
|
|
99
|
+
*/
|
|
100
|
+
distance: function distance(a, b) {
|
|
101
|
+
return _this.vector.magnitude(_this.vector.subtract(a, b));
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Linear interpolation between two vectors
|
|
105
|
+
* @param {Array} a - Start vector
|
|
106
|
+
* @param {Array} b - End vector
|
|
107
|
+
* @param {number} t - Interpolation factor (0-1)
|
|
108
|
+
* @returns {Array} Interpolated vector
|
|
109
|
+
*/
|
|
110
|
+
lerp: function lerp(a, b, t) {
|
|
111
|
+
return a.map(function (val, i) {
|
|
112
|
+
return val + t * ((b[i] || 0) - val);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
/**
|
|
117
|
+
* Matrix operations
|
|
118
|
+
*/
|
|
119
|
+
_rollupPluginBabelHelpers.defineProperty(this, "matrix", {
|
|
120
|
+
/**
|
|
121
|
+
* Create identity matrix
|
|
122
|
+
* @param {number} size - Matrix size (n x n)
|
|
123
|
+
* @returns {Array} Identity matrix
|
|
124
|
+
*/
|
|
125
|
+
identity: function identity(size) {
|
|
126
|
+
var matrix = Array(size).fill().map(function () {
|
|
127
|
+
return Array(size).fill(0);
|
|
128
|
+
});
|
|
129
|
+
for (var i = 0; i < size; i++) {
|
|
130
|
+
matrix[i][i] = 1;
|
|
131
|
+
}
|
|
132
|
+
return matrix;
|
|
133
|
+
},
|
|
134
|
+
/**
|
|
135
|
+
* Multiply two matrices
|
|
136
|
+
* @param {Array} a - First matrix
|
|
137
|
+
* @param {Array} b - Second matrix
|
|
138
|
+
* @returns {Array} Result matrix
|
|
139
|
+
*/
|
|
140
|
+
multiply: function multiply(a, b) {
|
|
141
|
+
var rows = a.length;
|
|
142
|
+
var cols = b[0].length;
|
|
143
|
+
var result = Array(rows).fill().map(function () {
|
|
144
|
+
return Array(cols).fill(0);
|
|
145
|
+
});
|
|
146
|
+
for (var i = 0; i < rows; i++) {
|
|
147
|
+
for (var j = 0; j < cols; j++) {
|
|
148
|
+
for (var k = 0; k < a[0].length; k++) {
|
|
149
|
+
result[i][j] += a[i][k] * b[k][j];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
},
|
|
155
|
+
/**
|
|
156
|
+
* Matrix-vector multiplication
|
|
157
|
+
* @param {Array} matrix - Input matrix
|
|
158
|
+
* @param {Array} vector - Input vector
|
|
159
|
+
* @returns {Array} Result vector
|
|
160
|
+
*/
|
|
161
|
+
multiplyVector: function multiplyVector(matrix, vector) {
|
|
162
|
+
return matrix.map(function (row) {
|
|
163
|
+
return row.reduce(function (sum, val, i) {
|
|
164
|
+
return sum + val * (vector[i] || 0);
|
|
165
|
+
}, 0);
|
|
166
|
+
});
|
|
167
|
+
},
|
|
168
|
+
/**
|
|
169
|
+
* Calculate matrix determinant (2x2 and 3x3)
|
|
170
|
+
* @param {Array} matrix - Input matrix
|
|
171
|
+
* @returns {number} Determinant
|
|
172
|
+
*/
|
|
173
|
+
determinant: function determinant(matrix) {
|
|
174
|
+
var size = matrix.length;
|
|
175
|
+
if (size === 2) {
|
|
176
|
+
return matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
|
|
177
|
+
} else if (size === 3) {
|
|
178
|
+
return matrix[0][0] * (matrix[1][1] * matrix[2][2] - matrix[1][2] * matrix[2][1]) - matrix[0][1] * (matrix[1][0] * matrix[2][2] - matrix[1][2] * matrix[2][0]) + matrix[0][2] * (matrix[1][0] * matrix[2][1] - matrix[1][1] * matrix[2][0]);
|
|
179
|
+
}
|
|
180
|
+
throw new Error('Determinant calculation only supported for 2x2 and 3x3 matrices');
|
|
181
|
+
},
|
|
182
|
+
/**
|
|
183
|
+
* Matrix transpose
|
|
184
|
+
* @param {Array} matrix - Input matrix
|
|
185
|
+
* @returns {Array} Transposed matrix
|
|
186
|
+
*/
|
|
187
|
+
transpose: function transpose(matrix) {
|
|
188
|
+
return matrix[0].map(function (_, i) {
|
|
189
|
+
return matrix.map(function (row) {
|
|
190
|
+
return row[i];
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
/**
|
|
196
|
+
* Numerical analysis functions
|
|
197
|
+
*/
|
|
198
|
+
_rollupPluginBabelHelpers.defineProperty(this, "analysis", {
|
|
199
|
+
/**
|
|
200
|
+
* Newton-Raphson method for root finding
|
|
201
|
+
* @param {Function} f - Function
|
|
202
|
+
* @param {Function} df - Derivative of function
|
|
203
|
+
* @param {number} x0 - Initial guess
|
|
204
|
+
* @returns {Object} Result with root and convergence info
|
|
205
|
+
*/
|
|
206
|
+
newtonRaphson: function newtonRaphson(f, df, x0) {
|
|
207
|
+
var x = x0;
|
|
208
|
+
var iterations = 0;
|
|
209
|
+
while (iterations < _this.maxIterations) {
|
|
210
|
+
var fx = f(x);
|
|
211
|
+
var dfx = df(x);
|
|
212
|
+
if (Math.abs(dfx) < _this.precision) {
|
|
213
|
+
throw new Error('Derivative too small, cannot continue');
|
|
214
|
+
}
|
|
215
|
+
var newX = x - fx / dfx;
|
|
216
|
+
if (Math.abs(newX - x) < _this.convergenceThreshold) {
|
|
217
|
+
return {
|
|
218
|
+
root: newX,
|
|
219
|
+
iterations: iterations + 1,
|
|
220
|
+
converged: true,
|
|
221
|
+
error: Math.abs(f(newX))
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
x = newX;
|
|
225
|
+
iterations++;
|
|
226
|
+
}
|
|
227
|
+
return {
|
|
228
|
+
root: x,
|
|
229
|
+
iterations: iterations,
|
|
230
|
+
converged: false,
|
|
231
|
+
error: Math.abs(f(x))
|
|
232
|
+
};
|
|
233
|
+
},
|
|
234
|
+
/**
|
|
235
|
+
* Bisection method for root finding
|
|
236
|
+
* @param {Function} f - Function
|
|
237
|
+
* @param {number} a - Left bound
|
|
238
|
+
* @param {number} b - Right bound
|
|
239
|
+
* @returns {Object} Result with root and convergence info
|
|
240
|
+
*/
|
|
241
|
+
bisection: function bisection(f, a, b) {
|
|
242
|
+
if (f(a) * f(b) >= 0) {
|
|
243
|
+
throw new Error('Function must have opposite signs at bounds');
|
|
244
|
+
}
|
|
245
|
+
var left = a;
|
|
246
|
+
var right = b;
|
|
247
|
+
var iterations = 0;
|
|
248
|
+
while (iterations < _this.maxIterations) {
|
|
249
|
+
var mid = (left + right) / 2;
|
|
250
|
+
var fMid = f(mid);
|
|
251
|
+
if (Math.abs(fMid) < _this.convergenceThreshold || Math.abs(right - left) < _this.convergenceThreshold) {
|
|
252
|
+
return {
|
|
253
|
+
root: mid,
|
|
254
|
+
iterations: iterations + 1,
|
|
255
|
+
converged: true,
|
|
256
|
+
error: Math.abs(fMid)
|
|
257
|
+
};
|
|
258
|
+
}
|
|
259
|
+
if (f(left) * fMid < 0) {
|
|
260
|
+
right = mid;
|
|
261
|
+
} else {
|
|
262
|
+
left = mid;
|
|
263
|
+
}
|
|
264
|
+
iterations++;
|
|
265
|
+
}
|
|
266
|
+
return {
|
|
267
|
+
root: (left + right) / 2,
|
|
268
|
+
iterations: iterations,
|
|
269
|
+
converged: false,
|
|
270
|
+
error: Math.abs(f((left + right) / 2))
|
|
271
|
+
};
|
|
272
|
+
},
|
|
273
|
+
/**
|
|
274
|
+
* Numerical integration using Simpson's rule
|
|
275
|
+
* @param {Function} f - Function to integrate
|
|
276
|
+
* @param {number} a - Lower bound
|
|
277
|
+
* @param {number} b - Upper bound
|
|
278
|
+
* @param {number} n - Number of intervals (must be even)
|
|
279
|
+
* @returns {number} Integral approximation
|
|
280
|
+
*/
|
|
281
|
+
simpson: function simpson(f, a, b) {
|
|
282
|
+
var n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 100;
|
|
283
|
+
if (n % 2 !== 0) n++; // Ensure even number of intervals
|
|
284
|
+
|
|
285
|
+
var h = (b - a) / n;
|
|
286
|
+
var sum = f(a) + f(b);
|
|
287
|
+
for (var i = 1; i < n; i++) {
|
|
288
|
+
var x = a + i * h;
|
|
289
|
+
var coefficient = i % 2 === 0 ? 2 : 4;
|
|
290
|
+
sum += coefficient * f(x);
|
|
291
|
+
}
|
|
292
|
+
return h / 3 * sum;
|
|
293
|
+
},
|
|
294
|
+
/**
|
|
295
|
+
* Numerical differentiation
|
|
296
|
+
* @param {Function} f - Function to differentiate
|
|
297
|
+
* @param {number} x - Point of differentiation
|
|
298
|
+
* @param {number} h - Step size
|
|
299
|
+
* @returns {number} Derivative approximation
|
|
300
|
+
*/
|
|
301
|
+
derivative: function derivative(f, x) {
|
|
302
|
+
var h = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1e-8;
|
|
303
|
+
return (f(x + h) - f(x - h)) / (2 * h);
|
|
304
|
+
}
|
|
305
|
+
});
|
|
306
|
+
/**
|
|
307
|
+
* Statistical functions
|
|
308
|
+
*/
|
|
309
|
+
_rollupPluginBabelHelpers.defineProperty(this, "stats", {
|
|
310
|
+
/**
|
|
311
|
+
* Calculate mean
|
|
312
|
+
* @param {Array} data - Input data
|
|
313
|
+
* @returns {number} Mean value
|
|
314
|
+
*/
|
|
315
|
+
mean: function mean(data) {
|
|
316
|
+
return data.reduce(function (sum, val) {
|
|
317
|
+
return sum + val;
|
|
318
|
+
}, 0) / data.length;
|
|
319
|
+
},
|
|
320
|
+
/**
|
|
321
|
+
* Calculate median
|
|
322
|
+
* @param {Array} data - Input data
|
|
323
|
+
* @returns {number} Median value
|
|
324
|
+
*/
|
|
325
|
+
median: function median(data) {
|
|
326
|
+
var sorted = _rollupPluginBabelHelpers.toConsumableArray(data).sort(function (a, b) {
|
|
327
|
+
return a - b;
|
|
328
|
+
});
|
|
329
|
+
var mid = Math.floor(sorted.length / 2);
|
|
330
|
+
return sorted.length % 2 === 0 ? (sorted[mid - 1] + sorted[mid]) / 2 : sorted[mid];
|
|
331
|
+
},
|
|
332
|
+
/**
|
|
333
|
+
* Calculate standard deviation
|
|
334
|
+
* @param {Array} data - Input data
|
|
335
|
+
* @returns {number} Standard deviation
|
|
336
|
+
*/
|
|
337
|
+
stdDev: function stdDev(data) {
|
|
338
|
+
var mean = _this.stats.mean(data);
|
|
339
|
+
var variance = data.reduce(function (sum, val) {
|
|
340
|
+
return sum + Math.pow(val - mean, 2);
|
|
341
|
+
}, 0) / data.length;
|
|
342
|
+
return Math.sqrt(variance);
|
|
343
|
+
},
|
|
344
|
+
/**
|
|
345
|
+
* Calculate correlation coefficient
|
|
346
|
+
* @param {Array} x - First dataset
|
|
347
|
+
* @param {Array} y - Second dataset
|
|
348
|
+
* @returns {number} Correlation coefficient
|
|
349
|
+
*/
|
|
350
|
+
correlation: function correlation(x, y) {
|
|
351
|
+
var n = Math.min(x.length, y.length);
|
|
352
|
+
var meanX = _this.stats.mean(x.slice(0, n));
|
|
353
|
+
var meanY = _this.stats.mean(y.slice(0, n));
|
|
354
|
+
var numerator = 0;
|
|
355
|
+
var sumXSq = 0;
|
|
356
|
+
var sumYSq = 0;
|
|
357
|
+
for (var i = 0; i < n; i++) {
|
|
358
|
+
var diffX = x[i] - meanX;
|
|
359
|
+
var diffY = y[i] - meanY;
|
|
360
|
+
numerator += diffX * diffY;
|
|
361
|
+
sumXSq += diffX * diffX;
|
|
362
|
+
sumYSq += diffY * diffY;
|
|
363
|
+
}
|
|
364
|
+
var denominator = Math.sqrt(sumXSq * sumYSq);
|
|
365
|
+
return denominator !== 0 ? numerator / denominator : 0;
|
|
366
|
+
},
|
|
367
|
+
/**
|
|
368
|
+
* Linear regression
|
|
369
|
+
* @param {Array} x - Independent variable
|
|
370
|
+
* @param {Array} y - Dependent variable
|
|
371
|
+
* @returns {Object} Regression parameters
|
|
372
|
+
*/
|
|
373
|
+
linearRegression: function linearRegression(x, y) {
|
|
374
|
+
var n = Math.min(x.length, y.length);
|
|
375
|
+
var meanX = _this.stats.mean(x.slice(0, n));
|
|
376
|
+
var meanY = _this.stats.mean(y.slice(0, n));
|
|
377
|
+
var numerator = 0;
|
|
378
|
+
var denominator = 0;
|
|
379
|
+
for (var i = 0; i < n; i++) {
|
|
380
|
+
var diffX = x[i] - meanX;
|
|
381
|
+
numerator += diffX * (y[i] - meanY);
|
|
382
|
+
denominator += diffX * diffX;
|
|
383
|
+
}
|
|
384
|
+
var slope = denominator !== 0 ? numerator / denominator : 0;
|
|
385
|
+
var intercept = meanY - slope * meanX;
|
|
386
|
+
|
|
387
|
+
// Calculate R-squared
|
|
388
|
+
var ssRes = 0;
|
|
389
|
+
var ssTot = 0;
|
|
390
|
+
for (var _i = 0; _i < n; _i++) {
|
|
391
|
+
var predicted = slope * x[_i] + intercept;
|
|
392
|
+
ssRes += Math.pow(y[_i] - predicted, 2);
|
|
393
|
+
ssTot += Math.pow(y[_i] - meanY, 2);
|
|
394
|
+
}
|
|
395
|
+
var rSquared = ssTot !== 0 ? 1 - ssRes / ssTot : 0;
|
|
396
|
+
return {
|
|
397
|
+
slope: slope,
|
|
398
|
+
intercept: intercept,
|
|
399
|
+
rSquared: rSquared,
|
|
400
|
+
predict: function predict(xVal) {
|
|
401
|
+
return slope * xVal + intercept;
|
|
402
|
+
}
|
|
403
|
+
};
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
/**
|
|
407
|
+
* Utility functions
|
|
408
|
+
*/
|
|
409
|
+
_rollupPluginBabelHelpers.defineProperty(this, "utils", {
|
|
410
|
+
/**
|
|
411
|
+
* Clamp value between min and max
|
|
412
|
+
* @param {number} value - Input value
|
|
413
|
+
* @param {number} min - Minimum value
|
|
414
|
+
* @param {number} max - Maximum value
|
|
415
|
+
* @returns {number} Clamped value
|
|
416
|
+
*/
|
|
417
|
+
clamp: function clamp(value, min, max) {
|
|
418
|
+
return Math.max(min, Math.min(max, value));
|
|
419
|
+
},
|
|
420
|
+
/**
|
|
421
|
+
* Map value from one range to another
|
|
422
|
+
* @param {number} value - Input value
|
|
423
|
+
* @param {number} inMin - Input range minimum
|
|
424
|
+
* @param {number} inMax - Input range maximum
|
|
425
|
+
* @param {number} outMin - Output range minimum
|
|
426
|
+
* @param {number} outMax - Output range maximum
|
|
427
|
+
* @returns {number} Mapped value
|
|
428
|
+
*/
|
|
429
|
+
map: function map(value, inMin, inMax, outMin, outMax) {
|
|
430
|
+
return outMin + (value - inMin) * (outMax - outMin) / (inMax - inMin);
|
|
431
|
+
},
|
|
432
|
+
/**
|
|
433
|
+
* Check if two numbers are approximately equal
|
|
434
|
+
* @param {number} a - First number
|
|
435
|
+
* @param {number} b - Second number
|
|
436
|
+
* @param {number} epsilon - Tolerance
|
|
437
|
+
* @returns {boolean} Whether numbers are approximately equal
|
|
438
|
+
*/
|
|
439
|
+
approxEqual: function approxEqual(a, b) {
|
|
440
|
+
var epsilon = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _this.precision;
|
|
441
|
+
return Math.abs(a - b) < epsilon;
|
|
442
|
+
},
|
|
443
|
+
/**
|
|
444
|
+
* Round to specified decimal places
|
|
445
|
+
* @param {number} value - Input value
|
|
446
|
+
* @param {number} decimals - Number of decimal places
|
|
447
|
+
* @returns {number} Rounded value
|
|
448
|
+
*/
|
|
449
|
+
round: function round(value) {
|
|
450
|
+
var decimals = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
451
|
+
var factor = Math.pow(10, decimals);
|
|
452
|
+
return Math.round(value * factor) / factor;
|
|
453
|
+
},
|
|
454
|
+
/**
|
|
455
|
+
* Generate array of numbers
|
|
456
|
+
* @param {number} start - Start value
|
|
457
|
+
* @param {number} end - End value
|
|
458
|
+
* @param {number} step - Step size
|
|
459
|
+
* @returns {Array} Array of numbers
|
|
460
|
+
*/
|
|
461
|
+
range: function range(start, end) {
|
|
462
|
+
var step = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;
|
|
463
|
+
var result = [];
|
|
464
|
+
for (var i = start; i <= end; i += step) {
|
|
465
|
+
result.push(i);
|
|
466
|
+
}
|
|
467
|
+
return result;
|
|
468
|
+
},
|
|
469
|
+
/**
|
|
470
|
+
* Generate linearly spaced array
|
|
471
|
+
* @param {number} start - Start value
|
|
472
|
+
* @param {number} end - End value
|
|
473
|
+
* @param {number} count - Number of points
|
|
474
|
+
* @returns {Array} Linearly spaced array
|
|
475
|
+
*/
|
|
476
|
+
linspace: function linspace(start, end, count) {
|
|
477
|
+
var step = (end - start) / (count - 1);
|
|
478
|
+
return Array.from({
|
|
479
|
+
length: count
|
|
480
|
+
}, function (_, i) {
|
|
481
|
+
return start + i * step;
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
this.precision = 1e-10;
|
|
486
|
+
this.maxIterations = 1000;
|
|
487
|
+
this.convergenceThreshold = 1e-6;
|
|
488
|
+
}
|
|
489
|
+
return _rollupPluginBabelHelpers.createClass(Numerics, [{
|
|
490
|
+
key: "setPrecision",
|
|
491
|
+
value:
|
|
492
|
+
/**
|
|
493
|
+
* Set numerical precision
|
|
494
|
+
* @param {number} precision - New precision value
|
|
495
|
+
*/
|
|
496
|
+
function setPrecision(precision) {
|
|
497
|
+
this.precision = precision;
|
|
498
|
+
}
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* Set maximum iterations for iterative methods
|
|
502
|
+
* @param {number} maxIterations - Maximum iterations
|
|
503
|
+
*/
|
|
504
|
+
}, {
|
|
505
|
+
key: "setMaxIterations",
|
|
506
|
+
value: function setMaxIterations(maxIterations) {
|
|
507
|
+
this.maxIterations = maxIterations;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Set convergence threshold
|
|
512
|
+
* @param {number} threshold - Convergence threshold
|
|
513
|
+
*/
|
|
514
|
+
}, {
|
|
515
|
+
key: "setConvergenceThreshold",
|
|
516
|
+
value: function setConvergenceThreshold(threshold) {
|
|
517
|
+
this.convergenceThreshold = threshold;
|
|
518
|
+
}
|
|
519
|
+
}]);
|
|
520
|
+
}();
|
|
521
|
+
|
|
522
|
+
exports.Numerics = Numerics;
|