2026-03-29 17:36:46 +02:00

87 lines
2.6 KiB
TypeScript

import { getOrbit, getOrbitFromEccentricity, type Orbit } from "../calculations/orbit-calculations";
export interface OrbitalParameters {
periapsis: number;
eccentricChoice: "apoapsis" | "eccentricity";
apoapsis: number;
eccentricity: number;
inclination: number;
longitudeOfAscendingNode: number;
argumentOfPeriapsis: number;
}
export const DefaultOrbitalParameters: OrbitalParameters = {
periapsis: 100000,
eccentricChoice: "apoapsis",
apoapsis: 100000,
eccentricity: 0,
inclination: 0,
longitudeOfAscendingNode: 0,
argumentOfPeriapsis: 0
}
export function encodeOrbitalParameters(orbitalParameters: OrbitalParameters): string {
return JSON.stringify(orbitalParameters);
}
export function decodeOrbitalParameters(jsonString: string): OrbitalParameters {
let parsedObject = JSON.parse(jsonString);
var orbitalParameters: OrbitalParameters;
if (parsedObject as OrbitalParameters === undefined) {
orbitalParameters = DefaultOrbitalParameters;
} else {
orbitalParameters = parsedObject;
}
return orbitalParameters;
}
export function createLabel(forId: string, labelText: string): HTMLLabelElement {
let label = document.createElement("label");
label.setAttribute("for", forId);
label.appendChild(document.createTextNode(labelText));
return label;
}
export function createNumberInput(id: string, minimum: number, maximum?: number, size?: number): HTMLInputElement {
let numberInput = document.createElement("input");
numberInput.setAttribute("id", id);
numberInput.setAttribute("type", "number");
numberInput.setAttribute("min", minimum.toFixed(0));
if (maximum !== undefined) {
numberInput.setAttribute("max", maximum.toFixed(0));
}
if (size !== undefined) {
numberInput.setAttribute("size", size.toFixed(0));
}
return numberInput;
}
export function createDisabledInput(id: string) {
let input = document.createElement("input");
input.setAttribute("id", id);
input.setAttribute("disabled", "");
return input;
}
export function getOrbitFromParameters(orbitalParameters: OrbitalParameters, planetRadius: number): Orbit {
if (orbitalParameters.eccentricChoice == "apoapsis") {
return getOrbit(
orbitalParameters.periapsis + planetRadius,
orbitalParameters.apoapsis + planetRadius,
orbitalParameters.inclination,
orbitalParameters.longitudeOfAscendingNode,
orbitalParameters.argumentOfPeriapsis
)
} else {
return getOrbitFromEccentricity(
orbitalParameters.periapsis + planetRadius,
orbitalParameters.eccentricity,
orbitalParameters.inclination,
orbitalParameters.longitudeOfAscendingNode,
orbitalParameters.argumentOfPeriapsis
);
}
}