@guinetik/gcanvas 1.0.0 → 1.0.2
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/demos/coordinates.html +698 -0
- package/demos/cube3d.html +23 -0
- package/demos/demos.css +17 -3
- package/demos/dino.html +42 -0
- package/demos/fluid-simple.html +22 -0
- package/demos/fluid.html +37 -0
- package/demos/gameobjects.html +626 -0
- package/demos/index.html +19 -7
- package/demos/js/blob.js +18 -5
- package/demos/js/coordinates.js +840 -0
- package/demos/js/cube3d.js +789 -0
- package/demos/js/dino.js +1420 -0
- package/demos/js/fluid-simple.js +253 -0
- package/demos/js/fluid.js +527 -0
- package/demos/js/gameobjects.js +176 -0
- package/demos/js/plane3d.js +256 -0
- package/demos/js/platformer.js +1579 -0
- package/demos/js/sphere3d.js +229 -0
- package/demos/js/sprite.js +473 -0
- package/demos/js/tde/accretiondisk.js +65 -12
- package/demos/js/tde/blackholescene.js +2 -2
- package/demos/js/tde/config.js +2 -2
- package/demos/js/tde/index.js +152 -27
- package/demos/js/tde/lensedstarfield.js +32 -25
- package/demos/js/tde/tdestar.js +78 -98
- package/demos/js/tde/tidalstream.js +24 -8
- package/demos/plane3d.html +24 -0
- package/demos/platformer.html +43 -0
- package/demos/sphere3d.html +24 -0
- package/demos/sprite.html +18 -0
- package/docs/README.md +230 -222
- package/docs/api/FluidSystem.md +173 -0
- package/docs/concepts/architecture-overview.md +204 -204
- package/docs/concepts/coordinate-system.md +384 -0
- package/docs/concepts/rendering-pipeline.md +279 -279
- package/docs/concepts/shapes-vs-gameobjects.md +187 -0
- package/docs/concepts/two-layer-architecture.md +229 -229
- package/docs/fluid-dynamics.md +99 -0
- package/docs/getting-started/first-game.md +354 -354
- package/docs/getting-started/installation.md +175 -157
- package/docs/modules/collision/README.md +2 -2
- package/docs/modules/fluent/README.md +6 -6
- package/docs/modules/game/README.md +303 -303
- package/docs/modules/isometric-camera.md +2 -2
- package/docs/modules/isometric.md +1 -1
- package/docs/modules/painter/README.md +328 -328
- package/docs/modules/particle/README.md +3 -3
- package/docs/modules/shapes/README.md +221 -221
- package/docs/modules/shapes/base/euclidian.md +123 -123
- package/docs/modules/shapes/base/shape.md +262 -262
- package/docs/modules/shapes/base/transformable.md +243 -243
- package/docs/modules/state/README.md +2 -2
- package/docs/modules/util/README.md +1 -1
- package/docs/modules/util/camera3d.md +3 -3
- package/docs/modules/util/scene3d.md +1 -1
- package/package.json +3 -1
- package/readme.md +19 -5
- package/src/collision/collision.js +75 -0
- package/src/game/game.js +11 -5
- package/src/game/index.js +2 -1
- package/src/game/objects/index.js +3 -0
- package/src/game/objects/platformer-scene.js +411 -0
- package/src/game/objects/scene.js +14 -0
- package/src/game/objects/sprite.js +529 -0
- package/src/game/pipeline.js +20 -16
- package/src/game/systems/FluidSystem.js +835 -0
- package/src/game/systems/index.js +11 -0
- package/src/game/ui/button.js +39 -18
- package/src/game/ui/cursor.js +14 -0
- package/src/game/ui/fps.js +12 -4
- package/src/game/ui/index.js +2 -0
- package/src/game/ui/stepper.js +549 -0
- package/src/game/ui/theme.js +123 -0
- package/src/game/ui/togglebutton.js +9 -3
- package/src/game/ui/tooltip.js +11 -4
- package/src/io/input.js +75 -45
- package/src/io/mouse.js +44 -19
- package/src/io/touch.js +35 -12
- package/src/math/fluid.js +507 -0
- package/src/math/index.js +2 -0
- package/src/mixins/anchor.js +17 -7
- package/src/motion/tweenetik.js +16 -0
- package/src/shapes/cube3d.js +599 -0
- package/src/shapes/index.js +3 -0
- package/src/shapes/plane3d.js +687 -0
- package/src/shapes/sphere3d.js +75 -6
- package/src/util/camera2d.js +315 -0
- package/src/util/camera3d.js +218 -12
- package/src/util/index.js +1 -0
- package/src/webgl/shaders/plane-shaders.js +332 -0
- package/src/webgl/shaders/sphere-shaders.js +4 -2
- package/types/fluent.d.ts +361 -0
- package/types/game.d.ts +303 -0
- package/types/index.d.ts +144 -5
- package/types/math.d.ts +361 -0
- package/types/motion.d.ts +271 -0
- package/types/particle.d.ts +373 -0
- package/types/shapes.d.ts +107 -9
- package/types/util.d.ts +353 -0
- package/types/webgl.d.ts +109 -0
- package/disk_example.png +0 -0
- package/tde.png +0 -0
package/types/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* GCanvas - TypeScript Definitions
|
|
3
3
|
* A minimalist 2D canvas rendering library with shapes, game engine, and animations.
|
|
4
4
|
*
|
|
5
|
-
* @version
|
|
5
|
+
* @version 1.0.1
|
|
6
6
|
* @see https://github.com/guinetik/gcanvas
|
|
7
7
|
* @license ISC
|
|
8
8
|
*/
|
|
@@ -100,6 +100,7 @@ export {
|
|
|
100
100
|
PatternRectangleOptions,
|
|
101
101
|
ImageShape,
|
|
102
102
|
ImageShapeOptions,
|
|
103
|
+
BitmapSource,
|
|
103
104
|
|
|
104
105
|
// 2.5D shapes
|
|
105
106
|
Cube,
|
|
@@ -108,6 +109,8 @@ export {
|
|
|
108
109
|
Cone,
|
|
109
110
|
Prism,
|
|
110
111
|
Sphere,
|
|
112
|
+
Sphere3D,
|
|
113
|
+
Sphere3DOptions,
|
|
111
114
|
|
|
112
115
|
// Text shapes
|
|
113
116
|
TextShape,
|
|
@@ -174,7 +177,22 @@ export {
|
|
|
174
177
|
ToggleButton,
|
|
175
178
|
Cursor,
|
|
176
179
|
CursorOptions,
|
|
177
|
-
FPSCounter
|
|
180
|
+
FPSCounter,
|
|
181
|
+
Tooltip,
|
|
182
|
+
TooltipOptions,
|
|
183
|
+
Stepper,
|
|
184
|
+
StepperOptions,
|
|
185
|
+
UI_THEME,
|
|
186
|
+
|
|
187
|
+
// 3D and Isometric scenes
|
|
188
|
+
Scene3D,
|
|
189
|
+
Scene3DOptions,
|
|
190
|
+
IsometricScene,
|
|
191
|
+
IsometricSceneOptions,
|
|
192
|
+
|
|
193
|
+
// Fluid simulation
|
|
194
|
+
FluidSystem,
|
|
195
|
+
FluidSystemOptions
|
|
178
196
|
} from './game';
|
|
179
197
|
|
|
180
198
|
// ==========================================================================
|
|
@@ -188,7 +206,25 @@ export {
|
|
|
188
206
|
TweenetikOptions,
|
|
189
207
|
Motion,
|
|
190
208
|
SpringParams,
|
|
191
|
-
PositionTarget
|
|
209
|
+
PositionTarget,
|
|
210
|
+
|
|
211
|
+
// Standalone motion functions (V1 API)
|
|
212
|
+
bezierV1,
|
|
213
|
+
bounceV1,
|
|
214
|
+
floatV1,
|
|
215
|
+
followPath,
|
|
216
|
+
orbitV1,
|
|
217
|
+
oscillateV1,
|
|
218
|
+
parabolicV1,
|
|
219
|
+
patrolV1,
|
|
220
|
+
pendulumV1,
|
|
221
|
+
pulseV1,
|
|
222
|
+
hopV1,
|
|
223
|
+
shakeV1,
|
|
224
|
+
spiralV1,
|
|
225
|
+
springV1,
|
|
226
|
+
swingV1,
|
|
227
|
+
waypointV1
|
|
192
228
|
} from './motion';
|
|
193
229
|
|
|
194
230
|
// ==========================================================================
|
|
@@ -201,7 +237,41 @@ export {
|
|
|
201
237
|
Fractals,
|
|
202
238
|
Patterns,
|
|
203
239
|
Noise,
|
|
204
|
-
generatePenroseTilingPixels
|
|
240
|
+
generatePenroseTilingPixels,
|
|
241
|
+
|
|
242
|
+
// Tensor for GR calculations
|
|
243
|
+
Tensor,
|
|
244
|
+
TensorOptions,
|
|
245
|
+
|
|
246
|
+
// Physics modules (General Relativity)
|
|
247
|
+
gravitationalLensingAngle,
|
|
248
|
+
timeDilationFactor,
|
|
249
|
+
gravitationalRedshift,
|
|
250
|
+
|
|
251
|
+
// Orbital Mechanics
|
|
252
|
+
OrbitalState,
|
|
253
|
+
OrbitalElements,
|
|
254
|
+
orbitalVelocity,
|
|
255
|
+
orbitalPeriod,
|
|
256
|
+
elementsToState,
|
|
257
|
+
propagateOrbit,
|
|
258
|
+
|
|
259
|
+
// Quantum Mechanics
|
|
260
|
+
gaussianWavePacket,
|
|
261
|
+
probabilityDensity,
|
|
262
|
+
particleInBox,
|
|
263
|
+
harmonicOscillator,
|
|
264
|
+
|
|
265
|
+
// Heat Transfer
|
|
266
|
+
heatTransfer,
|
|
267
|
+
buoyancyForce,
|
|
268
|
+
temperatureDecay,
|
|
269
|
+
|
|
270
|
+
// Fluid Dynamics
|
|
271
|
+
viscosityDrag,
|
|
272
|
+
surfaceTension,
|
|
273
|
+
reynoldsNumber,
|
|
274
|
+
pressureGradient
|
|
205
275
|
} from './math';
|
|
206
276
|
|
|
207
277
|
// ==========================================================================
|
|
@@ -226,7 +296,19 @@ export {
|
|
|
226
296
|
horizontalLayout,
|
|
227
297
|
verticalLayout,
|
|
228
298
|
tileLayout,
|
|
229
|
-
gridLayout
|
|
299
|
+
gridLayout,
|
|
300
|
+
|
|
301
|
+
// Camera3D
|
|
302
|
+
Camera3D,
|
|
303
|
+
Camera3DOptions,
|
|
304
|
+
ProjectedPoint,
|
|
305
|
+
MouseControlOptions,
|
|
306
|
+
FollowOptions,
|
|
307
|
+
MoveToOptions,
|
|
308
|
+
|
|
309
|
+
// IsometricCamera
|
|
310
|
+
IsometricCamera,
|
|
311
|
+
IsometricCameraOptions
|
|
230
312
|
} from './util';
|
|
231
313
|
|
|
232
314
|
// ==========================================================================
|
|
@@ -307,3 +389,60 @@ export {
|
|
|
307
389
|
PhaseConfig,
|
|
308
390
|
SequenceOptions
|
|
309
391
|
} from './state';
|
|
392
|
+
|
|
393
|
+
// ==========================================================================
|
|
394
|
+
// Fluent API Module
|
|
395
|
+
// ==========================================================================
|
|
396
|
+
|
|
397
|
+
export {
|
|
398
|
+
// Entry points
|
|
399
|
+
gcanvas,
|
|
400
|
+
sketch,
|
|
401
|
+
|
|
402
|
+
// Builder classes
|
|
403
|
+
FluentGame,
|
|
404
|
+
FluentGameOptions,
|
|
405
|
+
FluentScene,
|
|
406
|
+
FluentSceneOptions,
|
|
407
|
+
FluentGO,
|
|
408
|
+
FluentLayer,
|
|
409
|
+
|
|
410
|
+
// Sketch API
|
|
411
|
+
SketchAPI,
|
|
412
|
+
SketchContext,
|
|
413
|
+
|
|
414
|
+
// Context
|
|
415
|
+
FluentContext,
|
|
416
|
+
TransitionOptions
|
|
417
|
+
} from './fluent';
|
|
418
|
+
|
|
419
|
+
// ==========================================================================
|
|
420
|
+
// Particle System Module
|
|
421
|
+
// ==========================================================================
|
|
422
|
+
|
|
423
|
+
export {
|
|
424
|
+
// Core classes
|
|
425
|
+
Particle,
|
|
426
|
+
ParticleEmitter,
|
|
427
|
+
ParticleSystem,
|
|
428
|
+
|
|
429
|
+
// Types
|
|
430
|
+
ParticleColor,
|
|
431
|
+
ParticleShape,
|
|
432
|
+
ParticleEmitterOptions,
|
|
433
|
+
ParticleSystemOptions,
|
|
434
|
+
ParticleUpdater,
|
|
435
|
+
|
|
436
|
+
// Updaters namespace
|
|
437
|
+
Updaters
|
|
438
|
+
} from './particle';
|
|
439
|
+
|
|
440
|
+
// ==========================================================================
|
|
441
|
+
// WebGL Module (Optional)
|
|
442
|
+
// ==========================================================================
|
|
443
|
+
|
|
444
|
+
export {
|
|
445
|
+
WebGLRenderer,
|
|
446
|
+
WebGLRendererOptions,
|
|
447
|
+
SPHERE_SHADERS
|
|
448
|
+
} from './webgl';
|
package/types/math.d.ts
CHANGED
|
@@ -266,3 +266,364 @@ export function generatePenroseTilingPixels(
|
|
|
266
266
|
height?: number,
|
|
267
267
|
options?: PenroseTilingOptions
|
|
268
268
|
): Uint8ClampedArray;
|
|
269
|
+
|
|
270
|
+
// ==========================================================================
|
|
271
|
+
// Tensor (Rank-2 Tensor for General Relativity)
|
|
272
|
+
// ==========================================================================
|
|
273
|
+
|
|
274
|
+
/** Tensor creation options */
|
|
275
|
+
export interface TensorOptions {
|
|
276
|
+
/** Name of the tensor (e.g., 'Schwarzschild') */
|
|
277
|
+
name?: string;
|
|
278
|
+
/** Metric signature (e.g., [-1, 1, 1, 1]) */
|
|
279
|
+
signature?: number[];
|
|
280
|
+
/** Coordinate names (e.g., ['t', 'r', 'θ', 'φ']) */
|
|
281
|
+
coordinates?: string[];
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Rank-2 Tensor class for general relativity calculations.
|
|
286
|
+
* Provides immutable tensor operations following the Complex class pattern.
|
|
287
|
+
*
|
|
288
|
+
* @example
|
|
289
|
+
* const g = Tensor.schwarzschild(10, 2);
|
|
290
|
+
* console.log(g.get(0, 0)); // g_tt component
|
|
291
|
+
*/
|
|
292
|
+
export class Tensor {
|
|
293
|
+
/** Tensor dimension (n for n×n tensor) */
|
|
294
|
+
readonly dimension: number;
|
|
295
|
+
/** Tensor name */
|
|
296
|
+
readonly name: string;
|
|
297
|
+
/** Metric signature */
|
|
298
|
+
readonly signature: number[] | null;
|
|
299
|
+
/** Coordinate names */
|
|
300
|
+
readonly coordinates: string[] | null;
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* Create a new rank-2 tensor from a 2D array of components.
|
|
304
|
+
* @param components - 2D array of tensor components
|
|
305
|
+
* @param options - Optional metadata
|
|
306
|
+
*/
|
|
307
|
+
constructor(components: number[][], options?: TensorOptions);
|
|
308
|
+
|
|
309
|
+
// Static Factory Methods
|
|
310
|
+
/** Create a Minkowski (flat spacetime) metric tensor */
|
|
311
|
+
static minkowski(): Tensor;
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Create a Schwarzschild metric tensor at a given radial position.
|
|
315
|
+
* @param r - Radial coordinate (must be > rs)
|
|
316
|
+
* @param rs - Schwarzschild radius (2GM/c²)
|
|
317
|
+
* @param theta - Polar angle (default: equatorial plane)
|
|
318
|
+
*/
|
|
319
|
+
static schwarzschild(r: number, rs: number, theta?: number): Tensor;
|
|
320
|
+
|
|
321
|
+
/** Create contravariant Schwarzschild metric */
|
|
322
|
+
static schwarzschildContravariant(r: number, rs: number, theta?: number): Tensor;
|
|
323
|
+
|
|
324
|
+
/**
|
|
325
|
+
* Create a Kerr metric tensor (rotating black hole).
|
|
326
|
+
* @param r - Radial coordinate
|
|
327
|
+
* @param theta - Polar angle
|
|
328
|
+
* @param M - Mass parameter
|
|
329
|
+
* @param a - Spin parameter (0 ≤ a ≤ M)
|
|
330
|
+
*/
|
|
331
|
+
static kerr(r: number, theta: number, M: number, a: number): Tensor;
|
|
332
|
+
|
|
333
|
+
/** Create contravariant Kerr metric */
|
|
334
|
+
static kerrContravariant(r: number, theta: number, M: number, a: number): Tensor;
|
|
335
|
+
|
|
336
|
+
/** Calculate Kerr horizon radius */
|
|
337
|
+
static kerrHorizonRadius(M: number, a: number, inner?: boolean): number;
|
|
338
|
+
|
|
339
|
+
/** Calculate ergosphere radius */
|
|
340
|
+
static kerrErgosphereRadius(M: number, a: number, theta: number): number;
|
|
341
|
+
|
|
342
|
+
/** Calculate ISCO radius for Kerr metric */
|
|
343
|
+
static kerrISCO(M: number, a: number, prograde?: boolean): number;
|
|
344
|
+
|
|
345
|
+
/** Calculate frame-dragging angular velocity */
|
|
346
|
+
static kerrFrameDraggingOmega(r: number, theta: number, M: number, a: number): number;
|
|
347
|
+
|
|
348
|
+
/** Calculate Kerr effective potential */
|
|
349
|
+
static kerrEffectivePotential(M: number, a: number, E: number, L: number, r: number): number;
|
|
350
|
+
|
|
351
|
+
/** Create a diagonal tensor */
|
|
352
|
+
static diagonal(values: number[], options?: TensorOptions): Tensor;
|
|
353
|
+
|
|
354
|
+
/** Create an identity tensor */
|
|
355
|
+
static identity(n?: number): Tensor;
|
|
356
|
+
|
|
357
|
+
/** Create a zero tensor */
|
|
358
|
+
static zero(n?: number): Tensor;
|
|
359
|
+
|
|
360
|
+
// Component Access
|
|
361
|
+
/** Get a component at indices */
|
|
362
|
+
get(i: number, j: number): number;
|
|
363
|
+
|
|
364
|
+
/** Return new tensor with component changed */
|
|
365
|
+
set(i: number, j: number, value: number): Tensor;
|
|
366
|
+
|
|
367
|
+
/** Get diagonal components */
|
|
368
|
+
getDiagonal(): number[];
|
|
369
|
+
|
|
370
|
+
// Tensor Operations
|
|
371
|
+
/** Add another tensor */
|
|
372
|
+
add(other: Tensor): Tensor;
|
|
373
|
+
|
|
374
|
+
/** Subtract another tensor */
|
|
375
|
+
subtract(other: Tensor): Tensor;
|
|
376
|
+
|
|
377
|
+
/** Multiply by scalar */
|
|
378
|
+
scale(scalar: number): Tensor;
|
|
379
|
+
|
|
380
|
+
/** Matrix multiply with another tensor */
|
|
381
|
+
multiply(other: Tensor): Tensor;
|
|
382
|
+
|
|
383
|
+
/** Transpose tensor */
|
|
384
|
+
transpose(): Tensor;
|
|
385
|
+
|
|
386
|
+
/** Compute inverse */
|
|
387
|
+
inverse(): Tensor;
|
|
388
|
+
|
|
389
|
+
// Derived Quantities
|
|
390
|
+
/** Compute determinant */
|
|
391
|
+
determinant(): number;
|
|
392
|
+
|
|
393
|
+
/** Compute trace */
|
|
394
|
+
trace(): number;
|
|
395
|
+
|
|
396
|
+
/** Check if diagonal */
|
|
397
|
+
isDiagonal(tolerance?: number): boolean;
|
|
398
|
+
|
|
399
|
+
/** Check if symmetric */
|
|
400
|
+
isSymmetric(tolerance?: number): boolean;
|
|
401
|
+
|
|
402
|
+
// GR Utilities
|
|
403
|
+
/**
|
|
404
|
+
* Compute Christoffel symbols for a metric.
|
|
405
|
+
* @param metricFn - Function returning metric at position
|
|
406
|
+
* @param position - Position [t, r, θ, φ]
|
|
407
|
+
* @param delta - Step size for numerical differentiation
|
|
408
|
+
*/
|
|
409
|
+
static christoffel(
|
|
410
|
+
metricFn: (position: number[]) => Tensor,
|
|
411
|
+
position: number[],
|
|
412
|
+
delta?: number
|
|
413
|
+
): number[][][];
|
|
414
|
+
|
|
415
|
+
/** Analytical Christoffel symbols for Schwarzschild */
|
|
416
|
+
static schwarzschildChristoffel(r: number, rs: number, theta: number): number[][][];
|
|
417
|
+
|
|
418
|
+
/** Compute effective potential for Schwarzschild geodesics */
|
|
419
|
+
static effectivePotential(M: number, L: number, r: number): number;
|
|
420
|
+
|
|
421
|
+
/** ISCO radius for Schwarzschild */
|
|
422
|
+
static iscoRadius(rs: number): number;
|
|
423
|
+
|
|
424
|
+
/** Photon sphere radius */
|
|
425
|
+
static photonSphereRadius(rs: number): number;
|
|
426
|
+
|
|
427
|
+
// Display
|
|
428
|
+
/** Get flat array of components */
|
|
429
|
+
toArray(): number[];
|
|
430
|
+
|
|
431
|
+
/** Get 2D array copy */
|
|
432
|
+
toMatrix(): number[][];
|
|
433
|
+
|
|
434
|
+
/** String representation */
|
|
435
|
+
toString(precision?: number): string;
|
|
436
|
+
|
|
437
|
+
/** LaTeX representation */
|
|
438
|
+
toLatex(precision?: number): string;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// ==========================================================================
|
|
442
|
+
// General Relativity (gr.js)
|
|
443
|
+
// ==========================================================================
|
|
444
|
+
|
|
445
|
+
/**
|
|
446
|
+
* Calculate gravitational lensing deflection.
|
|
447
|
+
* @param b - Impact parameter
|
|
448
|
+
* @param M - Mass
|
|
449
|
+
* @returns Deflection angle in radians
|
|
450
|
+
*/
|
|
451
|
+
export function gravitationalLensingAngle(b: number, M: number): number;
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* Calculate time dilation factor.
|
|
455
|
+
* @param r - Radial coordinate
|
|
456
|
+
* @param rs - Schwarzschild radius
|
|
457
|
+
* @returns Time dilation factor (0-1)
|
|
458
|
+
*/
|
|
459
|
+
export function timeDilationFactor(r: number, rs: number): number;
|
|
460
|
+
|
|
461
|
+
/**
|
|
462
|
+
* Calculate gravitational redshift.
|
|
463
|
+
* @param r - Radial coordinate
|
|
464
|
+
* @param rs - Schwarzschild radius
|
|
465
|
+
* @returns Redshift z
|
|
466
|
+
*/
|
|
467
|
+
export function gravitationalRedshift(r: number, rs: number): number;
|
|
468
|
+
|
|
469
|
+
// ==========================================================================
|
|
470
|
+
// Orbital Mechanics (orbital.js)
|
|
471
|
+
// ==========================================================================
|
|
472
|
+
|
|
473
|
+
/** Orbital state vector */
|
|
474
|
+
export interface OrbitalState {
|
|
475
|
+
x: number;
|
|
476
|
+
y: number;
|
|
477
|
+
z: number;
|
|
478
|
+
vx: number;
|
|
479
|
+
vy: number;
|
|
480
|
+
vz: number;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/** Keplerian orbital elements */
|
|
484
|
+
export interface OrbitalElements {
|
|
485
|
+
a: number; // Semi-major axis
|
|
486
|
+
e: number; // Eccentricity
|
|
487
|
+
i: number; // Inclination
|
|
488
|
+
Omega: number; // Right ascension of ascending node
|
|
489
|
+
omega: number; // Argument of periapsis
|
|
490
|
+
nu: number; // True anomaly
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/**
|
|
494
|
+
* Calculate orbital velocity at radius.
|
|
495
|
+
* @param r - Orbital radius
|
|
496
|
+
* @param M - Central mass
|
|
497
|
+
* @returns Orbital velocity
|
|
498
|
+
*/
|
|
499
|
+
export function orbitalVelocity(r: number, M: number): number;
|
|
500
|
+
|
|
501
|
+
/**
|
|
502
|
+
* Calculate orbital period.
|
|
503
|
+
* @param a - Semi-major axis
|
|
504
|
+
* @param M - Central mass
|
|
505
|
+
* @returns Orbital period
|
|
506
|
+
*/
|
|
507
|
+
export function orbitalPeriod(a: number, M: number): number;
|
|
508
|
+
|
|
509
|
+
/**
|
|
510
|
+
* Convert Keplerian elements to state vector.
|
|
511
|
+
* @param elements - Orbital elements
|
|
512
|
+
* @param mu - Gravitational parameter
|
|
513
|
+
*/
|
|
514
|
+
export function elementsToState(elements: OrbitalElements, mu: number): OrbitalState;
|
|
515
|
+
|
|
516
|
+
/**
|
|
517
|
+
* Propagate orbit using Runge-Kutta.
|
|
518
|
+
* @param state - Current state
|
|
519
|
+
* @param dt - Time step
|
|
520
|
+
* @param mu - Gravitational parameter
|
|
521
|
+
*/
|
|
522
|
+
export function propagateOrbit(state: OrbitalState, dt: number, mu: number): OrbitalState;
|
|
523
|
+
|
|
524
|
+
// ==========================================================================
|
|
525
|
+
// Quantum Mechanics (quantum.js)
|
|
526
|
+
// ==========================================================================
|
|
527
|
+
|
|
528
|
+
/**
|
|
529
|
+
* Gaussian wave packet.
|
|
530
|
+
* @param x - Position
|
|
531
|
+
* @param x0 - Center position
|
|
532
|
+
* @param k0 - Central wavenumber
|
|
533
|
+
* @param sigma - Width parameter
|
|
534
|
+
* @param t - Time
|
|
535
|
+
* @returns Complex amplitude {re, im}
|
|
536
|
+
*/
|
|
537
|
+
export function gaussianWavePacket(
|
|
538
|
+
x: number,
|
|
539
|
+
x0: number,
|
|
540
|
+
k0: number,
|
|
541
|
+
sigma: number,
|
|
542
|
+
t: number
|
|
543
|
+
): { re: number; im: number };
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Probability density |Ψ|².
|
|
547
|
+
* @param psi - Wave function value {re, im}
|
|
548
|
+
*/
|
|
549
|
+
export function probabilityDensity(psi: { re: number; im: number }): number;
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* Particle in a box wave function.
|
|
553
|
+
* @param x - Position (0 to L)
|
|
554
|
+
* @param L - Box length
|
|
555
|
+
* @param n - Quantum number
|
|
556
|
+
*/
|
|
557
|
+
export function particleInBox(x: number, L: number, n: number): number;
|
|
558
|
+
|
|
559
|
+
/**
|
|
560
|
+
* Harmonic oscillator wave function.
|
|
561
|
+
* @param x - Position
|
|
562
|
+
* @param n - Energy level
|
|
563
|
+
* @param omega - Angular frequency
|
|
564
|
+
* @param m - Mass
|
|
565
|
+
*/
|
|
566
|
+
export function harmonicOscillator(x: number, n: number, omega: number, m: number): number;
|
|
567
|
+
|
|
568
|
+
// ==========================================================================
|
|
569
|
+
// Heat Transfer (heat.js)
|
|
570
|
+
// ==========================================================================
|
|
571
|
+
|
|
572
|
+
/**
|
|
573
|
+
* Calculate heat transfer between two objects.
|
|
574
|
+
* @param T1 - Temperature of object 1
|
|
575
|
+
* @param T2 - Temperature of object 2
|
|
576
|
+
* @param k - Thermal conductivity
|
|
577
|
+
* @param dt - Time step
|
|
578
|
+
*/
|
|
579
|
+
export function heatTransfer(T1: number, T2: number, k: number, dt: number): number;
|
|
580
|
+
|
|
581
|
+
/**
|
|
582
|
+
* Calculate buoyancy force.
|
|
583
|
+
* @param temperature - Object temperature
|
|
584
|
+
* @param ambientTemp - Ambient temperature
|
|
585
|
+
* @param coefficient - Buoyancy coefficient
|
|
586
|
+
*/
|
|
587
|
+
export function buoyancyForce(temperature: number, ambientTemp: number, coefficient: number): number;
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* Temperature decay toward ambient.
|
|
591
|
+
* @param temp - Current temperature
|
|
592
|
+
* @param ambientTemp - Ambient temperature
|
|
593
|
+
* @param rate - Decay rate
|
|
594
|
+
* @param dt - Time step
|
|
595
|
+
*/
|
|
596
|
+
export function temperatureDecay(temp: number, ambientTemp: number, rate: number, dt: number): number;
|
|
597
|
+
|
|
598
|
+
// ==========================================================================
|
|
599
|
+
// Fluid Dynamics (fluid.js)
|
|
600
|
+
// ==========================================================================
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* Calculate viscosity drag force.
|
|
604
|
+
* @param velocity - Velocity vector
|
|
605
|
+
* @param viscosity - Fluid viscosity
|
|
606
|
+
*/
|
|
607
|
+
export function viscosityDrag(velocity: { x: number; y: number }, viscosity: number): { x: number; y: number };
|
|
608
|
+
|
|
609
|
+
/**
|
|
610
|
+
* Calculate surface tension force.
|
|
611
|
+
* @param curvature - Surface curvature
|
|
612
|
+
* @param tension - Surface tension coefficient
|
|
613
|
+
*/
|
|
614
|
+
export function surfaceTension(curvature: number, tension: number): number;
|
|
615
|
+
|
|
616
|
+
/**
|
|
617
|
+
* Calculate Reynolds number.
|
|
618
|
+
* @param velocity - Flow velocity
|
|
619
|
+
* @param length - Characteristic length
|
|
620
|
+
* @param viscosity - Kinematic viscosity
|
|
621
|
+
*/
|
|
622
|
+
export function reynoldsNumber(velocity: number, length: number, viscosity: number): number;
|
|
623
|
+
|
|
624
|
+
/**
|
|
625
|
+
* Navier-Stokes pressure term.
|
|
626
|
+
* @param density - Fluid density
|
|
627
|
+
* @param pressure - Pressure
|
|
628
|
+
*/
|
|
629
|
+
export function pressureGradient(density: number, pressure: number): number;
|