Spaces:
Running
Running
Download js/orbitPath.js from Suyashhh19/Fusion-hackathon: direct link, hf CLI and curl.
- Browser
- Download file 1.38 kB
-
https://huggingface.co/spaces/Suyashhh19/Fusion-hackathon/resolve/main/js/orbitPath.js
- Command line
-
hf download hf://spaces/Suyashhh19/Fusion-hackathon/js/orbitPath.js
-
curl -L -o orbitPath.js https://huggingface.co/spaces/Suyashhh19/Fusion-hackathon/resolve/main/js/orbitPath.js
1.38 kB
| // A one-period orbit path for a satrec, rebuilt as simulation time moves on. | |
| import * as THREE from 'three'; | |
| import { periodMinutes, toScene } from './orbit.js'; | |
| const sat = window.satellite; | |
| const STEPS = 240; | |
| export function createOrbitPath(color = 0xffffff, opacity = 0.75) { | |
| const line = new THREE.Line(new THREE.BufferGeometry(), | |
| new THREE.LineBasicMaterial({ color, transparent: true, opacity })); | |
| line.visible = false; | |
| let rec = null; | |
| let center = 0; | |
| // Path over one period centred on timeMs (inertial frame). | |
| function build(timeMs) { | |
| const T = periodMinutes(rec) * 60000, pts = []; | |
| center = timeMs; | |
| for (let k = 0; k <= STEPS; k++) { | |
| const pv = sat.propagate(rec, new Date(timeMs - T / 2 + (T * k) / STEPS)); | |
| if (pv?.position) pts.push(toScene(pv.position.x, pv.position.y, pv.position.z, new THREE.Vector3())); | |
| } | |
| line.geometry.dispose(); | |
| line.geometry = new THREE.BufferGeometry().setFromPoints(pts); | |
| } | |
| return { | |
| line, | |
| show(newRec, timeMs) { rec = newRec; line.visible = true; build(timeMs); }, | |
| hide() { rec = null; line.visible = false; }, | |
| // Rebuild once the simulation has moved a quarter period away from the path's centre. | |
| update(timeMs) { | |
| if (rec && Math.abs(timeMs - center) > periodMinutes(rec) * 15000) build(timeMs); | |
| }, | |
| }; | |
| } | |