keplerian-core
Version:
High-performance TypeScript library for orbital mechanics calculations, providing numerical integration, state propagation, and perturbation modeling for Keplerian orbits.
75 lines (74 loc) • 2.22 kB
TypeScript
export interface Vector2D {
x: number;
y: number;
}
export interface OrbitalState {
position: Vector2D;
velocity: Vector2D;
momentum?: Vector2D;
angularMomentum?: number;
rungeLenzVector?: Vector2D;
energy?: number;
eccentricity?: number;
}
export interface ThirdBodyPerturbationParams {
gravitationalParameter: number;
position: Vector2D;
mass: number;
}
export interface SimulationParams {
centralMass: number;
orbitingMass: number;
gravitationalConstant: number;
timeStep: number;
atmosphericDrag?: AtmosphericDragParams;
solarRadiationPressure?: SolarRadiationPressureParams;
j2Perturbation?: {
j2Coefficient: number;
radius: number;
};
thirdBodyPerturbation?: ThirdBodyPerturbationParams;
}
export interface InitialConditions {
position: Vector2D;
velocity: Vector2D;
}
export interface AtmosphericDragParams {
dragCoefficient: number;
crossSectionalArea: number;
atmosphericDensity?: number;
}
export interface SolarRadiationPressureParams {
reflectivityCoefficient: number;
area: number;
solarConstant: number;
}
export interface J2PerturbationParams {
j2Coefficient: number;
radius: number;
}
export interface SimulationParams {
centralMass: number;
orbitingMass: number;
gravitationalConstant: number;
timeStep: number;
totalTime: number;
integrator: IntegratorKey;
atmosphericDrag?: AtmosphericDragParams;
solarRadiationPressure?: SolarRadiationPressureParams;
j2Perturbation?: J2PerturbationParams;
thirdBodyPerturbation?: ThirdBodyPerturbationParams;
format?: 'json' | 'csv';
}
export type IntegratorKey = 'rk4' | 'euler' | 'leapfrog' | 'rk2' | 'velocity-verlet' | 'dormand-prince' | 'wisdom-holman';
export interface Preset {
params: Partial<SimulationParams>;
initial: InitialConditions;
}
export interface ThirdBodyPerturbationParams {
thirdBodyMass: number;
thirdBodyPosition: Vector2D;
gravitationalConstant: number;
}
export type PresetKey = 'circular' | 'elliptical' | 'hyperbolic' | 'parabolic' | 'retrograde' | 'collision';
export type ThemeKey = 'space' | 'nasa' | 'chalkboard' | 'high-contrast';