87 lines
2.6 KiB
TypeScript
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
|
|
);
|
|
}
|
|
} |