Animatsiooni eksport
--animate muudab käivituse aegrea millekski liikuvaks: animeeritud Scalable Vector Graphics (SVG) fail, üks iseseisev HyperText Markup Language (HTML) esitaja või nummerdatud SVG kaadrite jada videokodeerijale. Kampaania esitatakse oma faasidena (segamine, spuufimine, holdover, terviklikkuse alarm) koos märgitud alarmidega; spektrikäivitus esitab oma juga-diagrammi rida realt; madala Maa orbiidi (LEO) ülelend esitab oma ribapõhise lingi ja, spuuferiga, monitori statistikud epohhi kaupa.
kshana scenarios/campaign-jam-spoof-holdover-integrity.toml --animate all
kshana scenarios/l-band-waterfall-jamming.toml --animate html
kshana scenarios/clock-holdover.toml --animate frames --animate-fps 24 --animate-duration 10
Kood: src/animation.rs. Testid: tests/animation.rs.
Mis see on ja mis see ei ole#
Eksportija loeb tulemusdokumenti, mille käivitus juba kirjutas. See ei käivita füüsikat uuesti, ei diskreetimist muuda, ei silu ega interpoleeri näidiste vahel (välja arvatud üks sirgjooneline lõik, mis lõpetab joone kursori juures) ning ei lisa ühtegi oma arvu. Animatsioon on seega täpselt sama hea kui selle taga olev käivitus. Selle tase on MODELLED, sisemine kooskõla: see on renderdus, mitte kunagi tõend, ja sellel pole oma kontrollimaatriksi rida.
Väljundid#
Iga vorming kirjutatakse stsenaariumi kõrvale, tavaliste result.json, chart.svg ja report.html kõrvale:
| Vorming | Kirjutatakse kui | Mida see sisaldab |
|---|---|---|
svg |
<scenario>.animation.svg |
Üks SVG, mida animeeritakse Cascading Style Sheets (CSS) võtmekaadritega ja ilma skriptita: jooned joonistuvad liikuva ajakursori taha, sündmused ilmuvad oma hetkel, juga-diagrammi read paljastuvad ajajärjekorras. See kordub, valmis pildi 1,5 s hoidmisega. |
html |
<scenario>.animation.html |
Üks fail sisseehitatud skripti ja stiiliga ning ilma välise varata: esitus ja paus, liugur, kiirus (0.25x kuni 4x), iga paneel ühel sünkroniseeritud kursoril, iga joone reaalajas väärtus, faasiriba ja sündmuste loend, mis klõpsamisel otsib. Tühik esitab või peatab, nooleklahvid sammuvad, Home ja End hüppavad. |
frames |
<scenario>.frames/ |
frame_0000.svg, frame_0001.svg, … ja manifest.json. |
--animate on korratav ja võtab komaga eraldatud loendi (--animate svg,html) või all. --animate-fps (1 kuni 60, vaikimisi 12) ja --animate-duration (0,5 s kuni 600 s, vaikimisi 8 s) määravad esituse; kaadrijada on piiratud 7 200 kaadriga.
Kui --export töötab samas käsus, loetleb HTML-esitaja selle kõrvale kirjutatud ekspordifailid (CZML, KML, GeoJSON, STK, SigMF) suhteliste linkidena nendele naaberfailidele; link kirjutatakse ainult paljale failinimele, nii et ükski ei saa kaustast lahkuda ega võrku jõuda. Täpsem aruanne (report.html) manustab animeeritud joonise alati, kui tulemusel on aegrida, olenemata sellest, kas --animate töötas.
Kui --animate töötab, saab result.json ploki animation: vormingud, kaadrid sekundis (fps), kestus, kaadrite arv, ajavahemik, paneelide pealkirjad, JSON-rajad, millest iga joon loeti (sources), ja mis tahes leitud, kuid joonistamata seeria (omitted). Ilma --animate on tulemus bait-baidilt identne tavalise käivitusega.
Kaadrijada#
Jadas on täpselt round(duration × fps) kaadrit. Kaader i näitab ajajoont kuni t_start + (t_end − t_start) × i / (n − 1), nii et esimene kaader on algus ja viimane on valmis pilt. manifest.json registreerib fps, duration_s, frame_count, frame_pattern (frame_%04d.svg), pikslisuuruse, t_start, t_end, iga kaadri missiooniaja (frame_times), faasid, sündmused ja allikad. Uuesti eksport samasse kataloogi eemaldab esmalt iga seal juba oleva frame_NNNN.svg (ja midagi muud), nii et lühem jada ei jäta pikema jada kaadreid kodeerijale loetavaks.
Kaadrid on SVG, mitte Portable Network Graphics (PNG). librsvg teegiga ehitatud ffmpeg loeb neid otse, kiirusel, millega jada kirjutati (24 ülaltoodud näites; manifesti fps):
ffmpeg -framerate 24 -i clock-holdover.frames/frame_%04d.svg -pix_fmt yuv420p clock-holdover.mp4
ffmpeg ilma librsvg peatub teatega „no decoder found for: svg“. Rasteriseeri kaadrid esmalt, näiteks käsuga rsvg-convert, ja kodeeri PNG-d:
for f in clock-holdover.frames/frame_*.svg; do rsvg-convert "$f" -o "${f%.svg}.png"; done
ffmpeg -framerate 24 -i clock-holdover.frames/frame_%04d.png -pix_fmt yuv420p clock-holdover.mp4
Ligipääsetavus ja teema#
- Värviskeem. Esitaja järgib
prefers-color-schemeja joonistab uuesti, kui see muutub; animeeritud SVG kannab oma paleti heledat varianti sama meediapäringu all. Kaadrid kasutavad staatiliste graafikute tumedat paletti, sest videol pole skeemi. - Vähendatud liikumine. Tingimusel
prefers-reduced-motion: reducelülitab animeeritud SVG iga animatsiooni välja ja näitab valmis pilti (selle baasstiilid on lõppolek, nii et midagi ei ole peidetud), ja esitaja avaneb peatatuna valmis pildil, mitte ei esita; kasutaja saab ikka lugeda või vajutada Play. - SVG-l on
<title>ja<desc>; esitaja juhtelemendid on sildistatud nupud, vahemikusisend kõneldava ajaväärtusega ja valik.
Mis loetakse aegreaks#
Tulemusdokumendid erinevad liigiti, seega tunneb eksportija ära kujud, mida mootor väljastab, mitte liikide loendi:
- Kirjete massiiv ajaväljaga (
t,t_s,t_hours,t_min,t_daysvõikmassiivilepochs), mis kasvab massiivi mööda rangelt. Iga muu arvuline väli muutub jooneks; sama väli kahe juure all (quantum.series[].error_nsjaclassical.series[].error_ns) jagab paneeli. - Objekt rangelt kasvava ajamassiiviga (
t_s,t,times_s, …) sama pikkusega massiivide kõrval: naabruses olevad arvmassiivid,channelskaart{unit, values}kirjetest (campaignajajoon), kirjete massiiv, mis hoiab selliseid massiive (spectrumribad, konstellatsiooni satelliidirajad), ning kahemõõtmeline massiiv, mille read vastavad ajatelje naabruses oleva*_hzsageduse teljega (spectrumjuga-diagramm). - Selle ajamassiivi kõrval muutuvad
phases(name,t0_s,t1_s) faasiribaks jaevents(t_s,label,alarm) markeriteks. Riba*_t_sskalaarid (selle esimene lukust väljumine, selle madalaim kandja ja müra tiheduse suhe) märgitakse samuti.
Ühikuga jooned jagavad paneeli, kui nende suurusjärgud on teguri 100 piires, nii et 50 ns kaitse ei lamedda 2 ns viga. Joonistatakse kuni 6 paneeli 6 joonega; ülejäänud on loetletud väljas omitted. Jooned üle 2 400 näidise hõrendatakse ühtlase sammuga, mis säilitab viimase näidise, ja juga-diagramm üle 96 × 120 lahtri keskmistatakse (võimsuses, detsibellilahtrite puhul, et kitsas segaja ei lahjeneks).
Liik, mille tulemus ei kanna ühtegi neist kujudest (link budget, ühe epohhi geomeetria, ainult statistikat andev Monte Carlo kokkuvõte või telekomi holdover, mille tulemus avaldab kirje räsi, aga mitte kirjet), lükatakse tagasi teatega no time series to animate ja midagi ei kirjutata. Kshana 0.40.0 puhul animeeritakse 94 193-st käivitatavast stsenaariumifailist (kõik failid peale uuringukomplekti) ja 99 lükatakse tagasi. cargo test --test animation -- --nocapture trükib loenduse.
LEO liikide seas animeerub iga kaasasolev leo-pass, leo-pnt-chain ja leo-ppp stsenaarium. leo-pvt animeerub oma Doppleri, ühispositsioneerimise ja ajastuse režiimides (ajastuskäivitus vajab trace = true, mis paneb iga rea teatama oma ajaviga ja ennustatud sigma igal epohhil) ning lükatakse tagasi oma polaarkatvuse režiimis. leo-navmsg animeerub oma keskülelennu uuenduse ning lükatakse tagasi kodeerimise, sobitusvahemiku ja mudelivõrdluse analüüside puhul. leo-signal ja ntn-positioning tulemused ei kanna ajatelge ja lükatakse tagasi.
Determinism#
Väljund on tulemusdokumendi ja valikute puhas funktsioon: ei kella, ei juhuarvu, ei räsitabeli itereerimist, ei faili- ega võrgupöördust teegis ja ühtegi ajatemplit kusagil, nii et sama stsenaarium, algväärtus (seed) ja valikud annavad bait-baidilt identsed failid. Moodul ehitub WebAssemblyks muutmata; faile kirjutab ainult käsurealiides.
Teegi kasutamine#
use kshana::animation::{AnimationFormat, AnimationOptions};
let anim = kshana::api::animate_toml(src, AnimationFormat::Html, &AnimationOptions::default())?;
std::fs::write("run.html", &anim.files[0].content)?;
kshana::animation::animate_result animeerib tulemusdokumendi, mis teil juba on, ja extract_timeline tagastab selle, mis joonistataks, seda renderdamata.
Piirangud#
- Pythoni wheel ja WebAssembly moodul ei eksponeeri eksportijat veel; see on kättesaadav käsurealt, Rusti teegist ja Model Context Protocol (MCP) serveri tööriistast
animate_scenario(mis tagastab ühes vastuses kuni 120 kaadrit). - Teljed on lineaarsed. Seeria, mis hõlmab palju dekaade (kella vea kasv 0,1 ns-st mikrosekundini), paistab lamedana kuni käivituse lõpuni.
- Animeeritud SVG tugineb lõikeristküliku CSS-animatsioonile; praegused Chromiumi, Firefoxi ja Safari mootorid esitavad seda, samas kui CSS-animatsioonita vaatur näitab valmis pilti.
- Pühkimise, Monte Carlo ja koostamise kampaaniad ei kanna ajatelge ja lükatakse tagasi; pühkimise või ansambli kokkuvõtlikud statistikud ei ole aegrida. Aheldatud kampaania animeerub.