Compare commits
26 Commits
auto/re-sa
...
auto/re-ca
| Author | SHA1 | Date | |
|---|---|---|---|
| eac92c3e44 | |||
| 8b10c0451f | |||
| ae5f322c03 | |||
| 0cb81b6200 | |||
| f6974ff3f0 | |||
| 6ebbbeff65 | |||
| 4dbd4f6cef | |||
| fb1405b13f | |||
| 86fcfcc8b0 | |||
| 1efc3f567d | |||
| 6d0bdf0179 | |||
| 0221217968 | |||
| bf6825e278 | |||
| 14d5ed54d1 | |||
| d61baddaf0 | |||
| d1b50dc1e6 | |||
| 3b35c48fce | |||
| 4cdbbc2d48 | |||
| 27577538cb | |||
| 92d36ec10f | |||
| 9fd5dcd37d | |||
| 0cf9220d24 | |||
| 0776beb6f4 | |||
| 33dc12c948 | |||
| 41b59faf5f | |||
| 6d92e6c114 |
123
crates/sylpheed-formats/examples/better_home.rs
Normal file
123
crates/sylpheed-formats/examples/better_home.rs
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
//! Does a resource have a CLEANER home in its container than the one we picked?
|
||||||
|
//!
|
||||||
|
//! After the pad-scoring fix, only two resources on the disc still decode to an
|
||||||
|
//! index run with degenerate triangles — `e201_bdy_03_m` (2 containers) and
|
||||||
|
//! `_rou_f402_dead` (9). Degeneracy says the run does not fit the pool, so either
|
||||||
|
//! the vertex block is wrong or the candidate list never offered the right one.
|
||||||
|
//! This walks every candidate vertex-run start for the resource's declaration and
|
||||||
|
//! scores each `(start, pad)` the way the anchor now does — degenerate triangles
|
||||||
|
//! first, then winding, plus coverage — so the answer is one of:
|
||||||
|
//! * a strictly cleaner candidate exists (the selection is at fault),
|
||||||
|
//! * several are equally clean (genuinely ambiguous), or
|
||||||
|
//! * nothing is clean (the block is not in the candidate list at all).
|
||||||
|
//!
|
||||||
|
//! Usage: better_home <container.xpr> <resource-name>
|
||||||
|
use sylpheed_formats::mesh::{debug_resource_params, debug_vertex_run_starts, Xbg7Model};
|
||||||
|
|
||||||
|
fn be16(b: &[u8], at: usize) -> u32 {
|
||||||
|
((b[at] as u32) << 8) | b[at + 1] as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
let bytes = std::fs::read(&a[1]).expect("container");
|
||||||
|
let name = &a[2];
|
||||||
|
|
||||||
|
let Some((markers, stride)) = debug_resource_params(&bytes, name) else {
|
||||||
|
eprintln!("no such XBG7 resource: {name}");
|
||||||
|
std::process::exit(1);
|
||||||
|
};
|
||||||
|
let (vc, ic) = markers[0];
|
||||||
|
println!("{name}: {} marker(s), first = {vc} verts / {ic} indices, stride {stride}", markers.len());
|
||||||
|
|
||||||
|
// Where did the decoder put it?
|
||||||
|
let ours = Xbg7Model::stage_models(&bytes)
|
||||||
|
.into_iter()
|
||||||
|
.find(|m| m.name == *name)
|
||||||
|
.and_then(|m| m.meshes.first().and_then(|s| s.vbuf_offset));
|
||||||
|
println!("our anchor: {ours:?}");
|
||||||
|
|
||||||
|
let starts = debug_vertex_run_starts(&bytes, stride);
|
||||||
|
println!("{} candidate vertex-run starts for stride {stride}", starts.len());
|
||||||
|
|
||||||
|
// Score every (start, pad): degenerate triangles, winding against the stored
|
||||||
|
// normals, and whether the run covers the pool exactly.
|
||||||
|
let mut rows: Vec<(usize, f32, usize, usize, usize, bool)> = Vec::new(); // degen, wind, start, pad, max_idx, covered
|
||||||
|
for &vb in &starts {
|
||||||
|
for pad in 0..=3usize {
|
||||||
|
if vb < ic * 2 + pad {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let ib = vb - ic * 2 - pad;
|
||||||
|
if ib + ic * 2 > bytes.len() || vb + vc * stride > bytes.len() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let idx: Vec<u32> = (0..ic).map(|k| be16(&bytes, ib + k * 2)).collect();
|
||||||
|
let max_idx = *idx.iter().max().unwrap_or(&0) as usize;
|
||||||
|
if max_idx >= vc {
|
||||||
|
continue; // out of range — not a candidate at all
|
||||||
|
}
|
||||||
|
let pos: Vec<[f32; 3]> = (0..vc)
|
||||||
|
.map(|v| {
|
||||||
|
let at = vb + v * stride;
|
||||||
|
[
|
||||||
|
f32::from_be_bytes(bytes[at..at + 4].try_into().unwrap()),
|
||||||
|
f32::from_be_bytes(bytes[at + 4..at + 8].try_into().unwrap()),
|
||||||
|
f32::from_be_bytes(bytes[at + 8..at + 12].try_into().unwrap()),
|
||||||
|
]
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
if pos.iter().any(|p| p.iter().any(|c| !c.is_finite() || c.abs() > 1e6)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let mut degen = 0usize;
|
||||||
|
let (mut agree, mut counted) = (0usize, 0usize);
|
||||||
|
for t in idx.chunks_exact(3) {
|
||||||
|
let (x, y, z) = (t[0] as usize, t[1] as usize, t[2] as usize);
|
||||||
|
if x == y || y == z || x == z {
|
||||||
|
degen += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// Winding needs normals; use the geometric centroid normal as a
|
||||||
|
// stand-in so this stays declaration-agnostic: a consistent mesh
|
||||||
|
// has all faces pointing away from the centroid on a convex-ish
|
||||||
|
// hull. Weak, so degeneracy leads the sort.
|
||||||
|
let e1 = [pos[y][0] - pos[x][0], pos[y][1] - pos[x][1], pos[y][2] - pos[x][2]];
|
||||||
|
let e2 = [pos[z][0] - pos[x][0], pos[z][1] - pos[x][1], pos[z][2] - pos[x][2]];
|
||||||
|
let f = [
|
||||||
|
e1[1] * e2[2] - e1[2] * e2[1],
|
||||||
|
e1[2] * e2[0] - e1[0] * e2[2],
|
||||||
|
e1[0] * e2[1] - e1[1] * e2[0],
|
||||||
|
];
|
||||||
|
let cx: [f32; 3] = {
|
||||||
|
let mut c = [0.0f32; 3];
|
||||||
|
for p in &pos {
|
||||||
|
for k in 0..3 {
|
||||||
|
c[k] += p[k] / pos.len() as f32;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c
|
||||||
|
};
|
||||||
|
let out = [pos[x][0] - cx[0], pos[x][1] - cx[1], pos[x][2] - cx[2]];
|
||||||
|
counted += 1;
|
||||||
|
if f[0] * out[0] + f[1] * out[1] + f[2] * out[2] > 0.0 {
|
||||||
|
agree += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let w = if counted == 0 { 0.0 } else { agree as f32 / counted as f32 };
|
||||||
|
rows.push((degen, w.max(1.0 - w), vb, pad, max_idx, max_idx + 1 == vc));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rows.sort_by(|a, b| a.0.cmp(&b.0).then(b.1.total_cmp(&a.1)));
|
||||||
|
println!("\n{} in-range candidates; best 12 by (degenerate, winding):", rows.len());
|
||||||
|
for (d, w, vb, pad, mx, cov) in rows.iter().take(12) {
|
||||||
|
let mark = if Some(*vb) == ours { " <-- ours" } else { "" };
|
||||||
|
println!(
|
||||||
|
" vb 0x{vb:07X} pad {pad} degen {d:>4} wind {w:.3} max_idx {mx}/{} {}{mark}",
|
||||||
|
vc - 1,
|
||||||
|
if *cov { "covers" } else { "SHORT" }
|
||||||
|
);
|
||||||
|
}
|
||||||
|
let clean = rows.iter().filter(|r| r.0 == 0 && r.5).count();
|
||||||
|
println!("\n{clean} candidates are degenerate-free AND cover the pool exactly");
|
||||||
|
}
|
||||||
222
crates/sylpheed-formats/examples/capture_ib_truth.rs
Normal file
222
crates/sylpheed-formats/examples/capture_ib_truth.rs
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
//! Where does a drawn block's INDEX buffer really live?
|
||||||
|
//!
|
||||||
|
//! Our XBG7 anchor scan only ever *assumes* the layout `[index buffer][vertex
|
||||||
|
//! buffer]` with a pad of at most 3 bytes between them (`anchor_pool_mesh`:
|
||||||
|
//! `ib = vb - idx_count*2 - pad`). Nothing on disc states it, and it is the gate
|
||||||
|
//! that rejected the capture-proven `e106_eng_02_l` block
|
||||||
|
//! (docs/re/captures/…): the block's index data was not where the decoder
|
||||||
|
//! looked. The F10 ship capture was extended on 2026-08-13 to log each draw's
|
||||||
|
//! index-buffer base, count and min/max index value, so the assumption is now
|
||||||
|
//! directly checkable:
|
||||||
|
//!
|
||||||
|
//! * `vbase - ibase` is the real gap in guest memory, and a stage container is
|
||||||
|
//! uploaded contiguously (see `shared_vbase_check`), so the same difference
|
||||||
|
//! holds in the file;
|
||||||
|
//! * `max index vs vcount` says whether a draw covers its whole vertex pool —
|
||||||
|
//! the "buffer not covered" miss class is a *sub-range draw* if it does not.
|
||||||
|
//!
|
||||||
|
//! Usage:
|
||||||
|
//! cargo run --release --example capture_ib_truth -- <Stage_SNN.xpr> <capture.log>...
|
||||||
|
use sylpheed_formats::mesh::{debug_resource_params, xbg7_resource_names, Xbg7Model};
|
||||||
|
use sylpheed_formats::ship_capture::{parse_capture, CapturedDraw};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
fn q(v: f32) -> i64 {
|
||||||
|
(v as f64 * 1e4).round() as i64
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
if a.len() < 3 {
|
||||||
|
eprintln!("usage: capture_ib_truth <container.xpr> <capture.log>...");
|
||||||
|
std::process::exit(2);
|
||||||
|
}
|
||||||
|
let bytes = std::fs::read(&a[1]).expect("container");
|
||||||
|
|
||||||
|
// One entry per (log, vbase): the capture already de-dups per placement, and
|
||||||
|
// a buffer drawn at several transforms has the same index buffer each time.
|
||||||
|
let mut draws: Vec<CapturedDraw> = Vec::new();
|
||||||
|
let mut seen = std::collections::HashSet::new();
|
||||||
|
for log in &a[2..] {
|
||||||
|
let text = std::fs::read_to_string(log).expect("log");
|
||||||
|
for d in parse_capture(&text) {
|
||||||
|
// One entry per (log, vbase, index range): the engine issues SEVERAL
|
||||||
|
// draws over one vertex buffer, each with its own index sub-range, and
|
||||||
|
// it is their UNION that describes the block. (Captures taken before
|
||||||
|
// 2026-08-13 de-dup by (vbase, transform) and so hold only the first
|
||||||
|
// batch — such a log reads as a mysteriously short draw.)
|
||||||
|
let k = d.ib.map(|i| (i.ibase, i.icount)).unwrap_or((0, 0));
|
||||||
|
if d.ib.is_some() && d.pos.len() >= 4 && seen.insert((log.clone(), d.vbase, k)) {
|
||||||
|
draws.push(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
eprintln!("{} drawn buffers with an index buffer", draws.len());
|
||||||
|
|
||||||
|
// ── Place the drawn buffers in the file: POSITION is f32×3 big-endian at
|
||||||
|
// vertex offset 0, so the dumped positions are a literal byte pattern.
|
||||||
|
let be = |at: usize| f32::from_be_bytes(bytes[at..at + 4].try_into().unwrap());
|
||||||
|
let mut index: HashMap<(i64, i64, i64), Vec<u32>> = HashMap::new();
|
||||||
|
let mut o = 0usize;
|
||||||
|
while o + 12 <= bytes.len() {
|
||||||
|
let (x, y, z) = (be(o), be(o + 4), be(o + 8));
|
||||||
|
if x.is_finite() && y.is_finite() && z.is_finite() && x.abs() < 1e6 && y.abs() < 1e6 && z.abs() < 1e6 {
|
||||||
|
index.entry((q(x), q(y), q(z))).or_default().push(o as u32);
|
||||||
|
}
|
||||||
|
o += 4;
|
||||||
|
}
|
||||||
|
let mut deltas: HashMap<i64, usize> = HashMap::new();
|
||||||
|
let mut hits: Vec<(i64, usize, &CapturedDraw)> = Vec::new(); // (delta, file offset, draw)
|
||||||
|
for d in &draws {
|
||||||
|
let k = (q(d.pos[0][0]), q(d.pos[0][1]), q(d.pos[0][2]));
|
||||||
|
for dx in -1..=1i64 {
|
||||||
|
for dy in -1..=1i64 {
|
||||||
|
for dz in -1..=1i64 {
|
||||||
|
let Some(cands) = index.get(&(k.0 + dx, k.1 + dy, k.2 + dz)) else { continue };
|
||||||
|
for &off in cands {
|
||||||
|
for stride in (12..=64).step_by(4) {
|
||||||
|
let ok = (1..4).all(|j| {
|
||||||
|
let at = off as usize + j * stride;
|
||||||
|
at + 12 <= bytes.len()
|
||||||
|
&& (0..3).all(|c| (be(at + c * 4) - d.pos[j][c]).abs() <= 1e-4)
|
||||||
|
});
|
||||||
|
if ok {
|
||||||
|
let delta = d.vbase as i64 - off as i64;
|
||||||
|
*deltas.entry(delta).or_default() += 1;
|
||||||
|
hits.push((delta, off as usize, d));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let Some((&base_delta, &n)) = deltas.iter().max_by_key(|(_, n)| **n) else {
|
||||||
|
eprintln!("no draw could be placed in this container");
|
||||||
|
std::process::exit(1);
|
||||||
|
};
|
||||||
|
println!("container load constant: vbase - file_offset = 0x{base_delta:X} ({n} buffers agree)");
|
||||||
|
|
||||||
|
// ── Our decoder's view of the same container.
|
||||||
|
let models = Xbg7Model::stage_models(&bytes);
|
||||||
|
let mut by_off: HashMap<usize, Vec<(String, usize, usize)>> = HashMap::new();
|
||||||
|
for m in &models {
|
||||||
|
for sm in &m.meshes {
|
||||||
|
if let Some(off) = sm.vbuf_offset {
|
||||||
|
by_off
|
||||||
|
.entry(off)
|
||||||
|
.or_default()
|
||||||
|
.push((m.name.clone(), sm.positions.len(), sm.indices.len()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("decoded {} resources, {} distinct vertex offsets\n", models.len(), by_off.len());
|
||||||
|
|
||||||
|
// Declared-but-not-decoded resources, indexed by their first marker's
|
||||||
|
// (vertex, index) counts. A drawn buffer our decoder cannot name is the one
|
||||||
|
// thing a capture can give the residual misses: ground truth for where the
|
||||||
|
// block actually is. Matching on counts is enough to propose an identity —
|
||||||
|
// then `debug_try_anchor` at that offset says which gate rejects it.
|
||||||
|
let decoded_names: std::collections::HashSet<String> =
|
||||||
|
models.iter().map(|m| m.name.clone()).collect();
|
||||||
|
let mut undecoded_by_counts: HashMap<(usize, usize), Vec<String>> = HashMap::new();
|
||||||
|
for n in xbg7_resource_names(&bytes) {
|
||||||
|
if decoded_names.contains(&n) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if let Some((markers, _)) = debug_resource_params(&bytes, &n) {
|
||||||
|
if let Some(&(v, i)) = markers.first() {
|
||||||
|
undecoded_by_counts.entry((v, i)).or_default().push(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ── The report: one row per drawn BUFFER, aggregating its index batches.
|
||||||
|
let mut per_buf: HashMap<u32, (usize, Vec<sylpheed_formats::ship_capture::CapturedIndexBuffer>, u32)> =
|
||||||
|
HashMap::new();
|
||||||
|
for (delta, voff, d) in &hits {
|
||||||
|
if *delta != base_delta {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let e = per_buf.entry(d.vbase).or_insert((*voff, Vec::new(), d.vcount));
|
||||||
|
let ib = d.ib.unwrap();
|
||||||
|
if !e.1.contains(&ib) {
|
||||||
|
e.1.push(ib);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let (mut pad0, mut pad_small, mut pad_off, mut unnamed) = (0usize, 0usize, 0usize, 0usize);
|
||||||
|
let (mut cover_exact, mut cover_short, mut idx_equal, mut idx_partial) = (0usize, 0usize, 0usize, 0usize);
|
||||||
|
let mut rows: Vec<(usize, String)> = Vec::new();
|
||||||
|
for (_, (voff, ibs, vcount)) in per_buf.iter() {
|
||||||
|
let batches = ibs.len();
|
||||||
|
let total: u32 = ibs.iter().map(|i| i.icount).sum();
|
||||||
|
let lo = ibs.iter().map(|i| i.ibase).min().unwrap() as i64 - base_delta;
|
||||||
|
let hi = ibs.iter().map(|i| i.ibase + i.icount * 2).max().unwrap() as i64 - base_delta;
|
||||||
|
let umax = ibs.iter().map(|i| i.imax).max().unwrap();
|
||||||
|
let gap = *voff as i64 - hi; // bytes from the end of the index data to the vertex buffer
|
||||||
|
let names = by_off.get(voff);
|
||||||
|
let dec_idx = names
|
||||||
|
.and_then(|v| v.iter().find(|(_, p, _)| *p as u32 == *vcount).map(|(_, _, i)| *i as u32));
|
||||||
|
// The decoder's assumption, scored: it expects the whole index buffer at
|
||||||
|
// `vb - 2*idx_count - pad`, pad ≤ 3.
|
||||||
|
let dec_pad = dec_idx.map(|i| *voff as i64 - (i as i64) * 2 - lo);
|
||||||
|
match dec_pad {
|
||||||
|
Some(0) => pad0 += 1,
|
||||||
|
Some(p) if (1..=3).contains(&p) => pad_small += 1,
|
||||||
|
Some(_) => pad_off += 1,
|
||||||
|
None => unnamed += 1,
|
||||||
|
}
|
||||||
|
if umax + 1 == *vcount {
|
||||||
|
cover_exact += 1;
|
||||||
|
} else {
|
||||||
|
cover_short += 1;
|
||||||
|
}
|
||||||
|
match dec_idx {
|
||||||
|
Some(i) if i == total => idx_equal += 1,
|
||||||
|
Some(_) => idx_partial += 1,
|
||||||
|
None => {}
|
||||||
|
}
|
||||||
|
rows.push((
|
||||||
|
*voff,
|
||||||
|
format!(
|
||||||
|
"vb 0x{:07X} v={:<6} batches {:<3} idx {:<6} span {:<7} gap {:<8} decpad {:<7} cover {:<10} {}",
|
||||||
|
voff,
|
||||||
|
vcount,
|
||||||
|
batches,
|
||||||
|
total,
|
||||||
|
hi - lo,
|
||||||
|
gap,
|
||||||
|
dec_pad.map(|p| p.to_string()).unwrap_or_else(|| "?".into()),
|
||||||
|
if umax + 1 == *vcount { "exact".to_string() } else { format!("{}/{}", umax, vcount - 1) },
|
||||||
|
names
|
||||||
|
.map(|v| v
|
||||||
|
.iter()
|
||||||
|
.map(|(n, p, i)| format!("{n}(v{p},i{i})"))
|
||||||
|
.collect::<Vec<_>>()
|
||||||
|
.join(" "))
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
// Nothing of ours sits here — is it a resource that never
|
||||||
|
// decodes? Propose it by (vertex, index) counts.
|
||||||
|
undecoded_by_counts
|
||||||
|
.get(&(*vcount as usize, total as usize))
|
||||||
|
.map(|v| format!("MISSED? {}", v.join(" ")))
|
||||||
|
.unwrap_or_else(|| "-".into())
|
||||||
|
})
|
||||||
|
),
|
||||||
|
));
|
||||||
|
}
|
||||||
|
rows.sort();
|
||||||
|
for (_, r) in &rows {
|
||||||
|
println!("{r}");
|
||||||
|
}
|
||||||
|
println!("\nplaced {} drawn buffers in this container", rows.len());
|
||||||
|
println!(
|
||||||
|
"DECODER layout assumption — whole index buffer at vb - 2*idx_count - pad: pad 0 {pad0} · pad 1..3 {pad_small} · elsewhere {pad_off} · not decoded here {unnamed}"
|
||||||
|
);
|
||||||
|
println!(
|
||||||
|
"index extent: our idx_count == sum of captured batches for {idx_equal} buffers, differs for {idx_partial}"
|
||||||
|
);
|
||||||
|
println!("vertex-pool coverage by the union of batches: exact {cover_exact} · short {cover_short}");
|
||||||
|
}
|
||||||
175
crates/sylpheed-formats/examples/capture_index_bytes.rs
Normal file
175
crates/sylpheed-formats/examples/capture_index_bytes.rs
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
//! Do our decoded triangle indices equal the ones the GPU actually read?
|
||||||
|
//!
|
||||||
|
//! `capture_ib_truth` established *where* a block's index buffer lives and that
|
||||||
|
//! its length matches ours. This asks the stronger question: are the index VALUES
|
||||||
|
//! the same, in the same order? The capture prints the first 24 indices of every
|
||||||
|
//! draw batch verbatim (`idx: …`), and a batch's `ibase` locates it inside the
|
||||||
|
//! block's index buffer — so for each drawn buffer we can line the captured run
|
||||||
|
//! up against `GameMesh::indices` at the right offset and compare element by
|
||||||
|
//! element. That tests the whole index path at once: the anchor, the u16
|
||||||
|
//! big-endian read, the triangle-list interpretation (a strip would disagree
|
||||||
|
//! immediately), and the sub-mesh carve.
|
||||||
|
//!
|
||||||
|
//! Usage:
|
||||||
|
//! cargo run --release --example capture_index_bytes -- <Stage_SNN.xpr> <capture.log>...
|
||||||
|
use sylpheed_formats::mesh::Xbg7Model;
|
||||||
|
use sylpheed_formats::ship_capture::{parse_capture, CapturedDraw};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
fn q(v: f32) -> i64 {
|
||||||
|
(v as f64 * 1e4).round() as i64
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
if a.len() < 3 {
|
||||||
|
eprintln!("usage: capture_index_bytes <container.xpr> <capture.log>...");
|
||||||
|
std::process::exit(2);
|
||||||
|
}
|
||||||
|
let bytes = std::fs::read(&a[1]).expect("container");
|
||||||
|
|
||||||
|
let mut draws: Vec<CapturedDraw> = Vec::new();
|
||||||
|
let mut seen = std::collections::HashSet::new();
|
||||||
|
for log in &a[2..] {
|
||||||
|
let text = std::fs::read_to_string(log).expect("log");
|
||||||
|
for d in parse_capture(&text) {
|
||||||
|
let k = d.ib.map(|i| (i.ibase, i.icount)).unwrap_or((0, 0));
|
||||||
|
if d.ib.map_or(false, |i| i.head_len > 0) && d.pos.len() >= 4 && seen.insert((log.clone(), d.vbase, k)) {
|
||||||
|
draws.push(d);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
eprintln!("{} draw batches with an index head", draws.len());
|
||||||
|
|
||||||
|
// Place each drawn buffer in the file by its dumped positions (see
|
||||||
|
// capture_ib_truth for the method) and keep the modal load constant.
|
||||||
|
let be = |at: usize| f32::from_be_bytes(bytes[at..at + 4].try_into().unwrap());
|
||||||
|
let mut index: HashMap<(i64, i64, i64), Vec<u32>> = HashMap::new();
|
||||||
|
let mut o = 0usize;
|
||||||
|
while o + 12 <= bytes.len() {
|
||||||
|
let (x, y, z) = (be(o), be(o + 4), be(o + 8));
|
||||||
|
if x.is_finite() && y.is_finite() && z.is_finite() && x.abs() < 1e6 && y.abs() < 1e6 && z.abs() < 1e6 {
|
||||||
|
index.entry((q(x), q(y), q(z))).or_default().push(o as u32);
|
||||||
|
}
|
||||||
|
o += 4;
|
||||||
|
}
|
||||||
|
let mut deltas: HashMap<i64, usize> = HashMap::new();
|
||||||
|
let mut hits: Vec<(i64, usize, &CapturedDraw)> = Vec::new();
|
||||||
|
for d in &draws {
|
||||||
|
let k = (q(d.pos[0][0]), q(d.pos[0][1]), q(d.pos[0][2]));
|
||||||
|
for dx in -1..=1i64 {
|
||||||
|
for dy in -1..=1i64 {
|
||||||
|
for dz in -1..=1i64 {
|
||||||
|
let Some(cands) = index.get(&(k.0 + dx, k.1 + dy, k.2 + dz)) else { continue };
|
||||||
|
for &off in cands {
|
||||||
|
for stride in (12..=64).step_by(4) {
|
||||||
|
let ok = (1..4).all(|j| {
|
||||||
|
let at = off as usize + j * stride;
|
||||||
|
at + 12 <= bytes.len()
|
||||||
|
&& (0..3).all(|c| (be(at + c * 4) - d.pos[j][c]).abs() <= 1e-4)
|
||||||
|
});
|
||||||
|
if ok {
|
||||||
|
*deltas.entry(d.vbase as i64 - off as i64).or_default() += 1;
|
||||||
|
hits.push((d.vbase as i64 - off as i64, off as usize, d));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let Some((&base_delta, _)) = deltas.iter().max_by_key(|(_, n)| **n) else {
|
||||||
|
eprintln!("no draw could be placed in this container");
|
||||||
|
std::process::exit(1);
|
||||||
|
};
|
||||||
|
println!("load constant 0x{base_delta:X}");
|
||||||
|
|
||||||
|
// Our decode, indexed by vertex offset. A model may hold several sub-meshes;
|
||||||
|
// compare against the one whose vertex count matches the draw.
|
||||||
|
let models = Xbg7Model::stage_models(&bytes);
|
||||||
|
let mut by_off: HashMap<usize, Vec<(String, usize, Vec<u32>)>> = HashMap::new();
|
||||||
|
for m in &models {
|
||||||
|
for sm in &m.meshes {
|
||||||
|
if let Some(off) = sm.vbuf_offset {
|
||||||
|
by_off
|
||||||
|
.entry(off)
|
||||||
|
.or_default()
|
||||||
|
.push((m.name.clone(), sm.positions.len(), sm.indices.clone()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Where does each buffer's index data START? Take it from the capture, not
|
||||||
|
// from an assumed pad: `capture_ib_truth` established that a buffer's batches
|
||||||
|
// tile its index buffer exactly (sum of counts == our idx_count, span ==
|
||||||
|
// 2*count), so the lowest `ibase` over a buffer's batches IS the block's
|
||||||
|
// index start. Assuming `vb - 2*len` instead is wrong for the buffers that
|
||||||
|
// sit at pad 2 and shifts the whole comparison by one element.
|
||||||
|
let mut ib_start: HashMap<u32, i64> = HashMap::new();
|
||||||
|
for (delta, _, d) in &hits {
|
||||||
|
if *delta != base_delta {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let ibase = d.ib.unwrap().ibase as i64;
|
||||||
|
ib_start.entry(d.vbase).and_modify(|e| *e = (*e).min(ibase)).or_insert(ibase);
|
||||||
|
}
|
||||||
|
|
||||||
|
let (mut agree, mut disagree, mut unmatched, mut nooverlap) = (0usize, 0usize, 0usize, 0usize);
|
||||||
|
let mut bad: Vec<String> = Vec::new();
|
||||||
|
let mut checked_elems = 0usize;
|
||||||
|
let mut done: std::collections::HashSet<(u32, u32)> = std::collections::HashSet::new();
|
||||||
|
for (delta, voff, d) in &hits {
|
||||||
|
if *delta != base_delta {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let ib = d.ib.unwrap();
|
||||||
|
if !done.insert((d.vbase, ib.ibase)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let Some(cands) = by_off.get(voff) else {
|
||||||
|
unmatched += 1;
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
let Some((name, _, ours)) = cands.iter().find(|(_, p, _)| *p as u32 == d.vcount) else {
|
||||||
|
unmatched += 1;
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
// Element 0 of our index list is the block's index start, as observed.
|
||||||
|
let ours_start = ib_start[&d.vbase] - base_delta;
|
||||||
|
let batch_off = ib.ibase as i64 - base_delta - ours_start;
|
||||||
|
if batch_off < 0 || batch_off % 2 != 0 {
|
||||||
|
nooverlap += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let first = (batch_off / 2) as usize;
|
||||||
|
let n = (ib.head_len as usize).min(ours.len().saturating_sub(first));
|
||||||
|
if n == 0 {
|
||||||
|
nooverlap += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let mism = (0..n).find(|&k| ours[first + k] != ib.head[k]);
|
||||||
|
checked_elems += n;
|
||||||
|
match mism {
|
||||||
|
None => agree += 1,
|
||||||
|
Some(k) => {
|
||||||
|
disagree += 1;
|
||||||
|
if bad.len() < 8 {
|
||||||
|
bad.push(format!(
|
||||||
|
"{name} vb 0x{:07X} batch@{first}: ours {:?} != captured {:?} (first differs at {k})",
|
||||||
|
voff,
|
||||||
|
&ours[first..first + n.min(12)],
|
||||||
|
&ib.head[..n.min(12)]
|
||||||
|
));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!(
|
||||||
|
"index runs compared: {agree} identical · {disagree} differing · {unmatched} no decoded resource · {nooverlap} batch outside our buffer"
|
||||||
|
);
|
||||||
|
println!("{checked_elems} index elements checked against the GPU");
|
||||||
|
for b in &bad {
|
||||||
|
println!(" MISMATCH {b}");
|
||||||
|
}
|
||||||
|
}
|
||||||
71
crates/sylpheed-formats/examples/desc_dump.rs
Normal file
71
crates/sylpheed-formats/examples/desc_dump.rs
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
//! Dump an XBG7 resource's descriptor around each index marker, to see whether a
|
||||||
|
//! grouped pool carries a declaration PER sub-mesh (the 2026-08-13 mixed-stride
|
||||||
|
//! finding says it must: n201's four sub-meshes use strides 24/24/24/28 and four
|
||||||
|
//! different vertex shaders).
|
||||||
|
//! Usage: desc_dump <container.xpr> <resource>
|
||||||
|
|
||||||
|
fn be32(b: &[u8], o: usize) -> u32 {
|
||||||
|
u32::from_be_bytes(b[o..o + 4].try_into().unwrap())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
let bytes = std::fs::read(&a[1]).unwrap();
|
||||||
|
let want = &a[2];
|
||||||
|
// Walk the XPR2 directory by hand (the crate's reader is private).
|
||||||
|
// 16-byte directory entries at 0x10: type tag, data offset, descriptor size,
|
||||||
|
// name offset — all relative to 0x10 (see texture::Xpr2ResourceEntry).
|
||||||
|
let num = be32(&bytes, 12) as usize;
|
||||||
|
for i in 0..num {
|
||||||
|
let e = &bytes[0x10 + i * 16..0x10 + i * 16 + 16];
|
||||||
|
let tag = &e[0..4];
|
||||||
|
let data_off = be32(e, 4) as usize + 0x10;
|
||||||
|
let desc_size = be32(e, 8) as usize;
|
||||||
|
let name_off = be32(e, 12) as usize + 0x10;
|
||||||
|
if tag != b"XBG7" {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let name = {
|
||||||
|
let s = name_off.min(bytes.len());
|
||||||
|
let end = bytes[s..].iter().position(|&c| c == 0).unwrap_or(0) + s;
|
||||||
|
String::from_utf8_lossy(&bytes[s..end]).to_string()
|
||||||
|
};
|
||||||
|
if name != *want {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let desc = &bytes[data_off..(data_off + desc_size).min(bytes.len())];
|
||||||
|
println!("{name}: descriptor at 0x{data_off:X}, {} bytes", desc.len());
|
||||||
|
// markers: a == c*2, c%3==0, vertex count 32 bytes earlier
|
||||||
|
let mut rel = 0usize;
|
||||||
|
while rel + 8 <= desc.len() {
|
||||||
|
let (x, c) = (be32(desc, rel), be32(desc, rel + 4));
|
||||||
|
if c >= 3 && c % 3 == 0 && c < 400_000 && x == c * 2 && rel >= 32 {
|
||||||
|
let vc = be32(desc, rel - 32);
|
||||||
|
if (3..=200_000).contains(&vc) {
|
||||||
|
println!("\n marker @0x{rel:X}: {vc} verts / {c} indices — declaration triples after it:");
|
||||||
|
let mut r = rel + 8;
|
||||||
|
let mut stride = 0u32;
|
||||||
|
for _ in 0..12 {
|
||||||
|
if r + 12 > desc.len() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let (o, code, usage) = (be32(desc, r), be32(desc, r + 4), be32(desc, r + 8) >> 16);
|
||||||
|
if o == 0x00FF_0000 || code == 0xFFFF_FFFF || o > 0x1000 {
|
||||||
|
println!(" end marker @0x{r:X}: off=0x{o:X} code=0x{code:X}");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
println!(" off {o:>3} code 0x{:06X} usage {usage}", code & 0xFF_FFFF);
|
||||||
|
stride = stride.max(o + 4);
|
||||||
|
r += 12;
|
||||||
|
}
|
||||||
|
println!(" (min stride from element offsets: {stride})");
|
||||||
|
rel += 8;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rel += 4;
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
eprintln!("resource not found");
|
||||||
|
}
|
||||||
2
crates/sylpheed-formats/examples/grouped_report.rs
Normal file
2
crates/sylpheed-formats/examples/grouped_report.rs
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
fn main(){let a:Vec<String>=std::env::args().collect();let b=std::fs::read(&a[1]).unwrap();
|
||||||
|
for l in sylpheed_formats::mesh::debug_grouped_report(&b,&a[2],a[3].parse().unwrap()){println!("{l}")}}
|
||||||
32
crates/sylpheed-formats/examples/index_hash_dump.rs
Normal file
32
crates/sylpheed-formats/examples/index_hash_dump.rs
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
//! Dump a fingerprint of every decoded index run, so two decoder settings can be
|
||||||
|
//! diffed exactly. Usage: index_hash_dump <resource3d_dir>
|
||||||
|
use sylpheed_formats::mesh::Xbg7Model;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let dir = std::env::args().nth(1).expect("resource3d dir");
|
||||||
|
let mut files: Vec<_> = std::fs::read_dir(&dir)
|
||||||
|
.unwrap()
|
||||||
|
.flatten()
|
||||||
|
.map(|e| e.path())
|
||||||
|
.filter(|p| p.extension().and_then(|s| s.to_str()) == Some("xpr"))
|
||||||
|
.collect();
|
||||||
|
files.sort();
|
||||||
|
for f in &files {
|
||||||
|
let Ok(bytes) = std::fs::read(f) else { continue };
|
||||||
|
let w = f.file_name().unwrap().to_string_lossy().to_string();
|
||||||
|
for m in Xbg7Model::stage_models(&bytes) {
|
||||||
|
for (k, sm) in m.meshes.iter().enumerate() {
|
||||||
|
let mut h = 1469598103934665603u64;
|
||||||
|
for i in &sm.indices {
|
||||||
|
h = (h ^ *i as u64).wrapping_mul(1099511628211);
|
||||||
|
}
|
||||||
|
println!(
|
||||||
|
"{w} {} {k} vb={:?} n={} h={h:016x}",
|
||||||
|
m.name,
|
||||||
|
sm.vbuf_offset,
|
||||||
|
sm.indices.len()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
134
crates/sylpheed-formats/examples/index_pad_check.rs
Normal file
134
crates/sylpheed-formats/examples/index_pad_check.rs
Normal file
@@ -0,0 +1,134 @@
|
|||||||
|
//! Is our index list one element late? A capture-free check of the `pad` choice.
|
||||||
|
//!
|
||||||
|
//! `anchor_pool_mesh` tries `ib = vb − idx_count*2 − pad` for `pad` in `0..=3`,
|
||||||
|
//! **pad 0 first and with the looser winding gate** (`XBG7_PAD0_CONSISTENCY`,
|
||||||
|
//! 0.70) than the pad ≥ 1 path (0.85). The 2026-08-13 index-byte comparison
|
||||||
|
//! against the runtime showed 17 draw batches whose captured indices equal our
|
||||||
|
//! decoded list shifted by exactly one element — all of them on buffers whose
|
||||||
|
//! real index data sits at pad 2. A one-element shift re-wires every triangle,
|
||||||
|
//! and it is invisible to every count-based metric (the count, the coverage and
|
||||||
|
//! the positions are all still right).
|
||||||
|
//!
|
||||||
|
//! This reproduces that finding from the container alone: for each resource it
|
||||||
|
//! reads the index run at pad 0 and at pad 2 and scores both on two properties a
|
||||||
|
//! correct triangle list has — **no degenerate triangles** (two equal indices)
|
||||||
|
//! and consistent winding against the stored normals.
|
||||||
|
//!
|
||||||
|
//! Usage: index_pad_check <container.xpr> [name-substring]
|
||||||
|
use sylpheed_formats::mesh::Xbg7Model;
|
||||||
|
|
||||||
|
fn be16(b: &[u8], at: usize) -> u32 {
|
||||||
|
((b[at] as u32) << 8) | b[at + 1] as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Degenerate triangles (a repeated index) and the fraction of triangles whose
|
||||||
|
/// face normal agrees with their vertices' stored normals.
|
||||||
|
fn score(idx: &[u32], pos: &[[f32; 3]], nrm: &[[f32; 3]]) -> (usize, f32, usize) {
|
||||||
|
let mut degen = 0usize;
|
||||||
|
let mut agree = 0usize;
|
||||||
|
let mut counted = 0usize;
|
||||||
|
for t in idx.chunks_exact(3) {
|
||||||
|
let (a, b, c) = (t[0] as usize, t[1] as usize, t[2] as usize);
|
||||||
|
if a == b || b == c || a == c {
|
||||||
|
degen += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if a >= pos.len() || b >= pos.len() || c >= pos.len() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let e1 = [pos[b][0] - pos[a][0], pos[b][1] - pos[a][1], pos[b][2] - pos[a][2]];
|
||||||
|
let e2 = [pos[c][0] - pos[a][0], pos[c][1] - pos[a][1], pos[c][2] - pos[a][2]];
|
||||||
|
let f = [
|
||||||
|
e1[1] * e2[2] - e1[2] * e2[1],
|
||||||
|
e1[2] * e2[0] - e1[0] * e2[2],
|
||||||
|
e1[0] * e2[1] - e1[1] * e2[0],
|
||||||
|
];
|
||||||
|
if nrm.len() <= a {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let n = nrm[a];
|
||||||
|
let dot = f[0] * n[0] + f[1] * n[1] + f[2] * n[2];
|
||||||
|
counted += 1;
|
||||||
|
if dot > 0.0 {
|
||||||
|
agree += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let frac = if counted == 0 { 0.0 } else { agree as f32 / counted as f32 };
|
||||||
|
(degen, frac.max(1.0 - frac), counted)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
let bytes = std::fs::read(&a[1]).expect("container");
|
||||||
|
let filter = a.get(2).cloned().unwrap_or_default();
|
||||||
|
|
||||||
|
let models = Xbg7Model::stage_models(&bytes);
|
||||||
|
println!(
|
||||||
|
"{:<22} {:>6} {:>6} {:<26} {:<26} verdict",
|
||||||
|
"resource", "verts", "idx", "pad 0 (what we decode)", "pad 2 (2 bytes earlier)"
|
||||||
|
);
|
||||||
|
let (mut better_p2, mut better_p0, mut tie) = (0usize, 0usize, 0usize);
|
||||||
|
let mut hist_ok: Vec<(usize, String, usize)> = Vec::new();
|
||||||
|
for m in &models {
|
||||||
|
if !filter.is_empty() && !m.name.contains(&filter) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if m.meshes.len() != 1 {
|
||||||
|
continue; // single-block path only; grouped pools use another formula
|
||||||
|
}
|
||||||
|
let sm = &m.meshes[0];
|
||||||
|
let Some(vb) = sm.vbuf_offset else { continue };
|
||||||
|
let n = sm.indices.len();
|
||||||
|
if n < 6 || sm.normals.is_empty() || vb < n * 2 + 2 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let read_at = |start: usize| -> Vec<u32> { (0..n).map(|k| be16(&bytes, start + k * 2)).collect() };
|
||||||
|
let l0 = read_at(vb - n * 2);
|
||||||
|
let l2 = read_at(vb - n * 2 - 2);
|
||||||
|
// Sanity: l0 must be what the decoder emitted, or the assumption that we
|
||||||
|
// took pad 0 is wrong for this resource and the comparison is meaningless.
|
||||||
|
let took_pad0 = l0 == sm.indices;
|
||||||
|
if !took_pad0 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let (d0, c0, _) = score(&l0, &sm.positions, &sm.normals);
|
||||||
|
let (d2, c2, _) = score(&l2, &sm.positions, &sm.normals);
|
||||||
|
let max_i0 = l0.iter().max().copied().unwrap_or(0);
|
||||||
|
let max_i2 = l2.iter().max().copied().unwrap_or(0);
|
||||||
|
let v = sm.positions.len() as u32;
|
||||||
|
// A shifted list typically also overruns the pool by one vertex or leaves
|
||||||
|
// the last vertex unreferenced, so carry the coverage as evidence too.
|
||||||
|
let verdict = if d2 < d0 && c2 >= c0 {
|
||||||
|
better_p2 += 1;
|
||||||
|
"pad 2 is the real one"
|
||||||
|
} else if d0 < d2 || c0 > c2 {
|
||||||
|
better_p0 += 1;
|
||||||
|
"pad 0 fine"
|
||||||
|
} else {
|
||||||
|
tie += 1;
|
||||||
|
"indistinguishable"
|
||||||
|
};
|
||||||
|
if verdict == "pad 0 fine" {
|
||||||
|
hist_ok.push((d0, m.name.clone(), n));
|
||||||
|
}
|
||||||
|
if verdict != "pad 0 fine" || !filter.is_empty() {
|
||||||
|
println!(
|
||||||
|
"{:<22} {:>6} {:>6} degen {:>5} wind {:.3} max {:<5} degen {:>5} wind {:.3} max {:<5} {}",
|
||||||
|
m.name, v, n, d0, c0, max_i0, d2, c2, max_i2, verdict
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("\npad 2 wins: {better_p2} · pad 0 wins: {better_p0} · indistinguishable: {tie}");
|
||||||
|
// Is "no degenerate triangle" a safe invariant for a correctly anchored
|
||||||
|
// block? Distribution over the resources where pad 0 is the better choice.
|
||||||
|
let zero = hist_ok.iter().filter(|(d, _, _)| *d == 0).count();
|
||||||
|
println!(
|
||||||
|
"of the {} pad-0-correct resources, {zero} have ZERO degenerate triangles",
|
||||||
|
hist_ok.len()
|
||||||
|
);
|
||||||
|
let mut worst: Vec<_> = hist_ok.iter().filter(|(d, _, _)| *d > 0).collect();
|
||||||
|
worst.sort_by_key(|(d, _, _)| std::cmp::Reverse(*d));
|
||||||
|
for (d, n, idx) in worst.iter().take(10) {
|
||||||
|
println!(" {n}: {d} degenerate of {} triangles", idx / 3);
|
||||||
|
}
|
||||||
|
}
|
||||||
86
crates/sylpheed-formats/examples/miss_targets.rs
Normal file
86
crates/sylpheed-formats/examples/miss_targets.rs
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
//! Which container should the next runtime capture aim at?
|
||||||
|
//!
|
||||||
|
//! The 2026-08-13 stage-05 capture showed that a mission keeps several containers
|
||||||
|
//! resident and that its OWN `Stage_SNN.xpr` is among them (the f101 ACROPOLIS was
|
||||||
|
//! drawn from `Stage_S05.xpr`), so a capture can be aimed by choosing the mission.
|
||||||
|
//! This ranks the targets: for every XBG7 resource on the disc it records the
|
||||||
|
//! containers where it decodes and the ones where it does not, then reports
|
||||||
|
//!
|
||||||
|
//! * resources that decode **nowhere** — the real gaps, where a capture is the
|
||||||
|
//! only ground truth left;
|
||||||
|
//! * per container, how many of those it holds (fly that mission);
|
||||||
|
//! * resources that miss in one container but decode in another — a defect worth
|
||||||
|
//! fixing, but the geometry is already recoverable, so a capture is not needed.
|
||||||
|
//!
|
||||||
|
//! Usage: miss_targets <resource3d_dir>
|
||||||
|
use sylpheed_formats::mesh::{xbg7_resource_names, Xbg7Model};
|
||||||
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let dir = std::env::args().nth(1).expect("resource3d dir");
|
||||||
|
let mut files: Vec<_> = std::fs::read_dir(&dir)
|
||||||
|
.unwrap()
|
||||||
|
.flatten()
|
||||||
|
.map(|e| e.path())
|
||||||
|
.filter(|p| p.extension().and_then(|s| s.to_str()) == Some("xpr"))
|
||||||
|
.collect();
|
||||||
|
files.sort();
|
||||||
|
|
||||||
|
// resource -> (containers where it decodes, containers where it misses)
|
||||||
|
let mut ok: BTreeMap<String, BTreeSet<String>> = BTreeMap::new();
|
||||||
|
let mut miss: BTreeMap<String, BTreeSet<String>> = BTreeMap::new();
|
||||||
|
for f in &files {
|
||||||
|
let Ok(bytes) = std::fs::read(f) else { continue };
|
||||||
|
let where_ = f.file_name().unwrap().to_string_lossy().to_string();
|
||||||
|
let declared: BTreeSet<String> = xbg7_resource_names(&bytes).into_iter().collect();
|
||||||
|
if declared.is_empty() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let decoded: BTreeSet<String> =
|
||||||
|
Xbg7Model::stage_models(&bytes).into_iter().map(|m| m.name).collect();
|
||||||
|
for n in &declared {
|
||||||
|
if decoded.contains(n) {
|
||||||
|
ok.entry(n.clone()).or_default().insert(where_.clone());
|
||||||
|
} else {
|
||||||
|
miss.entry(n.clone()).or_default().insert(where_.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let never: BTreeMap<&String, &BTreeSet<String>> =
|
||||||
|
miss.iter().filter(|(n, _)| !ok.contains_key(*n)).collect();
|
||||||
|
let recoverable: Vec<&String> = miss.keys().filter(|n| ok.contains_key(*n)).collect();
|
||||||
|
|
||||||
|
println!("resources that decode NOWHERE: {}", never.len());
|
||||||
|
println!("resources that miss somewhere but decode elsewhere: {}\n", recoverable.len());
|
||||||
|
|
||||||
|
// Rank containers by how many never-decoding resources they hold.
|
||||||
|
let mut per_container: BTreeMap<&String, Vec<&String>> = BTreeMap::new();
|
||||||
|
for (n, wheres) in &never {
|
||||||
|
for w in wheres.iter() {
|
||||||
|
per_container.entry(w).or_default().push(n);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut ranked: Vec<_> = per_container.iter().collect();
|
||||||
|
ranked.sort_by_key(|(_, v)| std::cmp::Reverse(v.len()));
|
||||||
|
println!("container never-decoding resources it holds");
|
||||||
|
for (w, v) in ranked.iter().take(14) {
|
||||||
|
let sample: Vec<&str> = v.iter().take(6).map(|s| s.as_str()).collect();
|
||||||
|
println!("{:<26} {:>3} {}", w, v.len(), sample.join(", "));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exclusives: a never-decoding resource that only ONE container holds is only
|
||||||
|
// reachable through whatever loads that container.
|
||||||
|
let excl: Vec<(&&String, &&BTreeSet<String>)> =
|
||||||
|
never.iter().filter(|(_, w)| w.len() == 1).collect();
|
||||||
|
println!("\nof the never-decoding, {} live in exactly one container", excl.len());
|
||||||
|
let mut by_one: BTreeMap<&String, Vec<&String>> = BTreeMap::new();
|
||||||
|
for (n, w) in &excl {
|
||||||
|
by_one.entry(w.iter().next().unwrap()).or_default().push(n);
|
||||||
|
}
|
||||||
|
let mut b: Vec<_> = by_one.iter().collect();
|
||||||
|
b.sort_by_key(|(_, v)| std::cmp::Reverse(v.len()));
|
||||||
|
for (w, v) in b.iter().take(10) {
|
||||||
|
println!(" {:<24} {:>3} {}", w, v.len(), v.iter().take(5).map(|s| s.as_str()).collect::<Vec<_>>().join(", "));
|
||||||
|
}
|
||||||
|
}
|
||||||
129
crates/sylpheed-formats/examples/pad_shift_audit.rs
Normal file
129
crates/sylpheed-formats/examples/pad_shift_audit.rs
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
//! How much geometry on the disc was being read one index element late?
|
||||||
|
//!
|
||||||
|
//! The pad-scoring fix (2026-08-13) makes `anchor_pool_mesh` choose the pad whose
|
||||||
|
//! index run is cleanest instead of the first that validates. This measures the
|
||||||
|
//! blast radius: per container, how many single-block resources now decode from a
|
||||||
|
//! run that is NOT the old first-match (`pad 0`) one, and how many decoded runs
|
||||||
|
//! still contain degenerate triangles (the shift signature) afterwards.
|
||||||
|
//!
|
||||||
|
//! Usage: pad_shift_audit <resource3d_dir>
|
||||||
|
use sylpheed_formats::mesh::Xbg7Model;
|
||||||
|
|
||||||
|
fn be16(b: &[u8], at: usize) -> u32 {
|
||||||
|
((b[at] as u32) << 8) | b[at + 1] as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Fraction of triangles whose face normal agrees with the stored normals,
|
||||||
|
/// folded to `max(na, 1-na)` so both authored windings read as ≈1.
|
||||||
|
fn winding(idx: &[u32], pos: &[[f32; 3]], nrm: &[[f32; 3]]) -> f32 {
|
||||||
|
let (mut agree, mut n) = (0usize, 0usize);
|
||||||
|
for t in idx.chunks_exact(3) {
|
||||||
|
let (a, b, c) = (t[0] as usize, t[1] as usize, t[2] as usize);
|
||||||
|
if a == b || b == c || a == c || a.max(b).max(c) >= pos.len() || a >= nrm.len() {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let e1 = [pos[b][0] - pos[a][0], pos[b][1] - pos[a][1], pos[b][2] - pos[a][2]];
|
||||||
|
let e2 = [pos[c][0] - pos[a][0], pos[c][1] - pos[a][1], pos[c][2] - pos[a][2]];
|
||||||
|
let f = [
|
||||||
|
e1[1] * e2[2] - e1[2] * e2[1],
|
||||||
|
e1[2] * e2[0] - e1[0] * e2[2],
|
||||||
|
e1[0] * e2[1] - e1[1] * e2[0],
|
||||||
|
];
|
||||||
|
let nv = nrm[a];
|
||||||
|
n += 1;
|
||||||
|
if f[0] * nv[0] + f[1] * nv[1] + f[2] * nv[2] > 0.0 {
|
||||||
|
agree += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if n == 0 {
|
||||||
|
return 1.0;
|
||||||
|
}
|
||||||
|
let fr = agree as f32 / n as f32;
|
||||||
|
fr.max(1.0 - fr)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn degenerate(idx: &[u32]) -> usize {
|
||||||
|
idx.chunks_exact(3)
|
||||||
|
.filter(|t| t[0] == t[1] || t[1] == t[2] || t[0] == t[2])
|
||||||
|
.count()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let dir = std::env::args().nth(1).expect("resource3d dir");
|
||||||
|
let mut files: Vec<_> = std::fs::read_dir(&dir)
|
||||||
|
.unwrap()
|
||||||
|
.flatten()
|
||||||
|
.map(|e| e.path())
|
||||||
|
.filter(|p| p.extension().and_then(|s| s.to_str()) == Some("xpr"))
|
||||||
|
.collect();
|
||||||
|
files.sort();
|
||||||
|
|
||||||
|
let (mut total, mut moved, mut still_degen) = (0usize, 0usize, 0usize);
|
||||||
|
let mut weak = 0usize;
|
||||||
|
let mut weak_wind: Vec<(f32, f32, String)> = Vec::new();
|
||||||
|
let mut worst: Vec<(usize, String, String)> = Vec::new();
|
||||||
|
for f in &files {
|
||||||
|
let Ok(bytes) = std::fs::read(f) else { continue };
|
||||||
|
let where_ = f.file_name().unwrap().to_string_lossy().to_string();
|
||||||
|
let mut c_moved = 0usize;
|
||||||
|
for m in Xbg7Model::stage_models(&bytes) {
|
||||||
|
// Degeneracy is counted over EVERY sub-mesh (grouped pools included —
|
||||||
|
// they have their own pad choice); the pad-0 comparison below only
|
||||||
|
// applies to single-block resources, whose run starts at `vb - 2n`.
|
||||||
|
for sm in &m.meshes {
|
||||||
|
let d = degenerate(&sm.indices);
|
||||||
|
if d > 0 {
|
||||||
|
still_degen += 1;
|
||||||
|
worst.push((d, m.name.clone(), where_.clone()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if m.meshes.len() != 1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let sm = &m.meshes[0];
|
||||||
|
let Some(vb) = sm.vbuf_offset else { continue };
|
||||||
|
let n = sm.indices.len();
|
||||||
|
if n < 6 || vb < n * 2 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
total += 1;
|
||||||
|
let pad0: Vec<u32> = (0..n).map(|k| be16(&bytes, vb - n * 2 + k * 2)).collect();
|
||||||
|
if pad0 != sm.indices {
|
||||||
|
moved += 1;
|
||||||
|
c_moved += 1;
|
||||||
|
// How strong was the evidence for moving? A pad-0 run with
|
||||||
|
// degenerate triangles is a decisive shift signature; one with
|
||||||
|
// none moved on winding alone, which is weaker.
|
||||||
|
if degenerate(&pad0) == 0 {
|
||||||
|
weak += 1;
|
||||||
|
// Record how far apart the two runs' winding is, to see
|
||||||
|
// whether these look like the same shift signature as the
|
||||||
|
// decisive cases (pad-0 winding drifting toward 0.5) or like
|
||||||
|
// noise between two equally clean readings.
|
||||||
|
let w0 = winding(&pad0, &sm.positions, &sm.normals);
|
||||||
|
let w2: f32 = {
|
||||||
|
let l2: Vec<u32> = (0..n).map(|k| be16(&bytes, vb - n * 2 - 2 + k * 2)).collect();
|
||||||
|
winding(&l2, &sm.positions, &sm.normals)
|
||||||
|
};
|
||||||
|
weak_wind.push((w0, w2, m.name.clone()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if c_moved > 0 {
|
||||||
|
println!("{where_:<24} {c_moved} resources read from a non-pad-0 index run");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("\n{moved} of {total} single-block resources moved off the pad-0 run");
|
||||||
|
println!("{still_degen} decoded runs still contain a degenerate triangle");
|
||||||
|
println!("of the moved, {weak} had a pad-0 run with no degenerate triangle (moved on winding alone)");
|
||||||
|
let clear = weak_wind.iter().filter(|(w0, w2, _)| *w2 - *w0 > 0.15).count();
|
||||||
|
let close = weak_wind.iter().filter(|(w0, w2, _)| (*w2 - *w0).abs() <= 0.05).count();
|
||||||
|
println!(" of those: {clear} show the shift signature (pad-2 winding > pad-0 by >0.15), {close} are within 0.05 (noise)");
|
||||||
|
for (w0, w2, n) in weak_wind.iter().take(8) {
|
||||||
|
println!(" {n}: pad0 wind {w0:.3} -> pad2 {w2:.3}");
|
||||||
|
}
|
||||||
|
worst.sort_by_key(|(d, _, _)| std::cmp::Reverse(*d));
|
||||||
|
for (d, n, w) in worst.iter().take(15) {
|
||||||
|
println!(" {n} ({w}): {d} degenerate triangles");
|
||||||
|
}
|
||||||
|
}
|
||||||
13
crates/sylpheed-formats/examples/params.rs
Normal file
13
crates/sylpheed-formats/examples/params.rs
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
fn main(){
|
||||||
|
let a:Vec<String>=std::env::args().collect();
|
||||||
|
let bytes=std::fs::read(&a[1]).unwrap();
|
||||||
|
let filter=a.get(2).cloned().unwrap_or_default();
|
||||||
|
for n in sylpheed_formats::mesh::xbg7_resource_names(&bytes) {
|
||||||
|
if !filter.is_empty() && !n.contains(&filter) { continue }
|
||||||
|
if let Some((m,stride))=sylpheed_formats::mesh::debug_resource_params(&bytes,&n) {
|
||||||
|
let strides = sylpheed_formats::mesh::debug_decl_strides(&bytes, &n);
|
||||||
|
println!("{n:<28} decl-stride {stride} markers {:?} per-sub-mesh strides {:?}",
|
||||||
|
&m[..m.len().min(4)], strides);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6
crates/sylpheed-formats/examples/probe_anchor.rs
Normal file
6
crates/sylpheed-formats/examples/probe_anchor.rs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
let bytes = std::fs::read(&a[1]).unwrap();
|
||||||
|
let vb: usize = a[3].parse().unwrap();
|
||||||
|
println!("{:?}", sylpheed_formats::mesh::debug_try_anchor(&bytes, &a[2], vb, 3));
|
||||||
|
}
|
||||||
60
crates/sylpheed-formats/examples/roster_target.rs
Normal file
60
crates/sylpheed-formats/examples/roster_target.rs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
//! Which mission should the next unit harvest fly?
|
||||||
|
//!
|
||||||
|
//! Unit definitions are instantiated per stage, so coverage grows by visiting
|
||||||
|
//! missions — but only if the mission fields units we have not read yet. This
|
||||||
|
//! ranks every stage by how many of its roster units are missing from the
|
||||||
|
//! harvested CSV.
|
||||||
|
//!
|
||||||
|
//! Usage: roster_target <disc-root> <unit-runtime-fields.csv>
|
||||||
|
use sylpheed_formats::hash::name_hash;
|
||||||
|
use sylpheed_formats::idxd::IdxdObject;
|
||||||
|
use sylpheed_formats::pak::PakArchive;
|
||||||
|
use std::collections::{BTreeMap, BTreeSet};
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
let pak = PakArchive::open(format!("{}/dat/GP_MAIN_GAME_E.pak", a[1])).expect("pak");
|
||||||
|
let have: BTreeSet<String> = std::fs::read_to_string(&a[2])
|
||||||
|
.expect("csv")
|
||||||
|
.lines()
|
||||||
|
.skip(1)
|
||||||
|
.filter_map(|l| l.split(',').next().map(str::to_string))
|
||||||
|
.collect();
|
||||||
|
// Label each roster by STAGE: the TOC stores a hash of the original path, and
|
||||||
|
// the table names are known (`EnumUnit_SNN.tbl`), so hashing the candidates
|
||||||
|
// maps entries back to stages. Most rosters carry no `UN_S<NN>_` prop id, which
|
||||||
|
// is all `UnitRoster::stage` can infer from.
|
||||||
|
let mut by_hash: BTreeMap<u32, String> = BTreeMap::new();
|
||||||
|
// The TOC hashes a PATH, and these tables live under a directory — try the
|
||||||
|
// known schemes (see hash::TOC_NAME_SCHEMES) rather than the bare name.
|
||||||
|
for i in 1..=29 {
|
||||||
|
let stage = format!("S{i:02}");
|
||||||
|
for pre in ["", "unit\\", "battle\\", "stage\\", "enemy\\"] {
|
||||||
|
for suf in [".tbl", ""] {
|
||||||
|
by_hash.insert(name_hash(&format!("{pre}EnumUnit_{stage}{suf}")), stage.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let mut rows: Vec<(usize, String, Vec<String>)> = Vec::new();
|
||||||
|
for e in pak.entries() {
|
||||||
|
let Some(stage) = by_hash.get(&e.name_hash).cloned() else { continue };
|
||||||
|
let Ok(b) = pak.read(e) else { continue };
|
||||||
|
let Ok(o) = IdxdObject::parse(&b) else { continue };
|
||||||
|
let mut units: Vec<String> = Vec::new();
|
||||||
|
for id in o.tokens().iter().filter(|s| s.starts_with("UN_")) {
|
||||||
|
let prop = id.contains("Asteroid") || id.contains("cmesh") || id.contains("_Box");
|
||||||
|
if !prop && !units.iter().any(|u| u == id) {
|
||||||
|
units.push(id.clone());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let missing: Vec<String> = units.iter().filter(|u| !have.contains(*u)).cloned().collect();
|
||||||
|
rows.push((missing.len(), stage, missing));
|
||||||
|
}
|
||||||
|
rows.sort_by_key(|(n, _, _)| std::cmp::Reverse(*n));
|
||||||
|
println!("units already harvested: {}\n", have.len());
|
||||||
|
println!("stage missing roster units not yet read");
|
||||||
|
for (n, stage, missing) in rows.iter().take(12) {
|
||||||
|
let s: Vec<&str> = missing.iter().take(6).map(|s| s.as_str()).collect();
|
||||||
|
println!("{stage:<8} {n:>5} {}", s.join(", "));
|
||||||
|
}
|
||||||
|
}
|
||||||
7
crates/sylpheed-formats/examples/starts_probe.rs
Normal file
7
crates/sylpheed-formats/examples/starts_probe.rs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
fn main(){let a:Vec<String>=std::env::args().collect();let b=std::fs::read(&a[1]).unwrap();
|
||||||
|
let stride:usize=a[2].parse().unwrap(); let want:usize=a[3].parse().unwrap();
|
||||||
|
let s=sylpheed_formats::mesh::debug_vertex_run_starts(&b,stride);
|
||||||
|
println!("{} candidate starts at stride {}", s.len(), stride);
|
||||||
|
println!("contains {:#x}: {}", want, s.contains(&want));
|
||||||
|
let near:Vec<String>=s.iter().filter(|&&o| o.abs_diff(want)<0x200).map(|o|format!("{o:#x}")).collect();
|
||||||
|
println!("nearby: {}", near.join(" "));}
|
||||||
19
crates/sylpheed-formats/examples/why_missed.rs
Normal file
19
crates/sylpheed-formats/examples/why_missed.rs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
//! Why does a named resource never decode? Reports the furthest gate its best
|
||||||
|
//! candidate reached. Usage: why_missed <container.xpr> [name-substring]
|
||||||
|
use sylpheed_formats::mesh::{debug_best_rejection, xbg7_resource_names, Xbg7Model};
|
||||||
|
use std::collections::HashSet;
|
||||||
|
fn main() {
|
||||||
|
let a: Vec<String> = std::env::args().collect();
|
||||||
|
let bytes = std::fs::read(&a[1]).unwrap();
|
||||||
|
let filter = a.get(2).cloned().unwrap_or_default();
|
||||||
|
let decoded: HashSet<String> = Xbg7Model::stage_models(&bytes).into_iter().map(|m| m.name).collect();
|
||||||
|
for n in xbg7_resource_names(&bytes) {
|
||||||
|
if decoded.contains(&n) || (!filter.is_empty() && !n.contains(&filter)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
match debug_best_rejection(&bytes, &n) {
|
||||||
|
Some((rank, why)) => println!("{n:<28} rank {rank} {why}"),
|
||||||
|
None => println!("{n:<28} (no candidate reached any gate / skipped before anchoring)"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -513,6 +513,9 @@ impl Xbg7Model {
|
|||||||
/// → the grouped-pool layout ([`anchor_grouped_meshes`]).
|
/// → the grouped-pool layout ([`anchor_grouped_meshes`]).
|
||||||
markers: Vec<(usize, usize)>,
|
markers: Vec<(usize, usize)>,
|
||||||
decl: VertexDecl,
|
decl: VertexDecl,
|
||||||
|
/// One declaration per marker (same order). A grouped pool can mix
|
||||||
|
/// strides, so the grouped path must use these rather than `decl`.
|
||||||
|
decls: Vec<VertexDecl>,
|
||||||
}
|
}
|
||||||
let mut resources: Vec<Res> = Vec::new();
|
let mut resources: Vec<Res> = Vec::new();
|
||||||
for _ in 0..header.num_resources {
|
for _ in 0..header.num_resources {
|
||||||
@@ -551,10 +554,17 @@ impl Xbg7Model {
|
|||||||
// at a different offset when requested alone. The filter is applied
|
// at a different offset when requested alone. The filter is applied
|
||||||
// to the OUTPUT instead, so a subset is always a subset of the
|
// to the OUTPUT instead, so a subset is always a subset of the
|
||||||
// container's own answer.
|
// container's own answer.
|
||||||
|
let mut decls = if submesh_decls() { all_vertex_decls(d) } else { Vec::new() };
|
||||||
|
if decls.len() != markers.len() {
|
||||||
|
// Never seen on the disc, but if the two walks disagree fall back
|
||||||
|
// to the single declaration rather than mis-pair them.
|
||||||
|
decls = vec![decl.clone(); markers.len()];
|
||||||
|
}
|
||||||
resources.push(Res {
|
resources.push(Res {
|
||||||
name,
|
name,
|
||||||
markers,
|
markers,
|
||||||
decl,
|
decl,
|
||||||
|
decls,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if resources.is_empty() {
|
if resources.is_empty() {
|
||||||
@@ -614,7 +624,7 @@ impl Xbg7Model {
|
|||||||
// Several sub-meshes sharing grouped index/vertex pools → the
|
// Several sub-meshes sharing grouped index/vertex pools → the
|
||||||
// deterministic grouped-pool decode (hero ships et al.).
|
// deterministic grouped-pool decode (hero ships et al.).
|
||||||
let grouped =
|
let grouped =
|
||||||
anchor_grouped_meshes(bytes, data_base, starts, &r.markers, &r.decl, &empty_taken);
|
anchor_grouped_meshes(bytes, data_base, starts, &r.markers, &r.decls, &empty_taken);
|
||||||
if !grouped.is_empty() {
|
if !grouped.is_empty() {
|
||||||
grouped
|
grouped
|
||||||
} else {
|
} else {
|
||||||
@@ -728,7 +738,7 @@ impl Xbg7Model {
|
|||||||
// Grouped pool: re-place the WHOLE pool past everything
|
// Grouped pool: re-place the WHOLE pool past everything
|
||||||
// claimed, or keep what we had.
|
// claimed, or keep what we had.
|
||||||
let alt = anchor_grouped_meshes(
|
let alt = anchor_grouped_meshes(
|
||||||
bytes, data_base, starts, &r.markers, &r.decl, &taken,
|
bytes, data_base, starts, &r.markers, &r.decls, &taken,
|
||||||
);
|
);
|
||||||
if !alt.is_empty() {
|
if !alt.is_empty() {
|
||||||
m.meshes = alt;
|
m.meshes = alt;
|
||||||
@@ -915,6 +925,40 @@ pub fn debug_best_rejection(bytes: &[u8], name: &str) -> Option<(usize, String)>
|
|||||||
Some(best)
|
Some(best)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Diagnostic: the stride of every sub-mesh declaration of a named resource.
|
||||||
|
/// A grouped pool may mix them (`n201_01` → 24, 24, 24, 28).
|
||||||
|
pub fn debug_decl_strides(bytes: &[u8], name: &str) -> Vec<usize> {
|
||||||
|
decls_of(bytes, name).map(|v| v.iter().map(|d| d.stride).collect()).unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Every sub-mesh declaration of a named resource (see [`all_vertex_decls`]).
|
||||||
|
fn decls_of(bytes: &[u8], name: &str) -> Option<Vec<VertexDecl>> {
|
||||||
|
if bytes.len() < 16 || &bytes[..4] != b"XPR2" {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
let mut cur = Cursor::new(bytes);
|
||||||
|
let header = Xpr2Header::read(&mut cur).ok()?;
|
||||||
|
const DIR_BASE: usize = 0x10;
|
||||||
|
for _ in 0..header.num_resources {
|
||||||
|
let Ok(e) = Xpr2ResourceEntry::read(&mut cur) else { break };
|
||||||
|
if &e.type_tag != b"XBG7" {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let desc = e.data_offset as usize + DIR_BASE;
|
||||||
|
let desc_end = (desc + e.descriptor_size as usize).min(bytes.len());
|
||||||
|
if desc >= bytes.len() || desc_end <= desc {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let rname = read_cstr(bytes, e.name_offset as usize + DIR_BASE)
|
||||||
|
.unwrap_or_else(|| "XBG7".to_string());
|
||||||
|
if rname != name {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
return Some(all_vertex_decls(&bytes[desc..desc_end]));
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
/// Diagnostic: why does the decoder refuse a grouped-pool resource at a given
|
/// Diagnostic: why does the decoder refuse a grouped-pool resource at a given
|
||||||
/// pool start? Recomputes the pool layout exactly as [`anchor_grouped_meshes`]
|
/// pool start? Recomputes the pool layout exactly as [`anchor_grouped_meshes`]
|
||||||
/// does and reports the pivot sub-mesh's verdict for each index/vertex pad —
|
/// does and reports the pivot sub-mesh's verdict for each index/vertex pad —
|
||||||
@@ -927,6 +971,12 @@ pub fn debug_grouped_report(bytes: &[u8], name: &str, vb0: usize) -> Vec<String>
|
|||||||
if n == 0 {
|
if n == 0 {
|
||||||
return vec!["no index markers".into()];
|
return vec!["no index markers".into()];
|
||||||
}
|
}
|
||||||
|
// Per-sub-mesh declarations, like the production path: a pool can mix strides
|
||||||
|
// and reporting with one of them blames the wrong gate.
|
||||||
|
let decls = match decls_of(bytes, name).filter(|v| v.len() == n && submesh_decls()) {
|
||||||
|
Some(v) => v,
|
||||||
|
None => vec![decl.clone(); n],
|
||||||
|
};
|
||||||
let (mut rel_ib, mut acc_i) = (Vec::with_capacity(n), 0usize);
|
let (mut rel_ib, mut acc_i) = (Vec::with_capacity(n), 0usize);
|
||||||
for &(_, ic) in &markers {
|
for &(_, ic) in &markers {
|
||||||
rel_ib.push(acc_i);
|
rel_ib.push(acc_i);
|
||||||
@@ -936,8 +986,8 @@ pub fn debug_grouped_report(bytes: &[u8], name: &str, vb0: usize) -> Vec<String>
|
|||||||
let kmax = (0..n).max_by_key(|&i| markers[i].1).unwrap_or(0);
|
let kmax = (0..n).max_by_key(|&i| markers[i].1).unwrap_or(0);
|
||||||
let (vck, ick) = markers[kmax];
|
let (vck, ick) = markers[kmax];
|
||||||
let mut off_v = 0usize;
|
let mut off_v = 0usize;
|
||||||
for &(vc, _) in markers.iter().take(kmax) {
|
for (i, &(vc, _)) in markers.iter().take(kmax).enumerate() {
|
||||||
off_v += vc * decl.stride;
|
off_v += vc * decls[i].stride;
|
||||||
}
|
}
|
||||||
let mut out = vec![format!(
|
let mut out = vec![format!(
|
||||||
"{name}: {n} sub-meshes, pivot #{kmax} ({vck} verts, {ick} idx), pool span {span}"
|
"{name}: {n} sub-meshes, pivot #{kmax} ({vck} verts, {ick} idx), pool span {span}"
|
||||||
@@ -957,7 +1007,7 @@ pub fn debug_grouped_report(bytes: &[u8], name: &str, vb0: usize) -> Vec<String>
|
|||||||
vb0 + off_v,
|
vb0 + off_v,
|
||||||
vck,
|
vck,
|
||||||
ick,
|
ick,
|
||||||
&decl,
|
&decls[kmax],
|
||||||
0.85,
|
0.85,
|
||||||
true,
|
true,
|
||||||
);
|
);
|
||||||
@@ -1089,6 +1139,33 @@ fn pad0_consistency() -> f32 {
|
|||||||
std::env::var("XBG7_PAD0_CONSISTENCY").ok().and_then(|v| v.parse().ok()).unwrap_or(0.70)
|
std::env::var("XBG7_PAD0_CONSISTENCY").ok().and_then(|v| v.parse().ok()).unwrap_or(0.70)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Revert knob for the 2026-08-13 pad scoring: with `XBG7_PAD_FIRST_MATCH=1`,
|
||||||
|
/// [`anchor_pool_mesh`] takes the FIRST pad that validates (the pre-fix
|
||||||
|
/// behaviour) instead of the pad whose index run is cleanest. Kept so the two
|
||||||
|
/// behaviours can be diffed on the disc; see docs/re/structures/xbg7-mesh.md.
|
||||||
|
/// Use the **per-sub-mesh** vertex declarations in a grouped pool — **on by
|
||||||
|
/// default**; `XBG7_SUBMESH_DECLS=0` restores the single-declaration reading.
|
||||||
|
///
|
||||||
|
/// Each index marker is followed by its own element triples and they can differ:
|
||||||
|
/// `n201_01` (`Stage_S02.xpr`) declares strides 24, 24, 24, **28**, which a runtime
|
||||||
|
/// capture confirms draw-for-draw (`stride=28` on the fourth draw, and a distinct
|
||||||
|
/// vertex shader per sub-mesh). Reading only the first declaration walked the last
|
||||||
|
/// buffer out of phase and declined the whole resource.
|
||||||
|
///
|
||||||
|
/// With this and the completeness-based candidate choice in
|
||||||
|
/// [`anchor_grouped_meshes`], `n201_01` anchors at the capture-proven pool start
|
||||||
|
/// with all four sub-meshes at the captured offsets, its two sibling copies take
|
||||||
|
/// their own pools, disc-wide misses fall **85 → 47**, and the captured index runs
|
||||||
|
/// of the stage-05 mission rise **124 → 128** identical. See
|
||||||
|
/// docs/re/structures/xbg7-mesh.md.
|
||||||
|
fn submesh_decls() -> bool {
|
||||||
|
std::env::var("XBG7_SUBMESH_DECLS").map(|v| v != "0").unwrap_or(true)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn pad_first_match() -> bool {
|
||||||
|
std::env::var("XBG7_PAD_FIRST_MATCH").map(|v| v == "1").unwrap_or(false)
|
||||||
|
}
|
||||||
|
|
||||||
/// Triangle count below which the looser [`small_cap`] applies. `0` (default)
|
/// Triangle count below which the looser [`small_cap`] applies. `0` (default)
|
||||||
/// disables the split, so the flat [`edge_cap`] governs every block.
|
/// disables the split, so the flat [`edge_cap`] governs every block.
|
||||||
fn small_tris() -> usize {
|
fn small_tris() -> usize {
|
||||||
@@ -1273,6 +1350,9 @@ fn anchor_pool_mesh(
|
|||||||
min_vb: usize,
|
min_vb: usize,
|
||||||
) -> Option<GameMesh> {
|
) -> Option<GameMesh> {
|
||||||
let idx_bytes = index_count * 2;
|
let idx_bytes = index_count * 2;
|
||||||
|
// First accepted candidate whose index run still has degenerate triangles —
|
||||||
|
// used only if no clean candidate exists anywhere (see the end of the loop).
|
||||||
|
let mut dirty: Option<(usize, usize)> = None;
|
||||||
for &vb in starts {
|
for &vb in starts {
|
||||||
// Monotone assignment (opt-in): resources of one signature are laid out
|
// Monotone assignment (opt-in): resources of one signature are laid out
|
||||||
// in descriptor order, so a later one may not take an earlier block.
|
// in descriptor order, so a later one may not take an earlier block.
|
||||||
@@ -1293,6 +1373,17 @@ fn anchor_pool_mesh(
|
|||||||
// pad>0 is gated at a strict 0.85 consistency to avoid a false anchor in
|
// pad>0 is gated at a strict 0.85 consistency to avoid a false anchor in
|
||||||
// the ungated (`min_consistency == 0`) stage path — pad 0 keeps its exact
|
// the ungated (`min_consistency == 0`) stage path — pad 0 keeps its exact
|
||||||
// prior behaviour.
|
// prior behaviour.
|
||||||
|
// Do NOT take the first pad that validates. A list read one element late
|
||||||
|
// still validates — every index is in range, the pool is still covered,
|
||||||
|
// and the winding can squeak past 0.70 — but it re-wires every triangle.
|
||||||
|
// The runtime capture caught it (17 draw batches whose captured indices
|
||||||
|
// equal ours shifted by one, all on pad-2 buffers), and the signature is
|
||||||
|
// decidable offline: a shift wires vertices arbitrarily, so triangles come
|
||||||
|
// out DEGENERATE (a repeated index). 282 of 283 correctly anchored
|
||||||
|
// `Stage_S02` blocks have zero degenerate triangles, against 1–2 156 for
|
||||||
|
// their shifted readings. So score every validating pad and keep the
|
||||||
|
// cleanest. See docs/re/structures/xbg7-mesh.md.
|
||||||
|
let mut best: Option<(usize, f32, usize)> = None; // (degenerate, -winding, pad)
|
||||||
for pad in 0..=3usize {
|
for pad in 0..=3usize {
|
||||||
if vb < idx_bytes + pad {
|
if vb < idx_bytes + pad {
|
||||||
continue;
|
continue;
|
||||||
@@ -1310,10 +1401,45 @@ fn anchor_pool_mesh(
|
|||||||
min_consistency.max(0.85)
|
min_consistency.max(0.85)
|
||||||
};
|
};
|
||||||
if validate_block(bytes, ib, vb, vtx_count, index_count, decl, mc, true) {
|
if validate_block(bytes, ib, vb, vtx_count, index_count, decl, mc, true) {
|
||||||
// ── Accepted: read the full mesh. ──
|
if pad_first_match() {
|
||||||
return Some(read_pool_mesh(bytes, ib, vb, index_count, vtx_count, decl));
|
return Some(read_pool_mesh(bytes, ib, vb, index_count, vtx_count, decl));
|
||||||
|
}
|
||||||
|
let (degen, wind) = index_run_quality(bytes, ib, vb, index_count, decl);
|
||||||
|
let cand = (degen, -wind, pad);
|
||||||
|
if best.map_or(true, |b| cand < b) {
|
||||||
|
best = Some(cand);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if let Some((degen, _, pad)) = best {
|
||||||
|
// A candidate whose triangles are degenerate-free is preferred over an
|
||||||
|
// earlier one that is not. This keeps first-match order for every
|
||||||
|
// clean hit (the overwhelming majority) and only searches on when the
|
||||||
|
// first accepted block is provably mis-fitted — the two resources that
|
||||||
|
// survived the pad fix (`e201_bdy_03_m`, `_rou_f402_dead`) each have
|
||||||
|
// exactly ONE degenerate-free block in their container, sitting later
|
||||||
|
// in file order than the lookalike we were taking.
|
||||||
|
if degen == 0 || pad_first_match() {
|
||||||
|
return Some(read_pool_mesh(bytes, vb - idx_bytes - pad, vb, index_count, vtx_count, decl));
|
||||||
|
}
|
||||||
|
if dirty.is_none() {
|
||||||
|
dirty = Some((vb, pad));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// NOT DONE, deliberately: when every validating candidate is degenerate one
|
||||||
|
// could re-scan without the pad-0 winding floor, since degeneracy is the
|
||||||
|
// stronger witness. Written and measured 2026-08-13 — it fires for **nothing**
|
||||||
|
// on the disc. The single remaining dirty resource (`_rou_f402_dead` in
|
||||||
|
// `Stage_S09`) does have a degenerate-free block that validates at
|
||||||
|
// `XBG7_PAD0_CONSISTENCY=0`, but it is CLAIMED by `e_rou_f003_Near`, so
|
||||||
|
// distinct assignment — not the winding floor — is what blocks it. Both are
|
||||||
|
// 24-vertex bounding boxes, i.e. the box-identity class that needs
|
||||||
|
// descriptor-level data rather than another anchoring heuristic (see the docs).
|
||||||
|
// Nothing clean anywhere: keep the first accepted block, so this can never
|
||||||
|
// cost coverage relative to first-match.
|
||||||
|
if let Some((vb, pad)) = dirty {
|
||||||
|
return Some(read_pool_mesh(bytes, vb - idx_bytes - pad, vb, index_count, vtx_count, decl));
|
||||||
}
|
}
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
@@ -1546,25 +1672,27 @@ fn anchor_grouped_meshes(
|
|||||||
data_base: usize,
|
data_base: usize,
|
||||||
starts: &[usize],
|
starts: &[usize],
|
||||||
markers: &[(usize, usize)], // (vtx_count, idx_count) in descriptor/file order
|
markers: &[(usize, usize)], // (vtx_count, idx_count) in descriptor/file order
|
||||||
decl: &VertexDecl,
|
decls: &[VertexDecl], // one per marker — a pool CAN mix strides
|
||||||
taken: &std::collections::HashSet<usize>,
|
taken: &std::collections::HashSet<usize>,
|
||||||
) -> Vec<GameMesh> {
|
) -> Vec<GameMesh> {
|
||||||
let n = markers.len();
|
let n = markers.len();
|
||||||
if n == 0 {
|
if n == 0 || decls.len() < n {
|
||||||
return Vec::new();
|
return Vec::new();
|
||||||
}
|
}
|
||||||
let stride = decl.stride;
|
let decl = &decls[0];
|
||||||
|
|
||||||
// Relative index-buffer offsets (ib0 = 0), 4-byte aligned between buffers,
|
// Relative index-buffer offsets (ib0 = 0), 4-byte aligned between buffers,
|
||||||
// and cumulative vertex offsets (vb0 = 0) — both derived from the marker list.
|
// and cumulative vertex offsets (vb0 = 0) — both derived from the marker list.
|
||||||
let mut rel_ib = Vec::with_capacity(n);
|
let mut rel_ib = Vec::with_capacity(n);
|
||||||
let mut off_v = Vec::with_capacity(n);
|
let mut off_v = Vec::with_capacity(n);
|
||||||
let (mut acc_i, mut acc_v) = (0usize, 0usize);
|
let (mut acc_i, mut acc_v) = (0usize, 0usize);
|
||||||
for &(vc, ic) in markers {
|
for (i, &(vc, ic)) in markers.iter().enumerate() {
|
||||||
rel_ib.push(acc_i);
|
rel_ib.push(acc_i);
|
||||||
off_v.push(acc_v);
|
off_v.push(acc_v);
|
||||||
acc_i = align4(acc_i + ic * 2);
|
acc_i = align4(acc_i + ic * 2);
|
||||||
acc_v += vc * stride;
|
// Each sub-mesh advances by ITS OWN stride: `n201_01` ends with a
|
||||||
|
// stride-28 sub-mesh after three stride-24 ones (capture-confirmed).
|
||||||
|
acc_v += vc * decls[i].stride;
|
||||||
}
|
}
|
||||||
// The index pool spans ib0 .. end-of-last-buffer. The vertex pool that
|
// The index pool spans ib0 .. end-of-last-buffer. The vertex pool that
|
||||||
// follows is **4-byte aligned**, so up to 3 bytes of padding can sit between
|
// follows is **4-byte aligned**, so up to 3 bytes of padding can sit between
|
||||||
@@ -1582,12 +1710,61 @@ fn anchor_grouped_meshes(
|
|||||||
let kmax = (0..n).max_by_key(|&i| markers[i].1).unwrap_or(0);
|
let kmax = (0..n).max_by_key(|&i| markers[i].1).unwrap_or(0);
|
||||||
let (vck, ick) = markers[kmax];
|
let (vck, ick) = markers[kmax];
|
||||||
|
|
||||||
|
// Build the pool at a candidate (vb0, pad). Sub-meshes that fail the
|
||||||
|
// structural requirements (every index inside its own buffer, indices
|
||||||
|
// reaching its end) are skipped, so the returned length says how much of the
|
||||||
|
// declared pool this candidate actually explains — which is what selects
|
||||||
|
// between candidates below.
|
||||||
|
let build = |vb0: usize, pad: usize| -> Vec<GameMesh> {
|
||||||
|
let ib0 = vb0 - span - pad;
|
||||||
|
let mut meshes = Vec::with_capacity(n);
|
||||||
|
let mut vb = vb0;
|
||||||
|
for i in 0..n {
|
||||||
|
let (vc, ic) = markers[i];
|
||||||
|
let ib = ib0 + rel_ib[i];
|
||||||
|
if ib + ic * 2 > bytes.len()
|
||||||
|
|| vc.checked_mul(decls[i].stride).map_or(true, |b| vb + b > bytes.len())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let ok = validate_block(bytes, ib, vb, vc, ic, &decls[i], 0.85, false);
|
||||||
|
if !ok && i > kmax {
|
||||||
|
break; // chain diverged — emit the validated prefix, no garbage
|
||||||
|
}
|
||||||
|
let mut max_idx = 0usize;
|
||||||
|
let in_range = (0..ic).all(|k| {
|
||||||
|
let i = be16(bytes, ib + k * 2) as usize;
|
||||||
|
max_idx = max_idx.max(i);
|
||||||
|
i < vc
|
||||||
|
});
|
||||||
|
if in_range && max_idx + cover_slack() >= vc {
|
||||||
|
meshes.push(read_pool_mesh(bytes, ib, vb, ic, vc, &decls[i]));
|
||||||
|
}
|
||||||
|
vb += vc * decls[i].stride;
|
||||||
|
}
|
||||||
|
meshes
|
||||||
|
};
|
||||||
|
|
||||||
|
// A candidate that explains the WHOLE pool beats one that explains part of it,
|
||||||
|
// however early it sits in file order. `n201_01` is the case that forced this:
|
||||||
|
// a `vb0` **4 bytes before** the capture-proven start also validates for the
|
||||||
|
// pivot (at pad 2) and, being earlier in the scan, used to win — then two of
|
||||||
|
// the four sub-meshes fell out as out-of-range and the resource decoded as a
|
||||||
|
// 2-part fragment 4 bytes off. The proven start explains all four.
|
||||||
|
let mut partial: Option<Vec<GameMesh>> = None;
|
||||||
|
|
||||||
for &vb0 in starts {
|
for &vb0 in starts {
|
||||||
// Distinct assignment: a pool another resource already claimed is not a
|
// Distinct assignment: a pool another resource already claimed is not a
|
||||||
// candidate (see the collision resolution in `anchor_models_filtered`).
|
// candidate (see the collision resolution in `anchor_models_filtered`).
|
||||||
if taken.contains(&vb0) {
|
if taken.contains(&vb0) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// Which pad? Not the first that validates — the same trap the searched
|
||||||
|
// path had until 2026-08-13: a pool read one index element late still
|
||||||
|
// validates but wires every triangle wrongly. Score the pivot's index run
|
||||||
|
// (degenerate triangles first, then winding) and keep the cleanest pad.
|
||||||
|
// `XBG7_PAD_FIRST_MATCH=1` restores first-match here too.
|
||||||
|
let mut best: Option<(usize, f32, usize)> = None;
|
||||||
for pad in 0..=3usize {
|
for pad in 0..=3usize {
|
||||||
if vb0 < span + pad {
|
if vb0 < span + pad {
|
||||||
continue;
|
continue;
|
||||||
@@ -1602,60 +1779,64 @@ fn anchor_grouped_meshes(
|
|||||||
// collapses well below 0.85, so only the true pad/pivot passes.
|
// collapses well below 0.85, so only the true pad/pivot passes.
|
||||||
let ib_k = ib0 + rel_ib[kmax];
|
let ib_k = ib0 + rel_ib[kmax];
|
||||||
let vb_k = vb0 + off_v[kmax];
|
let vb_k = vb0 + off_v[kmax];
|
||||||
if !validate_block(bytes, ib_k, vb_k, vck, ick, decl, grouped_consistency(), true) {
|
if !validate_block(bytes, ib_k, vb_k, vck, ick, &decls[kmax], grouped_consistency(), true) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
let (degen, wind) = index_run_quality(bytes, ib_k, vb_k, ick, &decls[kmax]);
|
||||||
// Pivot confirmed the exact alignment ⇒ every marker up to the pivot
|
let cand = (degen, -wind, pad);
|
||||||
// is correctly placed; read those unconditionally (a legitimately
|
if best.map_or(true, |b| cand < b) {
|
||||||
// tiny/flat lead part may fail the quality gates yet still be real).
|
best = Some(cand);
|
||||||
// Markers after the pivot are validated so a stray trailing marker
|
}
|
||||||
// ends the chain instead of appending garbage.
|
if pad_first_match() {
|
||||||
let mut meshes = Vec::with_capacity(n);
|
break;
|
||||||
let mut vb = vb0;
|
}
|
||||||
for i in 0..n {
|
}
|
||||||
let (vc, ic) = markers[i];
|
if let Some((_, _, pad)) = best {
|
||||||
let ib = ib0 + rel_ib[i];
|
// Pivot confirmed the alignment; how much of the pool does it explain?
|
||||||
if ib + ic * 2 > bytes.len()
|
let meshes = build(vb0, pad);
|
||||||
|| vc.checked_mul(stride).map_or(true, |b| vb + b > bytes.len())
|
if meshes.len() == n {
|
||||||
{
|
return meshes;
|
||||||
break;
|
}
|
||||||
}
|
if partial.as_ref().map_or(true, |p| meshes.len() > p.len()) {
|
||||||
// Parts are placed deterministically; in-range + consistency pins
|
partial = Some(meshes);
|
||||||
// them, so the connectivity heuristic (which mis-rejects small
|
|
||||||
// flat fins) is relaxed here.
|
|
||||||
let ok = validate_block(bytes, ib, vb, vc, ic, decl, 0.85, false);
|
|
||||||
if !ok && i > kmax {
|
|
||||||
break; // chain diverged — emit the validated prefix, no garbage
|
|
||||||
}
|
|
||||||
// Sub-meshes BEFORE the pivot are emitted even when they fail the
|
|
||||||
// quality gates (a tiny flat lead part is legitimately poor), but
|
|
||||||
// an index that addresses past its own vertex buffer is not a
|
|
||||||
// quality question — it is unusable. Measured 2026-08-12: 18
|
|
||||||
// sub-meshes disc-wide carried indices up to 364 vertices past
|
|
||||||
// the end (`coverage_audit`), which any renderer would fault on.
|
|
||||||
// Same two structural requirements the searched path enforces:
|
|
||||||
// every index inside the buffer, and the indices reaching the
|
|
||||||
// end of it. Real geometry covers its pool exactly — 8 586 of
|
|
||||||
// 8 636 decoded sub-meshes reference their last vertex, none
|
|
||||||
// more than 3 short (`coverage_audit`) — so a sub-mesh whose
|
|
||||||
// indices stop well short is reading the wrong block, not a
|
|
||||||
// sparse one.
|
|
||||||
let mut max_idx = 0usize;
|
|
||||||
let in_range = (0..ic).all(|k| {
|
|
||||||
let i = be16(bytes, ib + k * 2) as usize;
|
|
||||||
max_idx = max_idx.max(i);
|
|
||||||
i < vc
|
|
||||||
});
|
|
||||||
if in_range && max_idx + cover_slack() >= vc {
|
|
||||||
meshes.push(read_pool_mesh(bytes, ib, vb, ic, vc, decl));
|
|
||||||
}
|
|
||||||
vb += vc * stride;
|
|
||||||
}
|
}
|
||||||
return meshes;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Vec::new()
|
// No candidate explained the whole pool — keep the best partial one, so this
|
||||||
|
// can never decode less than the previous first-match behaviour.
|
||||||
|
partial.unwrap_or_default()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// How clean is the triangle list at `ib` against the pool at `vb`?
|
||||||
|
///
|
||||||
|
/// Returns `(degenerate triangles, winding agreement)` — the two properties that
|
||||||
|
/// separate a correctly located index run from one read a couple of bytes off.
|
||||||
|
/// A shifted run wires arbitrary vertices, which shows up as **degenerate**
|
||||||
|
/// triangles (a repeated index) and a winding agreement drifting toward the 0.5
|
||||||
|
/// middle; a real block has zero degenerate triangles and agreement ≈1 or ≈0.
|
||||||
|
/// Used by [`anchor_pool_mesh`] to choose between pads that all validate.
|
||||||
|
fn index_run_quality(
|
||||||
|
bytes: &[u8],
|
||||||
|
ib: usize,
|
||||||
|
vb: usize,
|
||||||
|
index_count: usize,
|
||||||
|
decl: &VertexDecl,
|
||||||
|
) -> (usize, f32) {
|
||||||
|
// The pool only needs as many vertices as the run references.
|
||||||
|
let mut max_idx = 0usize;
|
||||||
|
for k in 0..index_count {
|
||||||
|
let at = ib + k * 2;
|
||||||
|
if at + 2 > bytes.len() {
|
||||||
|
return (usize::MAX, 0.0);
|
||||||
|
}
|
||||||
|
max_idx = max_idx.max(be16(bytes, at) as usize);
|
||||||
|
}
|
||||||
|
let m = read_pool_mesh(bytes, ib, vb, index_count, max_idx + 1, decl);
|
||||||
|
if m.normals.is_empty() {
|
||||||
|
return (0, 1.0); // no normals: degeneracy alone decides
|
||||||
|
}
|
||||||
|
let (_, degen, na, _) = topology_report(&m.indices, &m.positions, &m.normals);
|
||||||
|
(degen, na.max(1.0 - na))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Read positions / normals / uvs / indices for an anchored stage block.
|
/// Read positions / normals / uvs / indices for an anchored stage block.
|
||||||
@@ -1708,8 +1889,10 @@ const VERTEX_BUFFER_GAP: usize = 12;
|
|||||||
|
|
||||||
// ── Vertex declaration ───────────────────────────────────────────────────────
|
// ── Vertex declaration ───────────────────────────────────────────────────────
|
||||||
|
|
||||||
/// The vertex layout for one XBG7 resource, parsed from the descriptor's
|
/// The vertex layout of one XBG7 **sub-mesh**, parsed from the element triples
|
||||||
/// declaration table (shared by all its sub-meshes).
|
/// that follow its index marker. A grouped pool may declare a different layout
|
||||||
|
/// per sub-mesh — see [`all_vertex_decls`].
|
||||||
|
#[derive(Clone)]
|
||||||
struct VertexDecl {
|
struct VertexDecl {
|
||||||
/// Bytes per vertex.
|
/// Bytes per vertex.
|
||||||
stride: usize,
|
stride: usize,
|
||||||
@@ -1781,8 +1964,51 @@ fn all_index_markers(desc: &[u8]) -> Vec<(usize, usize)> {
|
|||||||
out
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Every sub-mesh's OWN declaration, in file order.
|
||||||
|
///
|
||||||
|
/// A grouped pool is **not** one declaration repeated: each index marker is
|
||||||
|
/// followed by its own element triples, and they can differ. `n201_01`
|
||||||
|
/// (`Stage_S02.xpr`) declares strides 24, 24, 24 and **28** — the last sub-mesh
|
||||||
|
/// has a fourth element — which a 2026-08-13 runtime capture confirms
|
||||||
|
/// (`stride=28` on that draw, and a different vertex shader for each sub-mesh).
|
||||||
|
/// Reading the first declaration for the whole pool walks the last buffer out of
|
||||||
|
/// phase and the resource is declined; see docs/re/structures/xbg7-mesh.md.
|
||||||
|
fn all_vertex_decls(desc: &[u8]) -> Vec<VertexDecl> {
|
||||||
|
let mut out = Vec::new();
|
||||||
|
let mut rel = 0usize;
|
||||||
|
while rel + 8 <= desc.len() {
|
||||||
|
let a = be32(desc, rel);
|
||||||
|
let c = be32(desc, rel + 4);
|
||||||
|
if c >= 3 && c % 3 == 0 && c < 400_000 && a == c * 2 && rel >= 32 {
|
||||||
|
let vc = be32(desc, rel - 32) as usize;
|
||||||
|
if (3..=200_000).contains(&vc) {
|
||||||
|
match parse_decl_at(desc, rel + 8) {
|
||||||
|
Some(d) => out.push(d),
|
||||||
|
// Keep the positions aligned with `all_index_markers`: a
|
||||||
|
// marker whose declaration will not parse still occupies a
|
||||||
|
// slot, so fall back to the resource's first declaration.
|
||||||
|
None => match out.first() {
|
||||||
|
Some(d) => out.push(d.clone()),
|
||||||
|
None => return Vec::new(),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
rel += 8;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
rel += 4;
|
||||||
|
}
|
||||||
|
out
|
||||||
|
}
|
||||||
|
|
||||||
fn parse_vertex_decl(desc: &[u8]) -> Option<VertexDecl> {
|
fn parse_vertex_decl(desc: &[u8]) -> Option<VertexDecl> {
|
||||||
let mk = find_index_marker(desc)?.0;
|
let mk = find_index_marker(desc)?.0;
|
||||||
|
parse_decl_at(desc, mk + 8)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Parse the element triples that start at `at` (just past an index marker).
|
||||||
|
fn parse_decl_at(desc: &[u8], at: usize) -> Option<VertexDecl> {
|
||||||
|
let mk = at.checked_sub(8)?;
|
||||||
|
|
||||||
// Read declaration triples.
|
// Read declaration triples.
|
||||||
let mut elems: Vec<(usize, u32, u32)> = Vec::new(); // (offset, code, usage)
|
let mut elems: Vec<(usize, u32, u32)> = Vec::new(); // (offset, code, usage)
|
||||||
|
|||||||
@@ -49,6 +49,33 @@ pub struct CapturedDraw {
|
|||||||
/// First few LOCAL vertex positions dumped with the draw (buffer order).
|
/// First few LOCAL vertex positions dumped with the draw (buffer order).
|
||||||
/// Used to disambiguate same-vcount twins (mirrored port/starboard parts).
|
/// Used to disambiguate same-vcount twins (mirrored port/starboard parts).
|
||||||
pub pos: Vec<[f32; 3]>,
|
pub pos: Vec<[f32; 3]>,
|
||||||
|
/// The draw's INDEX buffer, when the capture recorded one (`ib base=…`,
|
||||||
|
/// added 2026-08-13): guest base address, index count, and the min/max index
|
||||||
|
/// value the emulator read out of guest memory. `None` for older logs and
|
||||||
|
/// for auto-index draws. This is ground truth for two things the offline
|
||||||
|
/// decoder can only assume — where a block's index buffer lives relative to
|
||||||
|
/// its vertex buffer, and how much of the vertex pool a draw really covers.
|
||||||
|
pub ib: Option<CapturedIndexBuffer>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The index buffer a captured draw used. See [`CapturedDraw::ib`].
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
|
||||||
|
pub struct CapturedIndexBuffer {
|
||||||
|
/// Guest base address of the index data.
|
||||||
|
pub ibase: u32,
|
||||||
|
/// Number of indices the draw issued (== `VGT_DRAW_INITIATOR.num_indices`).
|
||||||
|
pub icount: u32,
|
||||||
|
/// Lowest index value in the buffer.
|
||||||
|
pub imin: u32,
|
||||||
|
/// Highest index value in the buffer — with `vcount` this says whether the
|
||||||
|
/// draw covers its whole vertex pool or only a sub-range.
|
||||||
|
pub imax: u32,
|
||||||
|
/// The first indices, verbatim (the capture prints up to 24). Byte-level
|
||||||
|
/// ground truth for the offline index decode: a matched block's decoded
|
||||||
|
/// index prefix must equal this run.
|
||||||
|
pub head: [u32; 24],
|
||||||
|
/// How many of `head` the capture actually carried.
|
||||||
|
pub head_len: u8,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A ship part to match against the capture. `part` is the **base** part name
|
/// A ship part to match against the capture. `part` is the **base** part name
|
||||||
@@ -100,13 +127,16 @@ pub fn parse_capture(text: &str) -> Vec<CapturedDraw> {
|
|||||||
let mut vcount = 0u32;
|
let mut vcount = 0u32;
|
||||||
let mut pos: Vec<[f32; 3]> = Vec::new();
|
let mut pos: Vec<[f32; 3]> = Vec::new();
|
||||||
let mut consts: Vec<(usize, [f64; 4])> = Vec::new();
|
let mut consts: Vec<(usize, [f64; 4])> = Vec::new();
|
||||||
|
let mut ib: Option<CapturedIndexBuffer> = None;
|
||||||
|
|
||||||
let flush = |vbase: u32,
|
let flush = |vbase: u32,
|
||||||
vcount: u32,
|
vcount: u32,
|
||||||
pos: &mut Vec<[f32; 3]>,
|
pos: &mut Vec<[f32; 3]>,
|
||||||
|
ib: &mut Option<CapturedIndexBuffer>,
|
||||||
consts: &[(usize, [f64; 4])],
|
consts: &[(usize, [f64; 4])],
|
||||||
out: &mut Vec<CapturedDraw>| {
|
out: &mut Vec<CapturedDraw>| {
|
||||||
let pos = std::mem::take(pos);
|
let pos = std::mem::take(pos);
|
||||||
|
let ib = ib.take();
|
||||||
if vbase == 0 {
|
if vbase == 0 {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -115,18 +145,47 @@ pub fn parse_capture(text: &str) -> Vec<CapturedDraw> {
|
|||||||
return; // no WorldView for this draw — skip it
|
return; // no WorldView for this draw — skip it
|
||||||
};
|
};
|
||||||
if let Some((r, t)) = normalize_wvp([c0, c1, c2]) {
|
if let Some((r, t)) = normalize_wvp([c0, c1, c2]) {
|
||||||
out.push(CapturedDraw { vbase, vcount, r, t, pos });
|
out.push(CapturedDraw { vbase, vcount, r, t, pos, ib });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
for line in text.lines() {
|
for line in text.lines() {
|
||||||
let l = line.trim();
|
let l = line.trim();
|
||||||
if let Some(rest) = l.strip_prefix("DRAW ") {
|
if let Some(rest) = l.strip_prefix("DRAW ") {
|
||||||
flush(vbase, vcount, &mut pos, &consts, &mut out);
|
flush(vbase, vcount, &mut pos, &mut ib, &consts, &mut out);
|
||||||
consts.clear();
|
consts.clear();
|
||||||
let f = |k: &str| rest.split_whitespace().find_map(|t| t.strip_prefix(k));
|
let f = |k: &str| rest.split_whitespace().find_map(|t| t.strip_prefix(k));
|
||||||
vbase = f("vbase=0x").and_then(|s| u32::from_str_radix(s, 16).ok()).unwrap_or(0);
|
vbase = f("vbase=0x").and_then(|s| u32::from_str_radix(s, 16).ok()).unwrap_or(0);
|
||||||
vcount = f("vcount=").and_then(|s| s.parse().ok()).unwrap_or(0);
|
vcount = f("vcount=").and_then(|s| s.parse().ok()).unwrap_or(0);
|
||||||
|
} else if let Some(rest) = l.strip_prefix("ib base=0x") {
|
||||||
|
// `ib base=0x… count=N fmt=u16 endian=E len=L delta_vb=D min=a max=b idx: …`
|
||||||
|
let f = |k: &str| rest.split_whitespace().find_map(|t| t.strip_prefix(k));
|
||||||
|
let base = rest
|
||||||
|
.split_whitespace()
|
||||||
|
.next()
|
||||||
|
.and_then(|s| u32::from_str_radix(s, 16).ok());
|
||||||
|
if let (Some(ibase), Some(icount)) = (base, f("count=").and_then(|s| s.parse().ok())) {
|
||||||
|
let mut head = [0u32; 24];
|
||||||
|
let mut head_len = 0u8;
|
||||||
|
if let Some((_, list)) = l.split_once("idx:") {
|
||||||
|
for tok in list.split_whitespace() {
|
||||||
|
let Ok(v) = tok.parse::<u32>() else { break };
|
||||||
|
if head_len as usize >= head.len() {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
head[head_len as usize] = v;
|
||||||
|
head_len += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ib = Some(CapturedIndexBuffer {
|
||||||
|
ibase,
|
||||||
|
icount,
|
||||||
|
imin: f("min=").and_then(|s| s.parse().ok()).unwrap_or(0),
|
||||||
|
imax: f("max=").and_then(|s| s.parse().ok()).unwrap_or(0),
|
||||||
|
head,
|
||||||
|
head_len,
|
||||||
|
});
|
||||||
|
}
|
||||||
} else if l.starts_with("pos:") || l.starts_with("positions:") {
|
} else if l.starts_with("pos:") || l.starts_with("positions:") {
|
||||||
pos = parse_pos_line(l, 8);
|
pos = parse_pos_line(l, 8);
|
||||||
} else if l.starts_with("vsconst") {
|
} else if l.starts_with("vsconst") {
|
||||||
@@ -147,7 +206,7 @@ pub fn parse_capture(text: &str) -> Vec<CapturedDraw> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
flush(vbase, vcount, &mut pos, &consts, &mut out);
|
flush(vbase, vcount, &mut pos, &mut ib, &consts, &mut out);
|
||||||
out
|
out
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,7 +301,9 @@ pub fn parse_drawlog(text: &str) -> Vec<CapturedDraw> {
|
|||||||
let get = |i: usize| consts.iter().find(|(k, _)| *k == i).map(|(_, v)| *v);
|
let get = |i: usize| consts.iter().find(|(k, _)| *k == i).map(|(_, v)| *v);
|
||||||
let (Some(c0), Some(c1), Some(c2)) = (get(0), get(1), get(2)) else { return };
|
let (Some(c0), Some(c1), Some(c2)) = (get(0), get(1), get(2)) else { return };
|
||||||
if let Some((r, t)) = normalize_wvp([c0, c1, c2]) {
|
if let Some((r, t)) = normalize_wvp([c0, c1, c2]) {
|
||||||
out.push(CapturedDraw { vbase: base, vcount: size / stride, r, t, pos });
|
// The draw-logger format carries an index base too, but it de-dups
|
||||||
|
// by vertex declaration, so it never lines up per part — left None.
|
||||||
|
out.push(CapturedDraw { vbase: base, vcount: size / stride, r, t, pos, ib: None });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -424,3 +424,59 @@ fn stage_models_quality_audit() {
|
|||||||
assert!(huge < models.len() / 20, "few huge (skybox-plane) models");
|
assert!(huge < models.len() / 20, "few huge (skybox-plane) models");
|
||||||
assert!(worst_deg < 0.35, "no model should be mostly-degenerate");
|
assert!(worst_deg < 0.35, "no model should be mostly-degenerate");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A correctly located index run has **no degenerate triangles**. That is the
|
||||||
|
/// signature the 2026-08-13 pad-scoring fix keys on: an index list read one
|
||||||
|
/// element late still passes every count-based gate but wires arbitrary
|
||||||
|
/// vertices, which produces triangles with a repeated index. Before the fix
|
||||||
|
/// **579** decoded runs on the disc carried such triangles (and a runtime
|
||||||
|
/// capture confirmed 17 of 93 index batches disagreed with the GPU); after it and
|
||||||
|
/// the two follow-ups (pad scoring in the grouped path, and preferring a
|
||||||
|
/// degenerate-free candidate over an earlier dirty one), exactly **one** does.
|
||||||
|
/// Locking the
|
||||||
|
/// number in, because the defect is invisible to coverage and to the anchor
|
||||||
|
/// oracle: every count stays correct while the geometry is mis-wired.
|
||||||
|
#[test]
|
||||||
|
#[ignore = "requires extracted disc models — set SYLPHEED_RES3D"]
|
||||||
|
fn decoded_index_runs_have_almost_no_degenerate_triangles() {
|
||||||
|
let Some(dir) = res3d_dir() else {
|
||||||
|
eprintln!("SKIP: resource3d dir not found (set SYLPHEED_RES3D)");
|
||||||
|
return;
|
||||||
|
};
|
||||||
|
let mut files: Vec<PathBuf> = std::fs::read_dir(&dir)
|
||||||
|
.expect("resource3d/")
|
||||||
|
.flatten()
|
||||||
|
.map(|e| e.path())
|
||||||
|
.filter(|p| p.extension().and_then(|s| s.to_str()) == Some("xpr"))
|
||||||
|
.collect();
|
||||||
|
files.sort();
|
||||||
|
|
||||||
|
let mut offenders: Vec<(String, String, usize)> = Vec::new();
|
||||||
|
for f in &files {
|
||||||
|
let Ok(bytes) = std::fs::read(f) else { continue };
|
||||||
|
let where_ = f.file_name().unwrap().to_string_lossy().to_string();
|
||||||
|
for m in Xbg7Model::stage_models(&bytes) {
|
||||||
|
for sm in &m.meshes {
|
||||||
|
let d = sm
|
||||||
|
.indices
|
||||||
|
.chunks_exact(3)
|
||||||
|
.filter(|t| t[0] == t[1] || t[1] == t[2] || t[0] == t[2])
|
||||||
|
.count();
|
||||||
|
if d > 0 {
|
||||||
|
offenders.push((m.name.clone(), where_.clone(), d));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// The one at default settings: `_rou_f402_dead` in `Stage_S09`, whose
|
||||||
|
// degenerate-free block is claimed by `e_rou_f003_Near` — both 24-vertex
|
||||||
|
// bounding boxes, the identity class that needs descriptor-level data. (With
|
||||||
|
// `XBG7_SUBMESH_DECLS=1` four newly decoded `ptc_pack` `.dat` composites join
|
||||||
|
// it; that knob is off by default.) Anything else here is a regression.
|
||||||
|
assert!(
|
||||||
|
offenders.len() <= 1,
|
||||||
|
"{} decoded index runs contain degenerate triangles (expected ≤ 1): {:?}",
|
||||||
|
offenders.len(),
|
||||||
|
&offenders[..offenders.len().min(20)]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Promote to a prose `structures/…md` file when a format needs behavioural notes
|
|||||||
| LSTA sprite list | ✅ | `sylpheed-formats/src/lsta.rs` | A display list of inline elements: **T8aD sprites and `PRMD` primitives**. The `count` at `0x04` is **exact and counts both** — `count == T8aD + PRMD` for **64/64** lists on the disc, which retires the old "a few entries disagree" note (it compared sprites against a total including primitives). **All 1 281 sprite frames decode** after the T8aD rectangle-list fix |
|
| LSTA sprite list | ✅ | `sylpheed-formats/src/lsta.rs` | A display list of inline elements: **T8aD sprites and `PRMD` primitives**. The `count` at `0x04` is **exact and counts both** — `count == T8aD + PRMD` for **64/64** lists on the disc, which retires the old "a few entries disagree" note (it compared sprites against a total including primitives). **All 1 281 sprite frames decode** after the T8aD rectangle-list fix |
|
||||||
| IXUD subtitle | 🟡/✅ | `sylpheed-formats/src/ixud.rs` + [movie link](movie-subtitle-link.md) | timed cues. **The movie↔subtitle↔voice link is solved — statically**, from the movie config record in `tables.pak` (schema `0x067025b9`), not from the running game as this row previously assumed: [101 movies mapped](captures/movie-subtitle-voice-map.csv), 94 with subtitles, 83 with voice, 21 with a telop overlay. 93 of 94 subtitle refs resolve in the language paks; **`SUBTITLE_S12B.tbl` is missing from all six languages** — a dangling reference on the disc. Naming is `SUBTITLE_<base>.tbl` / `VOICE_<base>` with six documented exceptions. The record's ~104 **script ids** are ❔ — positional pairing drifts by three because the IDXD pool dedupes repeated values |
|
| IXUD subtitle | 🟡/✅ | `sylpheed-formats/src/ixud.rs` + [movie link](movie-subtitle-link.md) | timed cues. **The movie↔subtitle↔voice link is solved — statically**, from the movie config record in `tables.pak` (schema `0x067025b9`), not from the running game as this row previously assumed: [101 movies mapped](captures/movie-subtitle-voice-map.csv), 94 with subtitles, 83 with voice, 21 with a telop overlay. 93 of 94 subtitle refs resolve in the language paks; **`SUBTITLE_S12B.tbl` is missing from all six languages** — a dangling reference on the disc. Naming is `SUBTITLE_<base>.tbl` / `VOICE_<base>` with six documented exceptions. The record's ~104 **script ids** are ❔ — positional pairing drifts by three because the IDXD pool dedupes repeated values |
|
||||||
| Fonts (ttf/otf/ttc) | ✅ | `sylpheed-formats/src/font.rs` | standard OpenType, parsed via ttf-parser |
|
| Fonts (ttf/otf/ttc) | ✅ | `sylpheed-formats/src/font.rs` | standard OpenType, parsed via ttf-parser |
|
||||||
| XBG7 mesh | ✅/🟡 | `sylpheed-formats/src/mesh.rs` + `tests/mesh_disc.rs` ([xbg7](structures/xbg7-mesh.md)) | **6 294 resources, 6 209 decode (98.7 %), 82 searched-and-missed** (2026-08-12, up from 5 480 / 87.1 %). Five evidence-driven fixes got there: **distinct anchor assignment** (no two resources may claim one buffer — proved by a capture showing the container holds both mirrored `e106` hull halves), the connectivity cap replaced by a **winding-consistency gate at 0.70**, **structural requirements on pre-pivot sub-meshes** (index range, then exact pool coverage), and **filtering after the assignment** so a subset query cannot differ from the full decode. Validated against a runtime capture that names the file offset of every buffer the engine drew: **46/46 drawn buffers claimed, 45 anchored exactly**. **No real mesh now decodes differently in different containers** — all 89 remaining cross-container disagreements are interchangeable 24-vertex bounding boxes, which no anchoring rule can pin (monotone order re-tested and refuted). Remaining misses attribute to the degeneracy/extent gate (42), winding (31) and coverage (9); the first was probed and its "obvious" fix refuted. Every decoded sub-mesh covers its own vertex pool |
|
| XBG7 mesh | ✅/🟡 | `sylpheed-formats/src/mesh.rs` + `tests/mesh_disc.rs` ([xbg7](structures/xbg7-mesh.md)) | **6 294 resources, 6 209 decode (98.7 %), 82 searched-and-missed** (2026-08-12, up from 5 480 / 87.1 %). Five evidence-driven fixes got there: **distinct anchor assignment** (no two resources may claim one buffer — proved by a capture showing the container holds both mirrored `e106` hull halves), the connectivity cap replaced by a **winding-consistency gate at 0.70**, **structural requirements on pre-pivot sub-meshes** (index range, then exact pool coverage), and **filtering after the assignment** so a subset query cannot differ from the full decode. Validated against a runtime capture that names the file offset of every buffer the engine drew: **46/46 drawn buffers claimed, 45 anchored exactly**. **No real mesh now decodes differently in different containers** — all 89 remaining cross-container disagreements are interchangeable 24-vertex bounding boxes, which no anchoring rule can pin (monotone order re-tested and refuted). Remaining misses attribute to the degeneracy/extent gate (42), winding (31) and coverage (9); the first was probed and its "obvious" fix refuted. Every decoded sub-mesh covers its own vertex pool. **The `[index buffer][vertex buffer]` layout is now runtime-verified** (2026-08-13): with the F10 capture extended to log each draw's index buffer, all **42** drawn `Stage_S02` buffers match our decoded index count exactly, all 42 have their index union cover the pool exactly, and the 30 single-block cases all sit at `pad ≤ 3` — so `e106_eng_02_l`'s old rejection was the connectivity gate, not a misplaced index buffer. The `indices=` mystery was the capture keeping only the **first of several index batches** per buffer. **And comparing index VALUES found the biggest silent defect yet**: the anchor took the first `pad` that validated, so a block whose index data sits at pad 2 was read **one element late** — 76/93 captured runs matched, all 17 differences a one-element shift. Scoring pads by degenerate triangles + winding fixes it: **93/93** captured runs now match byte for byte, disc-wide degenerate runs **582 → 1** (the grouped path had the same bug; and two resources were anchored on a degenerate lookalike earlier in file order), **590 of 8 850** sub-meshes re-wired with 10 vertex anchors moved, resources decoded unchanged at 6 209. Cross-container minority decodes 89 → 96 — *because* the decoder improved: `_rou_f402_dead` now has a majority (32×25×8) so its seven wrong copies are named instead of hidden. One dirty run remains, blocked by distinct assignment on a 24-vertex box. **Then the descriptor gave up its last structural secret**: it declares a vertex layout **per sub-mesh** (`n201_01` → strides 24/24/24/**28**, capture-confirmed), and grouped selection must prefer the candidate explaining the **whole** pool rather than the first whose pivot validates — together they take never-decoding resources **85 → 47** (**6 247 / 6 294 = 99.25 %** decode), put `n201_01` on all four capture-proven offsets and raise the stage-05 capture oracle to **128/128**. The residual 47 is 30 pose/proxy composites (0.010-unit marker boxes), 6 `.DAT` particle composites, 8 damage/LOD variants and 3 props — not a threshold away |
|
||||||
| Capital-ship part placement | ✅ | `sylpheed-formats/src/ship.rs` (static) + [runtime capture](ship-placement-runtime-capture.md) | Placement is **sound** (hull static-exact against the `e106` capture; cross-id mounting genuinely narrow, 2 pairs across 335 ships). The XBG7 mis-decode this row used to blame for "ships assemble wrong" — a shared turret ~100× too large in some containers — is **fixed** (2026-08-12, the exact-coverage requirement): `e303_wep_01` now decodes 49×23×42 everywhere and places at ±179 on the `e106` hull, and no real mesh disagrees across containers. A composite-node audit confirmed the assembler itself never applied a bad scale (all nodes scale 1.0, orthonormal). Still open: `static_assembly_matches_runtime_capture` walks capture parts only, so **extra** static placements cannot fail it |
|
| Capital-ship part placement | ✅ | `sylpheed-formats/src/ship.rs` (static) + [runtime capture](ship-placement-runtime-capture.md) | Placement is **sound** (hull static-exact against the `e106` capture; cross-id mounting genuinely narrow, 2 pairs across 335 ships). The XBG7 mis-decode this row used to blame for "ships assemble wrong" — a shared turret ~100× too large in some containers — is **fixed** (2026-08-12, the exact-coverage requirement): `e303_wep_01` now decodes 49×23×42 everywhere and places at ±179 on the `e106` hull, and no real mesh disagrees across containers. A composite-node audit confirmed the assembler itself never applied a bad scale (all nodes scale 1.0, orthonormal). Still open: `static_assembly_matches_runtime_capture` walks capture parts only, so **extra** static placements cannot fail it |
|
||||||
| Weapon fields defaulted on disc | ✅ | [runtime struct](structures/weapon-struct-runtime.md) · [DATA SHEET route](weapon-datasheet-runtime.md) | **Solved.** Canary maps guest RAM into `/dev/shm`, so the parsed `Weapon`/`Shell` objects are readable live; their layout is solved against disc ground truth (zero contradictions over 100+ records). All 126 weapons, exact numbers, no story progress needed — [4 393 values](captures/weapon-runtime-fields.csv) the disc does not carry. Supersedes the letter-bucket limit of the DATA SHEET route, which now serves as the independent cross-check |
|
| Weapon fields defaulted on disc | ✅ | [runtime struct](structures/weapon-struct-runtime.md) · [DATA SHEET route](weapon-datasheet-runtime.md) | **Solved.** Canary maps guest RAM into `/dev/shm`, so the parsed `Weapon`/`Shell` objects are readable live; their layout is solved against disc ground truth (zero contradictions over 100+ records). All 126 weapons, exact numbers, no story progress needed — [4 393 values](captures/weapon-runtime-fields.csv) the disc does not carry. Supersedes the letter-bucket limit of the DATA SHEET route, which now serves as the independent cross-check |
|
||||||
| Unit (craft/vessel) fields defaulted on disc | ✅/🟡 | [runtime struct](structures/unit-struct-runtime.md) | The parsed `unit\UN_*.tbl` definition object, vtable `0x820af844`, ≥`0x380` bytes, one per unit — **discovered, not assumed** (`unit_discover.py`), and distinguished from the spawned-entity class `0x820af030` by being one-per-ID and byte-constant within a run. Across runs only pointer words move — `--crosscheck` proves **no reported field offset is run-dependent** (two words, `+0x2c8`/`+0x2d0`, are stage-dependent and remain unidentified). 27 fields ✅ (21 units, 7 runs); the `Maneuver` block is **schema declaration order, 4 bytes/field, base `0x9c` with a two-slot gap after `AA_Roll_Min`** (29 anchors, 0 conflicts), which also pins 5 fields *no* disc record ever values. Angles are **radians at runtime, degrees on disc**. **Re-derived independently 2026-08-13 from the loader's own key strings** (`sub_82341A20`; the field name for each store is a string in the image): **159 fields**, agreeing with this solver on **25 of 25 shared offsets**, verified at **406 values matching the disc and 0 disagreeing** over 11 live objects spanning UNIT and VESSEL — landed as `data/unit_definition_layout.txt` + `sylpheed_formats::unit_layout` + a no-emulator test, with **121 defaulted fields** read out ([live-unit-definitions](live-unit-definitions.md)). Unlike weapons, unit definitions are instantiated **per stage**, so coverage (21/110) grows by visiting missions — but a defaulted field is **not** a global constant: `Size_Y` provably inherits `Size_X` (7 independent units, 6 distinct values), and three more sibling rules are recorded ❔, recovering 65 values in units never visited — [values](captures/unit-runtime-fields.csv) |
|
| Unit (craft/vessel) fields defaulted on disc | ✅/🟡 | [runtime struct](structures/unit-struct-runtime.md) | The parsed `unit\UN_*.tbl` definition object, vtable `0x820af844`, ≥`0x380` bytes, one per unit — **discovered, not assumed** (`unit_discover.py`), and distinguished from the spawned-entity class `0x820af030` by being one-per-ID and byte-constant within a run. Across runs only pointer words move — `--crosscheck` proves **no reported field offset is run-dependent** (two words, `+0x2c8`/`+0x2d0`, are stage-dependent and remain unidentified). 27 fields ✅ (21 units, 7 runs); the `Maneuver` block is **schema declaration order, 4 bytes/field, base `0x9c` with a two-slot gap after `AA_Roll_Min`** (29 anchors, 0 conflicts), which also pins 5 fields *no* disc record ever values. Angles are **radians at runtime, degrees on disc**. **Re-derived independently 2026-08-13 from the loader's own key strings** (`sub_82341A20`; the field name for each store is a string in the image): **159 fields**, agreeing with this solver on **25 of 25 shared offsets**, verified at **406 values matching the disc and 0 disagreeing** over 11 live objects spanning UNIT and VESSEL — landed as `data/unit_definition_layout.txt` + `sylpheed_formats::unit_layout` + a no-emulator test, with **121 defaulted fields** read out ([live-unit-definitions](live-unit-definitions.md)). Unlike weapons, unit definitions are instantiated **per stage**, so coverage (21/110) grows by visiting missions — but a defaulted field is **not** a global constant: `Size_Y` provably inherits `Size_X` (7 independent units, 6 distinct values), and three more sibling rules are recorded ❔, recovering 65 values in units never visited — [values](captures/unit-runtime-fields.csv) |
|
||||||
@@ -36,6 +36,7 @@ Promote to a prose `structures/…md` file when a format needs behavioural notes
|
|||||||
| Live entity state, anchored on the definition | ✅ | [`tools/re-capture/own_state.py`](../../tools/re-capture/own_state.py) · [autopilot](autopilot-memory-driven.md) | An undamaged craft holds its definition's own numbers, so a *solved definition field* locates the matching live field without a value scan: definition `HP` (1500) → **hull at `position+0x154`**, confirmed by a trace across a death (30/60/90 per hit, negative at 0). Reusable for any live counter whose maximum the definition carries |
|
| Live entity state, anchored on the definition | ✅ | [`tools/re-capture/own_state.py`](../../tools/re-capture/own_state.py) · [autopilot](autopilot-memory-driven.md) | An undamaged craft holds its definition's own numbers, so a *solved definition field* locates the matching live field without a value scan: definition `HP` (1500) → **hull at `position+0x154`**, confirmed by a trace across a death (30/60/90 per hit, negative at 0). Reusable for any live counter whose maximum the definition carries |
|
||||||
| Mission / escort state, every entity's hull | ✅ | [`tools/re-capture/mission_state.py`](../../tools/re-capture/mission_state.py) · [escort state](mission-escort-state.md) | `hull = position + 0x154` is a property of the **entity class**, not of the player object: at t=0 it equals each entity's own definition `HP` across 7 classes and 5 distinct HP values (turret 100, fighter 500, destroyer 10000, cruiser 30000, **ACROPOLIS 25000**), falls under fire (780 damage events in 240 s), goes negative at death, and the object then leaves the heap. So an escort objective is scoreable live — `UN_f101_TCAF_Acropolis` measured at 25000 → 23038 over 240 s, attack starting only at t≈170 s. `REMAINING OB` counts objectives, not hostiles (012 on the HUD vs 118 live ADAN); its address is still ❔ |
|
| Mission / escort state, every entity's hull | ✅ | [`tools/re-capture/mission_state.py`](../../tools/re-capture/mission_state.py) · [escort state](mission-escort-state.md) | `hull = position + 0x154` is a property of the **entity class**, not of the player object: at t=0 it equals each entity's own definition `HP` across 7 classes and 5 distinct HP values (turret 100, fighter 500, destroyer 10000, cruiser 30000, **ACROPOLIS 25000**), falls under fire (780 damage events in 240 s), goes negative at death, and the object then leaves the heap. So an escort objective is scoreable live — `UN_f101_TCAF_Acropolis` measured at 25000 → 23038 over 240 s, attack starting only at t≈170 s. `REMAINING OB` counts objectives, not hostiles (012 on the HUD vs 118 live ADAN); its address is still ❔ |
|
||||||
| In-flight control mapping | ✅/🟡 | [`tools/re-capture/fire_probe.sh`](../../tools/re-capture/fire_probe.sh) · [controls](flight-controls-runtime.md) | Measured by holding each pad input and photographing the HUD ammo counters: **`RB` = nose gun** (6000→5956 in 4 s, ~11 rounds/s, HEAT rises), **`Y` = main mount** (missiles, 300→299), d-pad = **tactical map** overlay, nothing else moves a counter. No target-cycle input exists — the `TARGET` marker is present with nothing pressed, so targeting is automatic and a missile lock is **time-on-target**. That, not target choice or ballistics, is what caps lethality at 2 kills per 98 missiles |
|
| In-flight control mapping | ✅/🟡 | [`tools/re-capture/fire_probe.sh`](../../tools/re-capture/fire_probe.sh) · [controls](flight-controls-runtime.md) | Measured by holding each pad input and photographing the HUD ammo counters: **`RB` = nose gun** (6000→5956 in 4 s, ~11 rounds/s, HEAT rises), **`Y` = main mount** (missiles, 300→299), d-pad = **tactical map** overlay, nothing else moves a counter. No target-cycle input exists — the `TARGET` marker is present with nothing pressed, so targeting is automatic and a missile lock is **time-on-target**. That, not target choice or ballistics, is what caps lethality at 2 kills per 98 missiles |
|
||||||
|
| Throttle → speed law | ✅/🟡 | [flight-speed-law](flight-speed-law.md) | **The throttle selects a TARGET SPEED**, it does not add thrust: no input settles at ~420 (`CruisingVelocity` 350), `RT` at ~1 530 (`MaximumVelocity` 1200), `LT` at ~125 (`MinimumVelocity` 100), and releasing either returns to cruise. `Acceleration`/`Deceleration` govern the convergence rate (measured ~440–560 units/s² against 500/600). 🟡 measured world speeds run ≈1.2–1.3× the definition numbers while the HUD shows the definition value exactly, so world units are a constant (~1.25) multiple of the definition's velocity unit |
|
||||||
| Input → dynamics calibration | ✅ | [`tools/re-capture/ctrl_probe.py`](../../tools/re-capture/ctrl_probe.py) · [`binq.py`](../../tools/re-capture/binq.py) | Hold each pad input in turn and measure the craft's speed as displacement/s of its own position triple — no speed field needed first. Settled the throttle: **`RT` accelerates, `LT` brakes, and the setting persists** (488 → 1510 → 174 units/s), overturning an earlier field-scan conclusion |
|
| Input → dynamics calibration | ✅ | [`tools/re-capture/ctrl_probe.py`](../../tools/re-capture/ctrl_probe.py) · [`binq.py`](../../tools/re-capture/binq.py) | Hold each pad input in turn and measure the craft's speed as displacement/s of its own position triple — no speed field needed first. Settled the throttle: **`RT` accelerates, `LT` brakes, and the setting persists** (488 → 1510 → 174 units/s), overturning an earlier field-scan conclusion |
|
||||||
|
|
||||||
## Functions / code paths
|
## Functions / code paths
|
||||||
|
|||||||
BIN
docs/re/captures/f101-index-shift-before-after.png
Normal file
BIN
docs/re/captures/f101-index-shift-before-after.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 45 KiB |
314
docs/re/captures/pitch-gametime.csv
Normal file
314
docs/re/captures/pitch-gametime.csv
Normal file
@@ -0,0 +1,314 @@
|
|||||||
|
phase,t,fx,fy,fz
|
||||||
|
slow,0.022,-0.9999999999976801,-5.364418029772711e-07,-2.0861625671338324e-06
|
||||||
|
slow,0.072,-0.9999999999976801,-5.364418029772711e-07,-2.0861625671338324e-06
|
||||||
|
slow,0.138,-0.9999999999976801,-5.364418029772711e-07,-2.0861625671338324e-06
|
||||||
|
slow,0.188,-0.9999999999976801,-5.364418029772711e-07,-2.0861625671338324e-06
|
||||||
|
slow,0.238,-0.9999996503301273,-0.000739351008976433,0.00039076810084039696
|
||||||
|
slow,0.288,-0.9995667500505145,-0.025989011351613873,0.013816058859813869
|
||||||
|
slow,0.338,-0.9991424233572718,-0.03655991231151712,0.01943683769373226
|
||||||
|
slow,0.388,-0.9974614922372212,-0.06287386978474002,0.03342825155743701
|
||||||
|
slow,0.441,-0.9974614922372212,-0.06287386978474002,0.03342825155743701
|
||||||
|
slow,0.491,-0.9974614922372212,-0.06287386978474002,0.03342825155743701
|
||||||
|
slow,0.542,-0.9974614922372212,-0.06287386978474002,0.03342825155743701
|
||||||
|
slow,0.592,-0.9756937705208446,-0.19348862930198532,0.10287767735352636
|
||||||
|
slow,0.642,-0.9599895265779043,-0.24725777991348272,0.13146748317735063
|
||||||
|
slow,0.692,-0.9065968643570531,-0.3726025922234667,0.19811469861247516
|
||||||
|
slow,0.742,-0.8880690175394421,-0.405900585102419,0.215819681910719
|
||||||
|
slow,0.792,-0.8231976038572328,-0.5012983450542031,0.2665439443124295
|
||||||
|
slow,0.845,-0.8111180643235866,-0.5164209971100269,0.2745848493122731
|
||||||
|
slow,0.895,-0.8111180643235866,-0.5164209971100269,0.2745848493122731
|
||||||
|
slow,0.946,-0.8111180643235866,-0.5164209971100269,0.2745848493122731
|
||||||
|
slow,0.996,-0.8111180643235866,-0.5164209971100269,0.2745848493122731
|
||||||
|
slow,1.047,-0.6225347328753619,-0.6909879300492386,0.3674046636749054
|
||||||
|
slow,1.098,-0.4995761468930651,-0.7648708472261829,0.40668939071357624
|
||||||
|
slow,1.148,-0.42441628069163945,-0.7994799112461082,0.425091392759005
|
||||||
|
slow,1.198,-0.34635895158661695,-0.8282947460891245,0.440412636350244
|
||||||
|
slow,1.249,-0.26597407096587283,-0.8511436226859083,0.4525619594430681
|
||||||
|
slow,1.3,-0.22508987440157757,-0.8602890836759516,0.45742457405551984
|
||||||
|
slow,1.35,-0.22508987440157757,-0.8602890836759516,0.45742457405551984
|
||||||
|
slow,1.4,-0.22508987440157757,-0.8602890836759516,0.45742457405551984
|
||||||
|
slow,1.45,0.0050435963756794286,-0.8829357634414114,0.4694667184920898
|
||||||
|
slow,1.5,0.1113271185026686,-0.8774582682112876,0.4665546701443904
|
||||||
|
slow,1.551,0.19530088938670107,-0.8659441420087264,0.46043273724349176
|
||||||
|
slow,1.601,0.35806279594948665,-0.8244050055782095,0.4383462340826355
|
||||||
|
slow,1.651,0.4357105639703388,-0.7947284845866424,0.4225670837053784
|
||||||
|
slow,1.701,0.4357105639703388,-0.7947284845866424,0.4225670837053784
|
||||||
|
slow,1.751,0.4357105639703388,-0.7947284845866424,0.4225670837053784
|
||||||
|
slow,1.801,0.581059227173933,-0.7185957552011922,0.38208679003972373
|
||||||
|
slow,1.854,0.5981621070188505,-0.707571139880663,0.3762249004714446
|
||||||
|
slow,1.933,0.7102092219298712,-0.6215856943388454,0.3305058027918156
|
||||||
|
slow,1.983,0.7936818073741404,-0.5371251153693617,0.28559726728869045
|
||||||
|
slow,2.034,0.8306115980329357,-0.491670162790673,0.2614284304251665
|
||||||
|
slow,2.085,0.8306115980329357,-0.491670162790673,0.2614284304251665
|
||||||
|
slow,2.136,0.8306115980329357,-0.491670162790673,0.2614284304251665
|
||||||
|
slow,2.186,0.8306115980329357,-0.491670162790673,0.2614284304251665
|
||||||
|
slow,2.236,0.9439254674422402,-0.29151154402331125,0.15500236003072188
|
||||||
|
slow,2.288,0.9782500298959619,-0.18314796371755346,0.09738430260911397
|
||||||
|
slow,2.338,0.9923168633793271,-0.1092393189325843,0.05808626216377494
|
||||||
|
slow,2.388,0.9999950320089501,0.0027841479666426932,-0.0014779978073891553
|
||||||
|
slow,2.439,0.9961448118772039,0.07745674002692376,-0.04118212226842516
|
||||||
|
slow,2.489,0.9885868780617736,0.1330186187164556,-0.07072504223287812
|
||||||
|
slow,2.54,0.9885868780617736,0.1330186187164556,-0.07072504223287812
|
||||||
|
slow,2.59,0.9885868780617736,0.1330186187164556,-0.07072504223287812
|
||||||
|
slow,2.64,0.9885868780617736,0.1330186187164556,-0.07072504223287812
|
||||||
|
slow,2.69,0.9104394306290844,0.3652252075952527,-0.1941921494108173
|
||||||
|
slow,2.741,0.8718210936242394,0.4324898355933772,-0.22995765440673788
|
||||||
|
slow,2.791,0.8021474529558832,0.5272312979999614,-0.28033305571349426
|
||||||
|
slow,2.841,0.7483879225773887,0.5856251973581853,-0.31138183241718986
|
||||||
|
slow,2.891,0.6415804884515123,0.6772700855747096,-0.3601106885722006
|
||||||
|
slow,2.942,0.5565400067937,0.7335711833839508,-0.39004684301598735
|
||||||
|
slow,2.992,0.5025832072518267,0.7633335327127708,-0.4058719473241637
|
||||||
|
slow,3.042,0.5025832072518267,0.7633335327127708,-0.4058719473241637
|
||||||
|
slow,3.092,0.5025832072518267,0.7633335327127708,-0.4058719473241637
|
||||||
|
slow,3.142,0.5025832072518267,0.7633335327127708,-0.4058719473241637
|
||||||
|
slow,3.193,0.26840150425248394,0.8505494121077833,-0.4522458734782528
|
||||||
|
slow,3.243,0.14383384202445684,0.8737661032159637,-0.4645908121769882
|
||||||
|
slow,3.293,0.017126773329819035,0.8828175004515181,-0.46940380753871486
|
||||||
|
slow,3.344,-0.025233536073355507,0.8826657223955247,-0.46932343982079283
|
||||||
|
slow,3.394,-0.1306276597599528,0.8753813567867831,-0.46545020646226887
|
||||||
|
slow,3.444,-0.1306276597599528,0.8753813567867831,-0.46545020646226887
|
||||||
|
slow,3.494,-0.1306276597599528,0.8753813567867831,-0.46545020646226887
|
||||||
|
slow,3.544,-0.1306276597599528,0.8753813567867831,-0.46545020646226887
|
||||||
|
slow,3.594,-0.3953899986357624,0.8109981935802458,-0.4312176700790331
|
||||||
|
slow,3.644,-0.5092096812736444,0.7599012381904277,-0.40404901768702334
|
||||||
|
slow,3.695,-0.6146085873298012,0.6964964366951696,-0.37033633099035523
|
||||||
|
slow,3.745,-0.6475735623151888,0.6728076094689478,-0.35774069104743467
|
||||||
|
slow,3.795,-0.7246428766140702,0.6084598143649699,-0.32352643736707504
|
||||||
|
slow,3.845,-0.7246428766140702,0.6084598143649699,-0.32352643736707504
|
||||||
|
slow,3.895,-0.7246428766140702,0.6084598143649699,-0.32352643736707504
|
||||||
|
slow,3.946,-0.7246428766140702,0.6084598143649699,-0.32352643736707504
|
||||||
|
slow,4.0,-0.8948032879220578,0.39420026288722865,-0.2096025492772329
|
||||||
|
slow,4.05,-0.9371976061971167,0.3079700993685502,-0.16375306053115327
|
||||||
|
slow,4.1,-0.9739646105616616,0.20016331274041113,-0.10643113081357014
|
||||||
|
slow,4.151,-0.9925182516704475,0.1078037923584182,-0.057322442849038695
|
||||||
|
slow,4.201,-0.9998661518865883,0.014444979973920849,-0.007682503827448022
|
||||||
|
slow,4.252,-0.999988574147902,-0.004221603854607207,0.0022426846725771095
|
||||||
|
slow,4.302,-0.999988574147902,-0.004221603854607207,0.0022426846725771095
|
||||||
|
slow,4.352,-0.999988574147902,-0.004221603854607207,0.0022426846725771095
|
||||||
|
slow,4.402,-0.999988574147902,-0.004221603854607207,0.0022426846725771095
|
||||||
|
slow,4.454,-0.9481592609187346,-0.28059728776173093,0.1491951005723691
|
||||||
|
slow,4.504,-0.8998604949330586,-0.3851225220144059,0.20477239241678594
|
||||||
|
slow,4.554,-0.8483542366290391,-0.4674583762955424,0.24855131386636348
|
||||||
|
slow,4.605,-0.8002653758276345,-0.5294561807103555,0.281516395542175
|
||||||
|
slow,4.655,-0.7740407763904767,-0.5590258203543885,0.2972389756777044
|
||||||
|
slow,4.705,-0.7320686741889714,-0.6014912262488834,0.31981832501721374
|
||||||
|
slow,4.755,-0.7320686741889714,-0.6014912262488834,0.31981832501721374
|
||||||
|
slow,4.805,-0.7320686741889714,-0.6014912262488834,0.31981832501721374
|
||||||
|
slow,4.855,-0.7320686741889714,-0.6014912262488834,0.31981832501721374
|
||||||
|
slow,4.905,-0.5000347671416738,-0.7646370203731946,0.4065654421177173
|
||||||
|
slow,4.956,-0.38571043654168863,-0.8146245270401747,0.43314470917626546
|
||||||
|
slow,5.033,-0.3059761515320789,-0.8406001527732009,0.44695634893274494
|
||||||
|
slow,5.083,-0.14067269192255813,-0.8741670164828578,0.46480449765543375
|
||||||
|
slow,5.136,-0.11971066366716597,-0.876597475120388,0.46609679640277224
|
||||||
|
slow,5.186,-0.11971066366716597,-0.876597475120388,0.46609679640277224
|
||||||
|
slow,5.236,-0.11971066366716597,-0.876597475120388,0.46609679640277224
|
||||||
|
slow,5.286,0.09210780811437987,-0.8791932987194956,0.4674775878810623
|
||||||
|
slow,5.336,0.1552569076145395,-0.8722401249754417,0.46378061302818196
|
||||||
|
slow,5.389,0.29980078422712286,-0.8423325684075889,0.4478787045358116
|
||||||
|
slow,5.439,0.39908806765876,-0.8095847039629167,0.43046639980569157
|
||||||
|
slow,5.49,0.4751133264531701,-0.7769262478123317,0.4131016006829976
|
||||||
|
slow,5.542,0.4751133264531701,-0.7769262478123317,0.4131016006829976
|
||||||
|
slow,5.592,0.4751133264531701,-0.7769262478123317,0.4131016006829976
|
||||||
|
slow,5.642,0.4751133264531701,-0.7769262478123317,0.4131016006829976
|
||||||
|
slow,5.692,0.696657860237904,-0.633428595248907,0.3368026729254701
|
||||||
|
slow,5.742,0.726585020550654,-0.6066514667740671,0.3225650411502751
|
||||||
|
slow,5.792,0.8325182828011221,-0.48914972660411055,0.2600881653689665
|
||||||
|
slow,5.843,0.8765739353060135,-0.4249327255756417,0.22594316691811042
|
||||||
|
slow,5.893,0.9054260508840364,-0.37481374091028163,0.19929457093804306
|
||||||
|
slow,5.943,0.9054260508840364,-0.37481374091028163,0.19929457093804306
|
||||||
|
slow,5.993,0.9054260508840364,-0.37481374091028163,0.19929457093804306
|
||||||
|
slow,6.043,0.9054260508840364,-0.37481374091028163,0.19929457093804306
|
||||||
|
slow,6.093,0.9868879110680581,-0.14251307214027348,0.07577780187407064
|
||||||
|
slow,6.144,0.9928589520370625,-0.10532958640717122,0.056006960167108814
|
||||||
|
slow,6.194,0.9995721898785164,0.025825160128774418,-0.013729469246492699
|
||||||
|
slow,6.244,0.9934893887944055,0.10059024435508387,-0.05348305426490678
|
||||||
|
slow,6.294,0.9538232020213261,0.26521033194280885,-0.14101340048580407
|
||||||
|
slow,6.344,0.947267673727074,0.2829352443494437,-0.1504380331452729
|
||||||
|
slow,6.394,0.947267673727074,0.2829352443494437,-0.1504380331452729
|
||||||
|
slow,6.445,0.947267673727074,0.2829352443494437,-0.1504380331452729
|
||||||
|
slow,6.495,0.947267673727074,0.2829352443494437,-0.1504380331452729
|
||||||
|
slow,6.545,0.8243733791338322,0.4997895512364342,-0.2657422364818033
|
||||||
|
slow,6.597,0.7593203746728908,0.5745491212947682,-0.30549284087524925
|
||||||
|
slow,6.647,0.7010074410559842,0.6296776548998042,-0.3348053441987208
|
||||||
|
slow,6.697,0.6041754101078993,0.7035779205024607,-0.37409916279294836
|
||||||
|
slow,6.747,0.5340870381020223,0.7464697028629991,-0.39690555355025536
|
||||||
|
slow,6.797,0.4025055990782129,0.8082653740061208,-0.4297631067151235
|
||||||
|
slow,6.847,0.3433573357356595,0.8292682687272306,-0.44093069577729704
|
||||||
|
slow,6.898,0.3433573357356595,0.8292682687272306,-0.44093069577729704
|
||||||
|
slow,6.948,0.3433573357356595,0.8292682687272306,-0.44093069577729704
|
||||||
|
slow,6.999,0.3433573357356595,0.8292682687272306,-0.44093069577729704
|
||||||
|
slow,7.049,0.09503184681410931,0.8789508919606488,-0.46734813320765445
|
||||||
|
slow,7.1,-0.03242949378753749,0.8824823690120825,-0.4692261675519672
|
||||||
|
slow,7.15,-0.07486618489555856,0.8804688348729269,-0.46815562068258304
|
||||||
|
slow,7.202,-0.2217573682314415,0.8609628101781774,-0.4577845662810842
|
||||||
|
slow,7.253,-0.3436636683706333,0.8291685841702975,-0.44087950969291334
|
||||||
|
slow,7.306,-0.3436636683706333,0.8291685841702975,-0.44087950969291334
|
||||||
|
slow,7.356,-0.3436636683706333,0.8291685841702975,-0.44087950969291334
|
||||||
|
slow,7.406,-0.3436636683706333,0.8291685841702975,-0.44087950969291334
|
||||||
|
slow,7.456,-0.5335192585826919,0.7467851744734487,-0.3970756904017614
|
||||||
|
slow,7.506,-0.5863848618861591,0.715215075832045,-0.38028961207652284
|
||||||
|
slow,7.557,-0.6691599892298212,0.6561333325626291,-0.3488752767311034
|
||||||
|
slow,7.607,-0.7582631988698701,0.5756351874374445,-0.30607360589160554
|
||||||
|
slow,7.657,-0.8108505756823166,0.51674664977568,-0.27476215871416254
|
||||||
|
slow,7.707,-0.8575526461274808,0.4541837039893854,-0.24149662968711988
|
||||||
|
slow,7.757,-0.8575526461274808,0.4541837039893854,-0.24149662968711988
|
||||||
|
slow,7.808,-0.8575526461274808,0.4541837039893854,-0.24149662968711988
|
||||||
|
slow,7.859,-0.8575526461274808,0.4541837039893854,-0.24149662968711988
|
||||||
|
slow,7.909,-0.9532867456950477,0.2667081367420545,-0.1418137873329921
|
||||||
|
slow,7.959,-0.9755224624568912,0.19415891248194872,-0.10323876183813074
|
||||||
|
fast,0.031,-0.9183790521746182,-0.3493842945716818,0.1857701031745906
|
||||||
|
fast,0.081,-0.9181941875656858,-0.34976292144045307,0.18597132226778823
|
||||||
|
fast,0.131,-0.9157256739103099,-0.35477222000318137,0.18863499690015914
|
||||||
|
fast,0.181,-0.9149015400332507,-0.3564260247285592,0.18951427635136814
|
||||||
|
fast,0.231,-0.9149015400332507,-0.3564260247285592,0.18951427635136814
|
||||||
|
fast,0.282,-0.9149015400332507,-0.3564260247285592,0.18951427635136814
|
||||||
|
fast,0.334,-0.886987130221704,-0.40774025376731704,0.21679879215260833
|
||||||
|
fast,0.392,-0.874422882615109,-0.42837502256975,0.22777063550301968
|
||||||
|
fast,0.442,-0.8391761714215903,-0.4801996653842019,0.2553265256159302
|
||||||
|
fast,0.492,-0.8087011271707248,-0.5193672154489234,0.27615246229144985
|
||||||
|
fast,0.542,-0.7639193320090165,-0.5697763250541364,0.3029557617717493
|
||||||
|
fast,0.592,-0.7142788381999624,-0.6179405632697418,0.3285653687861613
|
||||||
|
fast,0.644,-0.7056326965418199,-0.6256368844308748,0.3326574610778302
|
||||||
|
fast,0.694,-0.7056326965418199,-0.6256368844308748,0.3326574610778302
|
||||||
|
fast,0.761,-0.7056326965418199,-0.6256368844308748,0.3326574610778302
|
||||||
|
fast,0.811,-0.6045554154137983,-0.703323001692553,0.37396457717814224
|
||||||
|
fast,0.861,-0.5641123049229769,-0.7290475533490074,0.38764284127313964
|
||||||
|
fast,0.911,-0.5010910596413976,-0.7640973590830287,0.4062794306752468
|
||||||
|
fast,0.961,-0.4574254856752507,-0.7851585926980168,0.4174780345925168
|
||||||
|
fast,1.011,-0.40119022065553167,-0.8087745891735626,0.43003496457555734
|
||||||
|
fast,1.062,-0.40119022065553167,-0.8087745891735626,0.43003496457555734
|
||||||
|
fast,1.112,-0.40119022065553167,-0.8087745891735626,0.43003496457555734
|
||||||
|
fast,1.162,-0.40119022065553167,-0.8087745891735626,0.43003496457555734
|
||||||
|
fast,1.213,-0.2732721277804909,-0.8493387726086905,0.4516038014918455
|
||||||
|
fast,1.263,-0.24847333019197224,-0.8552561875978043,0.45475032463867526
|
||||||
|
fast,1.314,-0.13690544128361162,-0.8746327174969611,0.46505323311511404
|
||||||
|
fast,1.364,-0.11190820705598208,-0.8774002355189958,0.46652479023598115
|
||||||
|
fast,1.414,-0.04853388875408303,-0.8819058319940255,0.46892063842118525
|
||||||
|
fast,1.464,-0.023325922091828814,-0.8827061212913064,0.4693461460302229
|
||||||
|
fast,1.52,-0.023325922091828814,-0.8827061212913064,0.4693461460302229
|
||||||
|
fast,1.57,-0.023325922091828814,-0.8827061212913064,0.4693461460302229
|
||||||
|
fast,1.623,0.11590445397311018,-0.8769955308131724,0.4663099789656202
|
||||||
|
fast,1.674,0.16796962344551228,-0.8704014300065923,0.46280401493726464
|
||||||
|
fast,1.724,0.2673695301474367,-0.8508015956107015,0.4523827795739172
|
||||||
|
fast,1.776,0.3040082366636887,-0.8411556467255445,0.44725403298613803
|
||||||
|
fast,1.826,0.34060203879357387,-0.8301524613755806,0.44140360447296506
|
||||||
|
fast,1.876,0.34060203879357387,-0.8301524613755806,0.44140360447296506
|
||||||
|
fast,1.926,0.34060203879357387,-0.8301524613755806,0.44140360447296506
|
||||||
|
fast,1.976,0.34060203879357387,-0.8301524613755806,0.44140360447296506
|
||||||
|
fast,2.026,0.4800222448487086,-0.7745698100484196,0.41184979520689524
|
||||||
|
fast,2.077,0.5027716590432529,-0.7632352767416622,0.4058233251058559
|
||||||
|
fast,2.162,0.567685165746978,-0.726881238602736,0.3864934896711436
|
||||||
|
fast,2.213,0.60896099881303,-0.7003525641308903,0.37238795340333464
|
||||||
|
fast,2.263,0.60896099881303,-0.7003525641308903,0.37238795340333464
|
||||||
|
fast,2.313,0.60896099881303,-0.7003525641308903,0.37238795340333464
|
||||||
|
fast,2.363,0.60896099881303,-0.7003525641308903,0.37238795340333464
|
||||||
|
fast,2.415,0.7138914376865056,-0.6182880840720885,0.3287534947226572
|
||||||
|
fast,2.465,0.7492325438071801,-0.584780749889073,0.31093740505026973
|
||||||
|
fast,2.515,0.7980625863701071,-0.5320401745258126,0.28289461098931906
|
||||||
|
fast,2.566,0.8280000832233713,-0.4950917864992449,0.2632489033653826
|
||||||
|
fast,2.618,0.8351255264037815,-0.48567212818960787,0.2582400802520477
|
||||||
|
fast,2.669,0.8351255264037815,-0.48567212818960787,0.2582400802520477
|
||||||
|
fast,2.719,0.8351255264037815,-0.48567212818960787,0.2582400802520477
|
||||||
|
fast,2.769,0.8351255264037815,-0.48567212818960787,0.2582400802520477
|
||||||
|
fast,2.82,0.9093870336730951,-0.36726148601053504,0.1952798604070126
|
||||||
|
fast,2.871,0.9203632924764715,-0.3452879583192104,0.18359639348750836
|
||||||
|
fast,2.921,0.9600488101430662,-0.247076202859695,0.13137591911502494
|
||||||
|
fast,2.972,0.9669595427173864,-0.2250884627532023,0.1196846969465328
|
||||||
|
fast,3.022,0.9813959442736294,-0.16952014269323645,0.09013834802422341
|
||||||
|
fast,3.074,0.9837681894544645,-0.158438487459875,0.08424603912892294
|
||||||
|
fast,3.124,0.9837681894544645,-0.158438487459875,0.08424603912892294
|
||||||
|
fast,3.174,0.9837681894544645,-0.158438487459875,0.08424603912892294
|
||||||
|
fast,3.224,0.9985768344211968,-0.04708834623109012,0.025039836392490022
|
||||||
|
fast,3.276,0.9999091072744978,0.011905223183064872,-0.006327942041318827
|
||||||
|
fast,3.326,0.9958087405962524,0.08075529499181068,-0.04293640044171679
|
||||||
|
fast,3.376,0.9931046463689198,0.10350980586946733,-0.05503527459119239
|
||||||
|
fast,3.426,0.9725948196320136,0.20529173779377843,-0.10915410765784948
|
||||||
|
fast,3.476,0.9662434406366642,0.22747505904204074,-0.12094920810175326
|
||||||
|
fast,3.526,0.9554895457575009,0.26049211070264017,-0.13850483099808442
|
||||||
|
fast,3.577,0.9554895457575009,0.26049211070264017,-0.13850483099808442
|
||||||
|
fast,3.627,0.9554895457575009,0.26049211070264017,-0.13850483099808442
|
||||||
|
fast,3.677,0.9554895457575009,0.26049211070264017,-0.13850483099808442
|
||||||
|
fast,3.727,0.8909286923979324,0.4009849131652504,-0.21320685841681314
|
||||||
|
fast,3.778,0.8640929736842651,0.44441621107211554,-0.23629973374041036
|
||||||
|
fast,3.829,0.8128494133306493,0.5142939755758894,-0.27345481881723305
|
||||||
|
fast,3.879,0.7814528720839342,0.5509276830126654,-0.2929336047674737
|
||||||
|
fast,3.929,0.7211597970721555,0.611678327920411,-0.3252355611542772
|
||||||
|
fast,3.979,0.6841778570037976,0.6439468055268214,-0.34239329963872395
|
||||||
|
fast,4.029,0.6746720278390272,0.65171893206941,-0.34652573992978153
|
||||||
|
fast,4.082,0.6746720278390272,0.65171893206941,-0.34652573992978153
|
||||||
|
fast,4.133,0.6746720278390272,0.65171893206941,-0.34652573992978153
|
||||||
|
fast,4.183,0.6746720278390272,0.65171893206941,-0.34652573992978153
|
||||||
|
fast,4.233,0.5182188187016136,0.7551386081987147,-0.4015158008736547
|
||||||
|
fast,4.284,0.47114018545956854,0.7788105659042874,-0.41410267818618
|
||||||
|
fast,4.335,0.37644461942850993,0.8179963583095251,-0.4349383936785522
|
||||||
|
fast,4.385,0.32771191712873915,0.8341882735212928,-0.44354799480030493
|
||||||
|
fast,4.435,0.22775844025010583,0.8597406189563827,-0.4571347296053267
|
||||||
|
fast,4.485,0.20235015483807314,0.864681197867618,-0.4597617218638685
|
||||||
|
fast,4.536,0.18963344038093657,0.8669254276051488,-0.4609549449359662
|
||||||
|
fast,4.586,0.18963344038093657,0.8669254276051488,-0.4609549449359662
|
||||||
|
fast,4.636,0.18963344038093657,0.8669254276051488,-0.4609549449359662
|
||||||
|
fast,4.686,0.0616702782462941,0.8812657670818295,-0.46858022210791117
|
||||||
|
fast,4.742,-0.033265594992281614,0.8824576094559936,-0.4692142023671305
|
||||||
|
fast,4.793,-0.08561358744104564,0.8797044474697407,-0.46775035943057547
|
||||||
|
fast,4.861,-0.16311988058380167,0.8711202450018558,-0.46318616484760533
|
||||||
|
fast,4.911,-0.2647679339679234,0.8514356989074474,-0.4527197717886242
|
||||||
|
fast,4.962,-0.31438943728704216,0.8381755148966445,-0.4456692584754773
|
||||||
|
fast,5.012,-0.31438943728704216,0.8381755148966445,-0.4456692584754773
|
||||||
|
fast,5.062,-0.31438943728704216,0.8381755148966445,-0.4456692584754773
|
||||||
|
fast,5.112,-0.31438943728704216,0.8381755148966445,-0.4456692584754773
|
||||||
|
fast,5.163,-0.4463483290724788,0.7901123971308208,-0.42011375725438266
|
||||||
|
fast,5.213,-0.505148005766188,0.7620111594970173,-0.40517216719865473
|
||||||
|
fast,5.263,-0.5274613820707995,0.7501322143205744,-0.3988560535612739
|
||||||
|
fast,5.313,-0.6235599606983542,0.6902653205120604,-0.36702419908263495
|
||||||
|
fast,5.364,-0.6535579280284671,0.6682807541755503,-0.3553348678496027
|
||||||
|
fast,5.414,-0.6535579280284671,0.6682807541755503,-0.3553348678496027
|
||||||
|
fast,5.464,-0.6535579280284671,0.6682807541755503,-0.3553348678496027
|
||||||
|
fast,5.514,-0.6535579280284671,0.6682807541755503,-0.3553348678496027
|
||||||
|
fast,5.564,-0.7542996656095252,0.5796803289795648,-0.3082251298247795
|
||||||
|
fast,5.615,-0.8053480118610813,0.5234118913151391,-0.2783066147638474
|
||||||
|
fast,5.665,-0.835317794193117,0.4854144024411218,-0.25810277140525667
|
||||||
|
fast,5.715,-0.8756811392589173,0.4263650045332836,-0.22670559158419007
|
||||||
|
fast,5.765,-0.8879541369536935,0.4060944713229071,-0.21592760598818767
|
||||||
|
fast,5.816,-0.8938471875490723,0.3958873769547781,-0.21050033272771532
|
||||||
|
fast,5.867,-0.8938471875490723,0.3958873769547781,-0.21050033272771532
|
||||||
|
fast,5.917,-0.8938471875490723,0.3958873769547781,-0.21050033272771532
|
||||||
|
fast,5.967,-0.8938471875490723,0.3958873769547781,-0.21050033272771532
|
||||||
|
fast,6.017,-0.9568362261302265,0.2566077577804137,-0.1364437430290401
|
||||||
|
fast,6.067,-0.9711494705384393,0.21055675115725614,-0.11195785106463185
|
||||||
|
fast,6.118,-0.9868689841435945,0.1426150745455621,-0.07583237203037746
|
||||||
|
fast,6.168,-0.9907414896934681,0.11986964152412082,-0.06373829022531322
|
||||||
|
fast,6.218,-0.9974727159739508,0.06273297303862826,-0.03335798227238545
|
||||||
|
fast,6.27,-0.9974727159739508,0.06273297303862826,-0.03335798227238545
|
||||||
|
fast,6.321,-0.9974727159739508,0.06273297303862826,-0.03335798227238545
|
||||||
|
fast,6.371,-0.9974727159739508,0.06273297303862826,-0.03335798227238545
|
||||||
|
fast,6.421,-0.9962961796573708,-0.0759235377258525,0.04036754661010212
|
||||||
|
fast,6.471,-0.9935876720124013,-0.09983054395307195,0.053079191016920685
|
||||||
|
fast,6.521,-0.98151891503074,-0.1689659788258626,0.0898393980183376
|
||||||
|
fast,6.572,-0.9761981791370964,-0.19149456258495987,0.1018182083412009
|
||||||
|
fast,6.622,-0.9600279771648162,-0.24714097112937958,0.13140632956619028
|
||||||
|
fast,6.673,-0.9600279771648162,-0.24714097112937958,0.13140632956619028
|
||||||
|
fast,6.723,-0.9600279771648162,-0.24714097112937958,0.13140632956619028
|
||||||
|
fast,6.773,-0.9600279771648162,-0.24714097112937958,0.13140632956619028
|
||||||
|
fast,6.823,-0.9600279771648162,-0.24714097112937958,0.13140632956619028
|
||||||
|
fast,6.874,-0.8987677690425633,-0.3871064780875767,0.20582777254997944
|
||||||
|
fast,6.924,-0.8670890034724157,-0.43984325215975256,0.23386871014897564
|
||||||
|
fast,6.974,-0.8537120733075257,-0.4597908235105943,0.24447514087206346
|
||||||
|
fast,7.024,-0.7865457418615867,-0.545248184091142,0.2899141488522395
|
||||||
|
fast,7.074,-0.7533129809628684,-0.5806809342120418,0.3087542798982184
|
||||||
|
fast,7.127,-0.7447100018154831,-0.5892684722773185,0.31332041231930347
|
||||||
|
fast,7.179,-0.7447100018154831,-0.5892684722773185,0.31332041231930347
|
||||||
|
fast,7.229,-0.7447100018154831,-0.5892684722773185,0.31332041231930347
|
||||||
|
fast,7.279,-0.7447100018154831,-0.5892684722773185,0.31332041231930347
|
||||||
|
fast,7.329,-0.5992280106837283,-0.7068679873070793,0.3758502889881291
|
||||||
|
fast,7.379,-0.5443899367788374,-0.7406440829377567,0.3938095213973664
|
||||||
|
fast,7.431,-0.4771420994818272,-0.7759564582613324,0.4125857387072451
|
||||||
|
fast,7.481,-0.41846538807715317,-0.801920794933833,0.42639155436538256
|
||||||
|
fast,7.531,-0.35845204323781216,-0.8242729196805756,0.43827649558229453
|
||||||
|
fast,7.581,-0.35845204323781216,-0.8242729196805756,0.43827649558229453
|
||||||
|
fast,7.631,-0.35845204323781216,-0.8242729196805756,0.43827649558229453
|
||||||
|
fast,7.681,-0.35845204323781216,-0.8242729196805756,0.43827649558229453
|
||||||
|
fast,7.732,-0.23477000507402776,-0.8582687461538578,0.4563527189499649
|
||||||
|
fast,7.783,-0.20781325308245005,-0.8636701935950999,0.4592248344097825
|
||||||
|
fast,7.861,-0.10263756227815277,-0.8782831695934015,0.4669948659445483
|
||||||
|
fast,7.911,-0.02463647965351885,-0.8826781186805318,0.4693318470686588
|
||||||
|
fast,7.962,0.001224726571744081,-0.8829453951924657,0.4694740984902627
|
||||||
|
314
docs/re/captures/roll-gametime.csv
Normal file
314
docs/re/captures/roll-gametime.csv
Normal file
@@ -0,0 +1,314 @@
|
|||||||
|
phase,t,fx,fy,fz
|
||||||
|
slow,0.046,5.36441810913306e-07,0.8829469811387421,-0.4694727132621171
|
||||||
|
slow,0.124,-0.0037028938908542333,0.8829408973863202,-0.4694695520472787
|
||||||
|
slow,0.175,-0.029433192564468726,0.8825644180942943,-0.4692693630414654
|
||||||
|
slow,0.225,-0.047907995026344505,0.8819330671344229,-0.46893377902154315
|
||||||
|
slow,0.276,-0.05494452988794276,0.8816131314630001,-0.4687636772056853
|
||||||
|
slow,0.327,-0.05494452988794276,0.8816131314630001,-0.4687636772056853
|
||||||
|
slow,0.377,-0.05494452988794276,0.8816131314630001,-0.4687636772056853
|
||||||
|
slow,0.427,-0.05494452988794276,0.8816131314630001,-0.4687636772056853
|
||||||
|
slow,0.478,-0.2805405845010285,0.8474894135274412,-0.4506203217862406
|
||||||
|
slow,0.529,-0.3464401476183601,0.828267481843762,-0.440400048408674
|
||||||
|
slow,0.579,-0.4933270963841563,0.7680254218881261,-0.4083691066997395
|
||||||
|
slow,0.629,-0.5646325672888053,0.7287328660233411,-0.3874770624621025
|
||||||
|
slow,0.679,-0.663984471662157,0.6602195443081346,-0.35104810881855686
|
||||||
|
slow,0.729,-0.6795143538879752,0.6477839998044589,-0.3444359627819725
|
||||||
|
slow,0.782,-0.6795143538879752,0.6477839998044589,-0.3444359627819725
|
||||||
|
slow,0.832,-0.6795143538879752,0.6477839998044589,-0.3444359627819725
|
||||||
|
slow,0.883,-0.6795143538879752,0.6477839998044589,-0.3444359627819725
|
||||||
|
slow,0.933,-0.8636404059341753,0.44509990979031433,-0.23666710701427646
|
||||||
|
slow,0.983,-0.9034235025038042,0.37856180077666735,-0.20128819666459757
|
||||||
|
slow,1.033,-0.9208475303349151,0.34428010688112226,-0.18306019196431236
|
||||||
|
slow,1.084,-0.9823258963987413,0.1652676638242847,-0.08787737227792251
|
||||||
|
slow,1.134,-0.9946318488171882,0.09136350259329508,-0.048581845502070904
|
||||||
|
slow,1.188,-0.9965908416220451,0.07284426607901787,-0.03873509125422061
|
||||||
|
slow,1.238,-0.9965908416220451,0.07284426607901787,-0.03873509125422061
|
||||||
|
slow,1.288,-0.9965908416220451,0.07284426607901787,-0.03873509125422061
|
||||||
|
slow,1.338,-0.9965908416220451,0.07284426607901787,-0.03873509125422061
|
||||||
|
slow,1.388,-0.9887775514835899,-0.13190930729666128,0.0701347868794932
|
||||||
|
slow,1.438,-0.9556714469692192,-0.2599717478297875,0.13822726134190855
|
||||||
|
slow,1.489,-0.8922483691415248,-0.39869133958378805,0.21198599837058513
|
||||||
|
slow,1.539,-0.8508838444950022,-0.46386065972493185,0.24663732794724316
|
||||||
|
slow,1.589,-0.7907927164969744,-0.5404386826976731,0.28735502393266027
|
||||||
|
slow,1.64,-0.7777418936805442,-0.5550070379438635,0.29510122779646286
|
||||||
|
slow,1.691,-0.7777418936805442,-0.5550070379438635,0.29510122779646286
|
||||||
|
slow,1.741,-0.7777418936805442,-0.5550070379438635,0.29510122779646286
|
||||||
|
slow,1.791,-0.5952358692207049,-0.7094937017300517,0.377243882917219
|
||||||
|
slow,1.841,-0.5604049203743158,-0.7312739567343891,0.38882480042081646
|
||||||
|
slow,1.892,-0.45017479352935263,-0.7884196750580088,0.4192100562393852
|
||||||
|
slow,1.942,-0.3527042657551637,-0.8262047790273792,0.4393009947979067
|
||||||
|
slow,1.993,-0.2515210843607131,-0.8545622769363128,0.454379201724106
|
||||||
|
slow,2.048,-0.21020554253366847,-0.8632198721332542,0.4589826600672126
|
||||||
|
slow,2.098,-0.21020554253366847,-0.8632198721332542,0.4589826600672126
|
||||||
|
slow,2.148,-0.21020554253366847,-0.8632198721332542,0.4589826600672126
|
||||||
|
slow,2.199,-0.21020554253366847,-0.8632198721332542,0.4589826600672126
|
||||||
|
slow,2.249,0.06423144170165734,-0.8811238583231025,0.46850300766455694
|
||||||
|
slow,2.3,0.12787323617667282,-0.8756985100693347,0.46561846498184756
|
||||||
|
slow,2.35,0.2327336093496518,-0.858701653919306,0.45658135817763307
|
||||||
|
slow,2.423,0.3547279040834424,-0.8255283263615021,0.43894315855170307
|
||||||
|
slow,2.479,0.5260315144840211,-0.7509151987562808,0.3992708479797423
|
||||||
|
slow,2.529,0.5961056688939317,-0.7089229256787852,0.3769433869423229
|
||||||
|
slow,2.581,0.5961056688939317,-0.7089229256787852,0.3769433869423229
|
||||||
|
slow,2.631,0.5961056688939317,-0.7089229256787852,0.3769433869423229
|
||||||
|
slow,2.681,0.5961056688939317,-0.7089229256787852,0.3769433869423229
|
||||||
|
slow,2.732,0.5961056688939317,-0.7089229256787852,0.3769433869423229
|
||||||
|
slow,2.782,0.8295924682130262,-0.4930097696572142,0.26214061819328877
|
||||||
|
slow,2.832,0.8741827941510458,-0.4287555674072037,0.22797610801923318
|
||||||
|
slow,2.882,0.9439064628362973,-0.29155959525346875,0.15502771310802138
|
||||||
|
slow,2.932,0.9571066736003423,-0.25582037216180104,0.1360248232371042
|
||||||
|
slow,2.982,0.9861968747582776,-0.14619466320861924,0.07773573609560003
|
||||||
|
slow,3.032,0.9966905224322332,-0.07177339798264935,0.03816519141555759
|
||||||
|
slow,3.083,0.9992422961997571,-0.03436404433766335,0.01827418786692905
|
||||||
|
slow,3.133,0.9992422961997571,-0.03436404433766335,0.01827418786692905
|
||||||
|
slow,3.184,0.9992422961997571,-0.03436404433766335,0.01827418786692905
|
||||||
|
slow,3.234,0.9992422961997571,-0.03436404433766335,0.01827418786692905
|
||||||
|
slow,3.286,0.9667885938062846,0.22566239526859874,-0.11998457504073406
|
||||||
|
slow,3.336,0.9415539672577656,0.2974325173987048,-0.15814557956209666
|
||||||
|
slow,3.386,0.8910494227865149,0.4007762840154738,-0.21309457131181636
|
||||||
|
slow,3.437,0.8493271610881868,0.46607942161808097,-0.24781716280765573
|
||||||
|
slow,3.487,0.761860256786668,0.5719223062697806,-0.30409509157499987
|
||||||
|
slow,3.537,0.748009652602088,0.586002088637891,-0.3115816293142661
|
||||||
|
slow,3.587,0.748009652602088,0.586002088637891,-0.3115816293142661
|
||||||
|
slow,3.637,0.748009652602088,0.586002088637891,-0.3115816293142661
|
||||||
|
slow,3.688,0.591663947524308,0.7118191730405439,-0.3784801686902885
|
||||||
|
slow,3.738,0.539041368473937,0.7436887413829951,-0.3954256681273002
|
||||||
|
slow,3.789,0.40803721926756004,0.8061006144181252,-0.4286110441030633
|
||||||
|
slow,3.839,0.36886970856393964,0.8206831516383724,-0.4363648733810532
|
||||||
|
slow,3.89,0.24776263895916018,0.8554178600934551,-0.4548339910001527
|
||||||
|
slow,3.94,0.16475926423798679,0.8708809062626716,-0.46305597065027154
|
||||||
|
slow,3.992,0.14387633165971442,0.8737609544059406,-0.46458733919873835
|
||||||
|
slow,4.042,0.14387633165971442,0.8737609544059406,-0.46458733919873835
|
||||||
|
slow,4.093,0.14387633165971442,0.8737609544059406,-0.46458733919873835
|
||||||
|
slow,4.143,0.14387633165971442,0.8737609544059406,-0.46458733919873835
|
||||||
|
slow,4.196,-0.1733023236078747,0.869586949506304,-0.46236872934967393
|
||||||
|
slow,4.247,-0.21515127447977428,0.86226908085857,-0.4584778743680502
|
||||||
|
slow,4.297,-0.3579950095311995,0.8244282743035451,-0.4383578374794213
|
||||||
|
slow,4.347,-0.3974270950667179,0.8102218773848151,-0.43080414751236507
|
||||||
|
slow,4.397,-0.5648254471144367,0.7286167551161777,-0.3874142982079373
|
||||||
|
slow,4.448,-0.6161812577464959,0.6954125799901635,-0.36975938283344584
|
||||||
|
slow,4.498,-0.6161812577464959,0.6954125799901635,-0.36975938283344584
|
||||||
|
slow,4.55,-0.6161812577464959,0.6954125799901635,-0.36975938283344584
|
||||||
|
slow,4.6,-0.6161812577464959,0.6954125799901635,-0.36975938283344584
|
||||||
|
slow,4.65,-0.7949436150360499,0.5356686009745564,-0.2848223987740045
|
||||||
|
slow,4.706,-0.8320602692300713,0.4897569720337153,-0.26041086135787
|
||||||
|
slow,4.756,-0.9052591628184888,0.37512792417883484,-0.1994614966213956
|
||||||
|
slow,4.824,-0.9519766029552919,0.2703318015873179,-0.14374026741403262
|
||||||
|
slow,4.874,-0.983175920401433,0.1612793283684674,-0.08575597812287565
|
||||||
|
slow,4.925,-0.992798606527993,0.10577208861815067,-0.05624226298282666
|
||||||
|
slow,4.975,-0.992798606527993,0.10577208861815067,-0.05624226298282666
|
||||||
|
slow,5.025,-0.992798606527993,0.10577208861815067,-0.05624226298282666
|
||||||
|
slow,5.075,-0.992798606527993,0.10577208861815067,-0.05624226298282666
|
||||||
|
slow,5.125,-0.9909352442124001,-0.11861635420392577,0.06306744241746298
|
||||||
|
slow,5.177,-0.971089850817662,-0.21077290020723444,0.11206822108502636
|
||||||
|
slow,5.227,-0.9473137584186095,-0.2828150426309014,0.15037385002881865
|
||||||
|
slow,5.278,-0.8692337732689488,-0.43653100062660777,0.23210629655517379
|
||||||
|
slow,5.329,-0.8474958640779253,-0.4686708632974702,0.24919546999657635
|
||||||
|
slow,5.379,-0.7866667561433955,-0.5451126777938068,0.2898406170420097
|
||||||
|
slow,5.43,-0.7734621510586307,-0.5596500718853581,0.29757032432430053
|
||||||
|
slow,5.48,-0.7734621510586307,-0.5596500718853581,0.29757032432430053
|
||||||
|
slow,5.531,-0.7734621510586307,-0.5596500718853581,0.29757032432430053
|
||||||
|
slow,5.581,-0.6062043205372735,-0.7022162337138214,0.3733747217886052
|
||||||
|
slow,5.632,-0.5541510145645213,-0.734979908569316,0.39079558218658444
|
||||||
|
slow,5.682,-0.42418330732008847,-0.7995763915406578,0.42514246539461586
|
||||||
|
slow,5.732,-0.3852348981801229,-0.8148002884614528,0.4332373058120499
|
||||||
|
slow,5.783,-0.243946035449459,-0.8562723940695657,0.45528883024171124
|
||||||
|
slow,5.833,-0.16070912377840446,-0.8714704720337134,0.4633700399332204
|
||||||
|
slow,5.883,-0.0975990723650993,-0.8787317852366855,0.4672310677686361
|
||||||
|
slow,5.934,-0.0975990723650993,-0.8787317852366855,0.4672310677686361
|
||||||
|
slow,5.984,-0.0975990723650993,-0.8787317852366855,0.4672310677686361
|
||||||
|
slow,6.034,-0.0975990723650993,-0.8787317852366855,0.4672310677686361
|
||||||
|
slow,6.085,0.1775602464395945,-0.8689168079517865,0.46201292161928603
|
||||||
|
slow,6.135,0.2607328887465965,-0.8524065164179079,0.45323447738906825
|
||||||
|
slow,6.185,0.36194842063416144,-0.8230812569371999,0.4376420743931222
|
||||||
|
slow,6.235,0.4398997578876258,-0.7929274597606337,0.4216091158501638
|
||||||
|
slow,6.285,0.5682409772730201,-0.7265432946265349,0.38631209246025844
|
||||||
|
slow,6.336,0.6359981125758746,-0.6813614183433645,0.36228858440895406
|
||||||
|
slow,6.386,0.7140739082487315,-0.6181244196428086,0.32866495919039396
|
||||||
|
slow,6.436,0.7140739082487315,-0.6181244196428086,0.32866495919039396
|
||||||
|
slow,6.487,0.7140739082487315,-0.6181244196428086,0.32866495919039396
|
||||||
|
slow,6.539,0.7140739082487315,-0.6181244196428086,0.32866495919039396
|
||||||
|
slow,6.589,0.7140739082487315,-0.6181244196428086,0.32866495919039396
|
||||||
|
slow,6.639,0.9065680252911018,-0.37265567940138744,0.1981468145837393
|
||||||
|
slow,6.691,0.9392685544638382,-0.3030117042642596,0.16111638549285018
|
||||||
|
slow,6.741,0.965104771584189,-0.2312113232646016,0.12293943167130032
|
||||||
|
slow,6.792,0.9973294370055789,-0.06448454199620153,0.034289035064803325
|
||||||
|
slow,6.842,0.9999278161305012,0.010609508165090861,-0.005639225565755396
|
||||||
|
slow,6.892,0.9930188796365541,0.1041492959551682,-0.055375345031933365
|
||||||
|
slow,6.943,0.9930188796365541,0.1041492959551682,-0.055375345031933365
|
||||||
|
slow,6.993,0.9930188796365541,0.1041492959551682,-0.055375345031933365
|
||||||
|
slow,7.043,0.9930188796365541,0.1041492959551682,-0.055375345031933365
|
||||||
|
slow,7.093,0.9386688966024551,0.30445842560916364,-0.16188196201775823
|
||||||
|
slow,7.144,0.9311374675345754,0.32198368527382176,-0.17120024232104936
|
||||||
|
slow,7.223,0.8558381442539132,0.4566995610987047,-0.24283035587065402
|
||||||
|
slow,7.273,0.7831408512856074,0.5490564200014606,-0.29193741572952536
|
||||||
|
slow,7.324,0.7560444192777931,0.5779075266990185,-0.30727793064834297
|
||||||
|
slow,7.374,0.6509683314574719,0.6702500769547218,-0.3563777010163019
|
||||||
|
slow,7.425,0.6509683314574719,0.6702500769547218,-0.3563777010163019
|
||||||
|
slow,7.475,0.6509683314574719,0.6702500769547218,-0.3563777010163019
|
||||||
|
slow,7.525,0.6509683314574719,0.6702500769547218,-0.3563777010163019
|
||||||
|
slow,7.576,0.4196485397802218,0.8014397844240222,-0.42613304847512623
|
||||||
|
slow,7.626,0.3806332297410603,0.8164846784795214,-0.43413259981839836
|
||||||
|
slow,7.676,0.23917773281080557,0.8573206036655484,-0.4558458014044032
|
||||||
|
slow,7.727,0.13481190457623585,0.8748870865403633,-0.46518634566100775
|
||||||
|
slow,7.777,0.007896542705130004,0.8829196865934407,-0.4694576356169389
|
||||||
|
slow,7.828,-0.055613100836188686,0.8815807152851224,-0.46874580046412767
|
||||||
|
slow,7.878,-0.055613100836188686,0.8815807152851224,-0.46874580046412767
|
||||||
|
slow,7.934,-0.055613100836188686,0.8815807152851224,-0.46874580046412767
|
||||||
|
slow,7.984,-0.055613100836188686,0.8815807152851224,-0.46874580046412767
|
||||||
|
fast,0.044,-0.468564632951404,0.7800211366930896,-0.4147459596658374
|
||||||
|
fast,0.094,-0.468564632951404,0.7800211366930896,-0.4147459596658374
|
||||||
|
fast,0.147,-0.6532919035228096,0.6684843531374839,-0.3554410758507007
|
||||||
|
fast,0.197,-0.6740804102157376,0.6521956099667656,-0.346780170862553
|
||||||
|
fast,0.253,-0.7406633321896331,0.593230936921181,-0.31542809613185546
|
||||||
|
fast,0.303,-0.8067414530300762,0.521736964591286,-0.27741443318975423
|
||||||
|
fast,0.354,-0.8364927453434133,0.4838350279608412,-0.25726164250811173
|
||||||
|
fast,0.404,-0.8572846408021899,0.4545782991663938,-0.24170563620165925
|
||||||
|
fast,0.454,-0.8572846408021899,0.4545782991663938,-0.24170563620165925
|
||||||
|
fast,0.505,-0.8572846408021899,0.4545782991663938,-0.24170563620165925
|
||||||
|
fast,0.555,-0.8572846408021899,0.4545782991663938,-0.24170563620165925
|
||||||
|
fast,0.605,-0.9267948315707897,0.33160599382699485,-0.17632017760790408
|
||||||
|
fast,0.656,-0.9368960066831657,0.30868477952212847,-0.16413281071288688
|
||||||
|
fast,0.706,-0.9657135503823218,0.22922111730247924,-0.12188116339522719
|
||||||
|
fast,0.756,-0.9779586730613649,0.18435730681493703,-0.09802661479413445
|
||||||
|
fast,0.807,-0.9943971478546243,0.09333425614443461,-0.04962891262715385
|
||||||
|
fast,0.857,-0.9977694134078435,0.058940059911640835,-0.031341139184466044
|
||||||
|
fast,0.907,-0.9977694134078435,0.058940059911640835,-0.031341139184466044
|
||||||
|
fast,0.957,-0.9977694134078435,0.058940059911640835,-0.031341139184466044
|
||||||
|
fast,1.007,-0.9977694134078435,0.058940059911640835,-0.031341139184466044
|
||||||
|
fast,1.057,-0.9960740012037427,-0.0781633335984552,0.041558120827859354
|
||||||
|
fast,1.108,-0.9915869770276278,-0.11429142880777064,0.06076788864432451
|
||||||
|
fast,1.158,-0.9830488997220782,-0.16188358013218335,0.08607303433014432
|
||||||
|
fast,1.208,-0.9654882699749504,-0.22996141302144335,0.12227080216453375
|
||||||
|
fast,1.258,-0.9421438137516855,-0.2959725872352957,0.15736982498139357
|
||||||
|
fast,1.308,-0.9183006336633192,-0.3495452280775043,0.1858549965478247
|
||||||
|
fast,1.359,-0.9183006336633192,-0.3495452280775043,0.1858549965478247
|
||||||
|
fast,1.409,-0.9183006336633192,-0.3495452280775043,0.1858549965478247
|
||||||
|
fast,1.459,-0.9183006336633192,-0.3495452280775043,0.1858549965478247
|
||||||
|
fast,1.509,-0.852788869570223,-0.4611250554621998,0.24518325220561926
|
||||||
|
fast,1.561,-0.8457836830587759,-0.47107600317640114,0.25047427153877355
|
||||||
|
fast,1.611,-0.7990683904573951,-0.5308639797392242,0.28226431298919213
|
||||||
|
fast,1.661,-0.7576916738262323,-0.5762231745752734,0.30638240892191654
|
||||||
|
fast,1.712,-0.7039218688816332,-0.6271380249228601,0.3334544949555229
|
||||||
|
fast,1.763,-0.6851467559103143,-0.6431437685849701,0.34196493357637503
|
||||||
|
fast,1.813,-0.6560905528050488,-0.6663450550269401,0.3543013606537654
|
||||||
|
fast,1.863,-0.6560905528050488,-0.6663450550269401,0.3543013606537654
|
||||||
|
fast,1.913,-0.6560905528050488,-0.6663450550269401,0.3543013606537654
|
||||||
|
fast,1.964,-0.6560905528050488,-0.6663450550269401,0.3543013606537654
|
||||||
|
fast,2.014,-0.5163993954213524,-0.7561103236758572,0.40203089786638574
|
||||||
|
fast,2.064,-0.4546015920025061,-0.7864369179669822,0.4181559118407643
|
||||||
|
fast,2.142,-0.3807299710798536,-0.8164494585717856,0.4341140065920148
|
||||||
|
fast,2.193,-0.2820279695634007,-0.8471052048351421,0.45041424969150085
|
||||||
|
fast,2.244,-0.23157561174253732,-0.8589461445197458,0.4567102548232671
|
||||||
|
fast,2.294,-0.1805137900613878,-0.8684427065467883,0.46175971786564723
|
||||||
|
fast,2.344,-0.1805137900613878,-0.8684427065467883,0.46175971786564723
|
||||||
|
fast,2.395,-0.1805137900613878,-0.8684427065467883,0.46175971786564723
|
||||||
|
fast,2.445,-0.1805137900613878,-0.8684427065467883,0.46175971786564723
|
||||||
|
fast,2.496,-0.024830674288472077,-0.8826749954107264,0.46932748703975774
|
||||||
|
fast,2.55,0.016627909997720097,-0.8828251361547534,0.4694073833914936
|
||||||
|
fast,2.6,0.111726663405662,-0.8774189869035709,0.46653303645652927
|
||||||
|
fast,2.651,0.13780214292537876,-0.874523580821017,0.4649936300565413
|
||||||
|
fast,2.701,0.2656103428096974,-0.8512318793390828,0.45260958163672177
|
||||||
|
fast,2.751,0.31554354506824306,-0.8378380863926662,0.4454880606207544
|
||||||
|
fast,2.801,0.34018885207653954,-0.8302853882293821,0.4414722177166199
|
||||||
|
fast,2.851,0.34018885207653954,-0.8302853882293821,0.4414722177166199
|
||||||
|
fast,2.901,0.34018885207653954,-0.8302853882293821,0.4414722177166199
|
||||||
|
fast,2.952,0.34018885207653954,-0.8302853882293821,0.4414722177166199
|
||||||
|
fast,3.003,0.4940800181283668,-0.7676483628437457,0.4081677678474743
|
||||||
|
fast,3.053,0.5530560650928253,-0.7356216755844609,0.39113902806336104
|
||||||
|
fast,3.103,0.5974397882275826,-0.7080469991770619,0.3764772853691691
|
||||||
|
fast,3.154,0.6185047351113914,-0.6938025932733614,0.3689035838968582
|
||||||
|
fast,3.206,0.6881042365676635,-0.6406762784960411,0.34065593461746135
|
||||||
|
fast,3.256,0.7514898864756772,-0.5825188958027513,0.3097332506488721
|
||||||
|
fast,3.306,0.7931845845529396,-0.5376975001965116,0.2859014045261112
|
||||||
|
fast,3.357,0.8009798300561773,-0.5286119824350076,0.28107060299737585
|
||||||
|
fast,3.407,0.8009798300561773,-0.5286119824350076,0.28107060299737585
|
||||||
|
fast,3.458,0.8009798300561773,-0.5286119824350076,0.28107060299737585
|
||||||
|
fast,3.508,0.8009798300561773,-0.5286119824350076,0.28107060299737585
|
||||||
|
fast,3.566,0.9079615585910537,-0.37000119040604634,0.19673567856139682
|
||||||
|
fast,3.618,0.9289873638512246,-0.3267879327407989,0.1737588122074601
|
||||||
|
fast,3.668,0.951171266364975,-0.27253270223930237,0.14491082862158244
|
||||||
|
fast,3.718,0.97558673482976,-0.1939070387891802,0.10310471925289769
|
||||||
|
fast,3.768,0.9897808982513759,-0.1259042544228822,0.06694693551550773
|
||||||
|
fast,3.819,0.9931410372296491,-0.10323546390051833,0.05489370786949623
|
||||||
|
fast,3.869,0.9931410372296491,-0.10323546390051833,0.05489370786949623
|
||||||
|
fast,3.943,0.9931410372296491,-0.10323546390051833,0.05489370786949623
|
||||||
|
fast,3.993,0.9999376400959273,0.009861411882843249,-0.005241037594265275
|
||||||
|
fast,4.045,0.998654861608302,0.04578216735335978,-0.024340512289846263
|
||||||
|
fast,4.095,0.992907801560002,0.10497188750958387,-0.05581218893717397
|
||||||
|
fast,4.145,0.9853453521738103,0.15060635068109599,-0.08007661383945096
|
||||||
|
fast,4.195,0.9656808627762835,0.22933012769607466,-0.12193508026222302
|
||||||
|
fast,4.245,0.9584524128068335,0.25186373612958607,-0.13391650685261142
|
||||||
|
fast,4.295,0.9422656297525576,0.295670151705548,-0.15720891952250804
|
||||||
|
fast,4.346,0.9422656297525576,0.295670151705548,-0.15720891952250804
|
||||||
|
fast,4.396,0.9422656297525576,0.295670151705548,-0.15720891952250804
|
||||||
|
fast,4.446,0.9422656297525576,0.295670151705548,-0.15720891952250804
|
||||||
|
fast,4.496,0.872076362854367,0.43208850957625344,-0.22974406900477443
|
||||||
|
fast,4.547,0.8580093568921251,0.45351256088827063,-0.24113544036935863
|
||||||
|
fast,4.598,0.8132252153454199,0.5138310229603692,-0.2732076663819958
|
||||||
|
fast,4.648,0.7815435931024417,0.5508278891839419,-0.29287923889836937
|
||||||
|
fast,4.699,0.7210023605142103,0.6118235759463857,-0.32531140165864775
|
||||||
|
fast,4.752,0.7119253398407421,0.6200549034607505,-0.32968807559104
|
||||||
|
fast,4.802,0.7119253398407421,0.6200549034607505,-0.32968807559104
|
||||||
|
fast,4.852,0.7119253398407421,0.6200549034607505,-0.32968807559104
|
||||||
|
fast,4.902,0.7119253398407421,0.6200549034607505,-0.32968807559104
|
||||||
|
fast,4.952,0.5717137662325098,0.7244172953808695,-0.38517911632551577
|
||||||
|
fast,5.003,0.5489901411529138,0.7379931951737293,-0.392397590199244
|
||||||
|
fast,5.053,0.4917898196021908,0.7687948374153668,-0.40877533107946273
|
||||||
|
fast,5.104,0.42168183785580987,0.8006073549916201,-0.42569036958318496
|
||||||
|
fast,5.154,0.37379846714844805,0.8189426822227043,-0.43543953563193305
|
||||||
|
fast,5.204,0.33726198026341786,0.8312163487333023,-0.44196576594491466
|
||||||
|
fast,5.255,0.33726198026341786,0.8312163487333023,-0.44196576594491466
|
||||||
|
fast,5.306,0.33726198026341786,0.8312163487333023,-0.44196576594491466
|
||||||
|
fast,5.357,0.33726198026341786,0.8312163487333023,-0.44196576594491466
|
||||||
|
fast,5.407,0.33726198026341786,0.8312163487333023,-0.44196576594491466
|
||||||
|
fast,5.459,0.13407634499561424,0.8749752241040766,-0.46523315758513817
|
||||||
|
fast,5.509,0.1067327874409669,0.8779037141803553,-0.4667902962931195
|
||||||
|
fast,5.561,0.02627950826709677,0.8826423614597066,-0.46930997134311153
|
||||||
|
fast,5.611,-0.05263072139273397,0.8817235042090142,-0.4688215751125975
|
||||||
|
fast,5.662,-0.10470500798344481,0.8780938562969806,-0.46689189416468185
|
||||||
|
fast,5.712,-0.14352498907655858,0.8738056992414621,-0.46461185680491773
|
||||||
|
fast,5.762,-0.14352498907655858,0.8738056992414621,-0.46461185680491773
|
||||||
|
fast,5.812,-0.14352498907655858,0.8738056992414621,-0.46461185680491773
|
||||||
|
fast,5.862,-0.14352498907655858,0.8738056992414621,-0.46461185680491773
|
||||||
|
fast,5.912,-0.295103523640452,0.843625197837987,-0.4485648625425387
|
||||||
|
fast,5.962,-0.33420756849144506,0.8321770526698412,-0.44247785726832983
|
||||||
|
fast,6.013,-0.4219355057458717,0.8005024328118661,-0.42563632839932636
|
||||||
|
fast,6.063,-0.44551813189673,0.790478394286142,-0.42030643858743166
|
||||||
|
fast,6.113,-0.5364964099008817,0.7451210147911475,-0.396189696332547
|
||||||
|
fast,6.163,-0.5798139907491607,0.719379824283596,-0.38250281638863076
|
||||||
|
fast,6.213,-0.6213904831858549,0.6917895911437915,-0.3678328818786537
|
||||||
|
fast,6.265,-0.6213904831858549,0.6917895911437915,-0.3678328818786537
|
||||||
|
fast,6.316,-0.6213904831858549,0.6917895911437915,-0.3678328818786537
|
||||||
|
fast,6.366,-0.6213904831858549,0.6917895911437915,-0.3678328818786537
|
||||||
|
fast,6.416,-0.6213904831858549,0.6917895911437915,-0.3678328818786537
|
||||||
|
fast,6.467,-0.7697685939313547,0.5636049336495432,-0.2996761427989206
|
||||||
|
fast,6.517,-0.8188294015799512,0.5068436537072459,-0.26949568049397077
|
||||||
|
fast,6.567,-0.8407379772940358,0.4780642012631092,-0.2541933771879171
|
||||||
|
fast,6.618,-0.8928806068283204,0.39758464497224594,-0.21140168408076437
|
||||||
|
fast,6.668,-0.904333371419307,0.3768648333400775,-0.20038475672801448
|
||||||
|
fast,6.719,-0.9150935727512862,0.35604033442654803,-0.18931200007056712
|
||||||
|
fast,6.769,-0.9150935727512862,0.35604033442654803,-0.18931200007056712
|
||||||
|
fast,6.819,-0.9150935727512862,0.35604033442654803,-0.18931200007056712
|
||||||
|
fast,6.87,-0.9150935727512862,0.35604033442654803,-0.18931200007056712
|
||||||
|
fast,6.92,-0.9695072843499856,0.21637647177545588,-0.11505150174735601
|
||||||
|
fast,6.97,-0.9840519374844526,0.15705915122674283,-0.08351171983039263
|
||||||
|
fast,7.021,-0.9950416541582717,0.08781629148940584,-0.04669481169271156
|
||||||
|
fast,7.071,-0.9994288190771032,0.029837554381306492,-0.015866819047602072
|
||||||
|
fast,7.122,-0.9990051683116948,-0.03937536594069818,0.020934522768823672
|
||||||
|
fast,7.172,-0.9983402523657028,-0.05085064211870806,0.027036136974427062
|
||||||
|
fast,7.222,-0.9983402523657028,-0.05085064211870806,0.027036136974427062
|
||||||
|
fast,7.272,-0.9983402523657028,-0.05085064211870806,0.027036136974427062
|
||||||
|
fast,7.322,-0.9983402523657028,-0.05085064211870806,0.027036136974427062
|
||||||
|
fast,7.372,-0.9773662273888087,-0.18679204232103552,0.09931762424315102
|
||||||
|
fast,7.423,-0.9642049478456077,-0.23412130178924356,0.12448306952577433
|
||||||
|
fast,7.473,-0.9484068324824643,-0.27994440727138714,0.14884760306451283
|
||||||
|
fast,7.545,-0.9099733991029075,-0.36612944116866886,0.194673175436727
|
||||||
|
fast,7.595,-0.8747228862138969,-0.42789759461639953,0.22751597934019752
|
||||||
|
fast,7.646,-0.8618665613775525,-0.44777421714659554,0.23808460857011965
|
||||||
|
fast,7.696,-0.8618665613775525,-0.44777421714659554,0.23808460857011965
|
||||||
|
fast,7.746,-0.8618665613775525,-0.44777421714659554,0.23808460857011965
|
||||||
|
fast,7.796,-0.8618665613775525,-0.44777421714659554,0.23808460857011965
|
||||||
|
fast,7.847,-0.7556758579959296,-0.5782831810950133,0.3074777392019586
|
||||||
|
fast,7.897,-0.7097083644940697,-0.6220330202188311,0.3307400174224341
|
||||||
|
fast,7.948,-0.6909634215042433,-0.6382740408720933,0.3393756014977489
|
||||||
|
fast,7.998,-0.6322370482773051,-0.6840859490030367,0.3637344211952114
|
||||||
|
BIN
docs/re/captures/savegame-stage05-probe-details.png
Normal file
BIN
docs/re/captures/savegame-stage05-probe-details.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 906 KiB |
BIN
docs/re/captures/savegame-stage05-probe-inflight.png
Normal file
BIN
docs/re/captures/savegame-stage05-probe-inflight.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.1 MiB |
786
docs/re/captures/speed-law-throttle-phases.csv
Normal file
786
docs/re/captures/speed-law-throttle-phases.csv
Normal file
@@ -0,0 +1,786 @@
|
|||||||
|
phase,t,x,y,z
|
||||||
|
idle,0.0,-1032.5526123046875,881.9141235351562,1004.4220581054688
|
||||||
|
idle,0.05,-1038.362548828125,881.9141235351562,1004.4220581054688
|
||||||
|
idle,0.1,-1038.362548828125,881.9141235351562,1004.4220581054688
|
||||||
|
idle,0.162,-1038.362548828125,881.9141235351562,1004.4220581054688
|
||||||
|
idle,0.212,-1090.8275146484375,881.9140625,1004.4219360351562
|
||||||
|
idle,0.262,-1102.4825439453125,881.9140625,1004.4219360351562
|
||||||
|
idle,0.312,-1143.2926025390625,881.9140625,1004.4218139648438
|
||||||
|
idle,0.362,-1166.6025390625,881.9140625,1004.4217529296875
|
||||||
|
idle,0.413,-1201.5675048828125,881.9140014648438,1004.4216918945312
|
||||||
|
idle,0.463,-1201.5675048828125,881.9140014648438,1004.4216918945312
|
||||||
|
idle,0.516,-1201.5675048828125,881.9140014648438,1004.4216918945312
|
||||||
|
idle,0.566,-1201.5675048828125,881.9140014648438,1004.4216918945312
|
||||||
|
idle,0.616,-1277.342529296875,881.9140014648438,1004.4215698242188
|
||||||
|
idle,0.666,-1300.652587890625,881.9139404296875,1004.4215087890625
|
||||||
|
idle,0.716,-1335.6175537109375,881.9139404296875,1004.4214477539062
|
||||||
|
idle,0.767,-1358.927490234375,881.9139404296875,1004.42138671875
|
||||||
|
idle,0.817,-1388.0474853515625,881.9139404296875,1004.4213256835938
|
||||||
|
idle,0.867,-1388.0474853515625,881.9139404296875,1004.4213256835938
|
||||||
|
idle,0.917,-1388.0474853515625,881.9139404296875,1004.4213256835938
|
||||||
|
idle,0.968,-1388.0474853515625,881.9139404296875,1004.4213256835938
|
||||||
|
idle,1.018,-1458.0125732421875,881.9138793945312,1004.4212036132812
|
||||||
|
idle,1.068,-1492.9775390625,881.9138793945312,1004.421142578125
|
||||||
|
idle,1.118,-1527.9425048828125,881.913818359375,1004.4210205078125
|
||||||
|
idle,1.168,-1539.5975341796875,881.913818359375,1004.4210205078125
|
||||||
|
idle,1.218,-1551.217529296875,881.913818359375,1004.4210205078125
|
||||||
|
idle,1.269,-1551.217529296875,881.913818359375,1004.4210205078125
|
||||||
|
idle,1.319,-1551.217529296875,881.913818359375,1004.4210205078125
|
||||||
|
idle,1.369,-1603.6824951171875,881.913818359375,1004.4208984375
|
||||||
|
idle,1.419,-1638.6474609375,881.9137573242188,1004.4208374023438
|
||||||
|
idle,1.469,-1650.302490234375,881.9137573242188,1004.4207763671875
|
||||||
|
idle,1.519,-1685.2674560546875,881.9137573242188,1004.4207153320312
|
||||||
|
idle,1.572,-1691.0775146484375,881.9137573242188,1004.4207153320312
|
||||||
|
idle,1.622,-1691.0775146484375,881.9137573242188,1004.4207153320312
|
||||||
|
idle,1.672,-1691.0775146484375,881.9137573242188,1004.4207153320312
|
||||||
|
idle,1.722,-1749.387451171875,881.9136962890625,1004.4205932617188
|
||||||
|
idle,1.773,-1761.04248046875,881.9136962890625,1004.4205932617188
|
||||||
|
idle,1.823,-1807.6624755859375,881.9136962890625,1004.4204711914062
|
||||||
|
idle,1.873,-1819.3175048828125,881.9136962890625,1004.4204711914062
|
||||||
|
idle,1.923,-1842.5924072265625,881.9136962890625,1004.42041015625
|
||||||
|
idle,1.973,-1842.5924072265625,881.9136962890625,1004.42041015625
|
||||||
|
idle,2.024,-1842.5924072265625,881.9136962890625,1004.42041015625
|
||||||
|
idle,2.074,-1842.5924072265625,881.9136962890625,1004.42041015625
|
||||||
|
idle,2.124,-1906.71240234375,881.9136352539062,1004.4202880859375
|
||||||
|
idle,2.174,-1935.867431640625,881.9136352539062,1004.4202270507812
|
||||||
|
idle,2.224,-1970.8323974609375,881.91357421875,1004.420166015625
|
||||||
|
idle,2.275,-1982.4874267578125,881.91357421875,1004.4201049804688
|
||||||
|
idle,2.325,-1994.107421875,881.91357421875,1004.4201049804688
|
||||||
|
idle,2.375,-1994.107421875,881.91357421875,1004.4201049804688
|
||||||
|
idle,2.425,-1994.107421875,881.91357421875,1004.4201049804688
|
||||||
|
idle,2.475,-2058.262451171875,881.91357421875,1004.4199829101562
|
||||||
|
idle,2.525,-2075.7275390625,881.91357421875,1004.419921875
|
||||||
|
idle,2.575,-2116.537353515625,881.9135131835938,1004.4198608398438
|
||||||
|
idle,2.625,-2151.50244140625,881.9135131835938,1004.4197998046875
|
||||||
|
idle,2.675,-2169.00244140625,881.9135131835938,1004.4197387695312
|
||||||
|
idle,2.726,-2174.8125,881.9135131835938,1004.4197387695312
|
||||||
|
idle,2.776,-2174.8125,881.9135131835938,1004.4197387695312
|
||||||
|
idle,2.826,-2174.8125,881.9135131835938,1004.4197387695312
|
||||||
|
idle,2.876,-2238.932373046875,881.9134521484375,1004.4196166992188
|
||||||
|
idle,2.927,-2279.742431640625,881.9134521484375,1004.4194946289062
|
||||||
|
idle,2.977,-2291.3974609375,881.9134521484375,1004.4194946289062
|
||||||
|
idle,3.027,-2320.517333984375,881.9133911132812,1004.41943359375
|
||||||
|
idle,3.077,-2326.327392578125,881.9133911132812,1004.41943359375
|
||||||
|
idle,3.128,-2326.327392578125,881.9133911132812,1004.41943359375
|
||||||
|
idle,3.18,-2326.327392578125,881.9133911132812,1004.41943359375
|
||||||
|
idle,3.23,-2390.482421875,881.9133911132812,1004.4193115234375
|
||||||
|
idle,3.28,-2419.602294921875,881.9133911132812,1004.4192504882812
|
||||||
|
idle,3.361,-2454.5673828125,881.913330078125,1004.419189453125
|
||||||
|
idle,3.411,-2489.532470703125,881.913330078125,1004.4191284179688
|
||||||
|
idle,3.464,-2501.15234375,881.913330078125,1004.4190673828125
|
||||||
|
idle,3.514,-2501.15234375,881.913330078125,1004.4190673828125
|
||||||
|
idle,3.564,-2501.15234375,881.913330078125,1004.4190673828125
|
||||||
|
idle,3.615,-2547.7724609375,881.9132690429688,1004.4190063476562
|
||||||
|
idle,3.665,-2559.427490234375,881.9132690429688,1004.4189453125
|
||||||
|
idle,3.715,-2600.2373046875,881.9132690429688,1004.4188842773438
|
||||||
|
idle,3.765,-2629.392333984375,881.9132690429688,1004.4188232421875
|
||||||
|
idle,3.815,-2658.512451171875,881.9132080078125,1004.4187622070312
|
||||||
|
idle,3.865,-2664.322265625,881.9132080078125,1004.4187622070312
|
||||||
|
idle,3.916,-2664.322265625,881.9132080078125,1004.4187622070312
|
||||||
|
idle,3.968,-2664.322265625,881.9132080078125,1004.4187622070312
|
||||||
|
idle,4.019,-2728.4423828125,881.9132080078125,1004.4186401367188
|
||||||
|
idle,4.069,-2740.097412109375,881.9132080078125,1004.4185791015625
|
||||||
|
idle,4.119,-2792.562255859375,881.9131469726562,1004.41845703125
|
||||||
|
idle,4.169,-2804.21728515625,881.9131469726562,1004.41845703125
|
||||||
|
idle,4.221,-2815.83740234375,881.9131469726562,1004.41845703125
|
||||||
|
idle,4.271,-2815.83740234375,881.9131469726562,1004.41845703125
|
||||||
|
idle,4.324,-2815.83740234375,881.9131469726562,1004.41845703125
|
||||||
|
idle,4.374,-2874.147216796875,881.9131469726562,1004.4183349609375
|
||||||
|
idle,4.424,-2903.267333984375,881.9130859375,1004.4182739257812
|
||||||
|
idle,4.475,-2938.232421875,881.9130859375,1004.418212890625
|
||||||
|
idle,4.525,-2973.197265625,881.9130859375,1004.4180908203125
|
||||||
|
idle,4.575,-2996.50732421875,881.9130249023438,1004.4180908203125
|
||||||
|
idle,4.627,-3008.162353515625,881.9130249023438,1004.4180297851562
|
||||||
|
idle,4.677,-3008.162353515625,881.9130249023438,1004.4180297851562
|
||||||
|
idle,4.727,-3008.162353515625,881.9130249023438,1004.4180297851562
|
||||||
|
idle,4.778,-3072.2822265625,881.9130249023438,1004.4179077148438
|
||||||
|
idle,4.863,-3113.09228515625,881.9129638671875,1004.4178466796875
|
||||||
|
idle,4.913,-3148.057373046875,881.9129638671875,1004.4177856445312
|
||||||
|
idle,4.963,-3165.522216796875,881.9129638671875,1004.417724609375
|
||||||
|
idle,5.013,-3165.522216796875,881.9129638671875,1004.417724609375
|
||||||
|
idle,5.064,-3165.522216796875,881.9129638671875,1004.417724609375
|
||||||
|
idle,5.114,-3223.832275390625,881.9129028320312,1004.4176025390625
|
||||||
|
idle,5.164,-3241.29736328125,881.9129028320312,1004.4176025390625
|
||||||
|
idle,5.214,-3276.26220703125,881.9129028320312,1004.41748046875
|
||||||
|
idle,5.266,-3299.572265625,881.9129028320312,1004.41748046875
|
||||||
|
idle,5.316,-3334.537353515625,881.912841796875,1004.4173583984375
|
||||||
|
idle,5.367,-3340.34716796875,881.912841796875,1004.4173583984375
|
||||||
|
idle,5.417,-3340.34716796875,881.912841796875,1004.4173583984375
|
||||||
|
idle,5.467,-3340.34716796875,881.912841796875,1004.4173583984375
|
||||||
|
idle,5.519,-3416.122314453125,881.912841796875,1004.417236328125
|
||||||
|
idle,5.569,-3427.77734375,881.912841796875,1004.4171752929688
|
||||||
|
idle,5.619,-3462.7421875,881.9127807617188,1004.4171142578125
|
||||||
|
idle,5.669,-3491.897216796875,881.9127807617188,1004.4170532226562
|
||||||
|
idle,5.719,-3521.017333984375,881.9127807617188,1004.4169921875
|
||||||
|
idle,5.769,-3521.017333984375,881.9127807617188,1004.4169921875
|
||||||
|
idle,5.819,-3521.017333984375,881.9127807617188,1004.4169921875
|
||||||
|
idle,5.87,-3521.017333984375,881.9127807617188,1004.4169921875
|
||||||
|
idle,5.92,-3585.13720703125,881.9127197265625,1004.4168701171875
|
||||||
|
idle,5.97,-3608.447265625,881.9127197265625,1004.4168090820312
|
||||||
|
idle,6.02,-3643.412109375,881.9127197265625,1004.416748046875
|
||||||
|
idle,6.07,-3655.067138671875,881.9127197265625,1004.416748046875
|
||||||
|
idle,6.12,-3672.567138671875,881.9126586914062,1004.4166870117188
|
||||||
|
idle,6.173,-3672.567138671875,881.9126586914062,1004.4166870117188
|
||||||
|
idle,6.223,-3672.567138671875,881.9126586914062,1004.4166870117188
|
||||||
|
idle,6.273,-3736.687255859375,881.9126586914062,1004.4165649414062
|
||||||
|
idle,6.323,-3771.652099609375,881.9126586914062,1004.41650390625
|
||||||
|
idle,6.374,-3783.30712890625,881.9126586914062,1004.41650390625
|
||||||
|
idle,6.424,-3829.92724609375,881.91259765625,1004.4163818359375
|
||||||
|
idle,6.474,-3835.7373046875,881.91259765625,1004.4163818359375
|
||||||
|
idle,6.531,-3835.7373046875,881.91259765625,1004.4163818359375
|
||||||
|
idle,6.581,-3835.7373046875,881.91259765625,1004.4163818359375
|
||||||
|
idle,6.633,-3894.047119140625,881.91259765625,1004.416259765625
|
||||||
|
idle,6.683,-3905.7021484375,881.9125366210938,1004.416259765625
|
||||||
|
idle,6.761,-3952.322265625,881.9125366210938,1004.4161376953125
|
||||||
|
idle,6.811,-3981.442138671875,881.9125366210938,1004.4160766601562
|
||||||
|
idle,6.863,-3987.252197265625,881.9125366210938,1004.4160766601562
|
||||||
|
idle,6.913,-3987.252197265625,881.9125366210938,1004.4160766601562
|
||||||
|
idle,6.963,-3987.252197265625,881.9125366210938,1004.4160766601562
|
||||||
|
idle,7.013,-4039.71728515625,881.9124755859375,1004.4159545898438
|
||||||
|
idle,7.064,-4063.027099609375,881.9124755859375,1004.4158935546875
|
||||||
|
idle,7.114,-4097.9921875,881.9124755859375,1004.4158325195312
|
||||||
|
idle,7.164,-4109.64697265625,881.9124755859375,1004.4158325195312
|
||||||
|
idle,7.214,-4150.42236328125,881.9124145507812,1004.415771484375
|
||||||
|
idle,7.264,-4156.23193359375,881.9124145507812,1004.4157104492188
|
||||||
|
idle,7.315,-4156.23193359375,881.9124145507812,1004.4157104492188
|
||||||
|
idle,7.365,-4156.23193359375,881.9124145507812,1004.4157104492188
|
||||||
|
idle,7.415,-4220.35205078125,881.9124145507812,1004.4155883789062
|
||||||
|
idle,7.466,-4243.662109375,881.912353515625,1004.41552734375
|
||||||
|
idle,7.516,-4278.626953125,881.912353515625,1004.4154663085938
|
||||||
|
idle,7.566,-4307.7822265625,881.912353515625,1004.4154052734375
|
||||||
|
idle,7.616,-4336.90234375,881.912353515625,1004.4153442382812
|
||||||
|
idle,7.667,-4336.90234375,881.912353515625,1004.4153442382812
|
||||||
|
idle,7.717,-4336.90234375,881.912353515625,1004.4153442382812
|
||||||
|
idle,7.767,-4336.90234375,881.912353515625,1004.4153442382812
|
||||||
|
idle,7.82,-4401.02197265625,881.9122924804688,1004.4152221679688
|
||||||
|
idle,7.87,-4424.33203125,881.9122924804688,1004.4152221679688
|
||||||
|
idle,7.92,-4470.9521484375,881.9122314453125,1004.4151000976562
|
||||||
|
idle,7.97,-4482.60693359375,881.9122314453125,1004.4151000976562
|
||||||
|
RT,0.0,-4511.76220703125,881.9122314453125,1004.4150390625
|
||||||
|
RT,0.05,-4511.76220703125,881.9122314453125,1004.4150390625
|
||||||
|
RT,0.1,-4511.76220703125,881.9122314453125,1004.4150390625
|
||||||
|
RT,0.151,-4591.10205078125,881.9121704101562,1004.4148559570312
|
||||||
|
RT,0.203,-4631.14013671875,881.9121704101562,1004.414794921875
|
||||||
|
RT,0.253,-4688.6787109375,881.9121704101562,1004.4146728515625
|
||||||
|
RT,0.303,-4745.97314453125,881.912109375,1004.41455078125
|
||||||
|
RT,0.353,-4758.11572265625,881.912109375,1004.4144897460938
|
||||||
|
RT,0.404,-4758.11572265625,881.912109375,1004.4144897460938
|
||||||
|
RT,0.454,-4758.11572265625,881.912109375,1004.4144897460938
|
||||||
|
RT,0.504,-4894.6865234375,881.9120483398438,1004.4142456054688
|
||||||
|
RT,0.554,-4976.0556640625,881.9119873046875,1004.4140625
|
||||||
|
RT,0.605,-5047.275390625,881.9119262695312,1004.4139404296875
|
||||||
|
RT,0.655,-5163.5263671875,881.911865234375,1004.4136962890625
|
||||||
|
RT,0.705,-5203.26416015625,881.911865234375,1004.4136352539062
|
||||||
|
RT,0.756,-5223.07373046875,881.911865234375,1004.41357421875
|
||||||
|
RT,0.806,-5223.07373046875,881.911865234375,1004.41357421875
|
||||||
|
RT,0.857,-5223.07373046875,881.911865234375,1004.41357421875
|
||||||
|
RT,0.908,-5421.8828125,881.9117431640625,1004.4132080078125
|
||||||
|
RT,0.989,-5541.0966796875,881.9116821289062,1004.4129638671875
|
||||||
|
RT,1.039,-5700.048828125,881.91162109375,1004.41259765625
|
||||||
|
RT,1.09,-5739.78662109375,881.9115600585938,1004.4125366210938
|
||||||
|
RT,1.14,-5779.52490234375,881.9115600585938,1004.4124755859375
|
||||||
|
RT,1.19,-5779.52490234375,881.9115600585938,1004.4124755859375
|
||||||
|
RT,1.24,-5779.52490234375,881.9115600585938,1004.4124755859375
|
||||||
|
RT,1.29,-5978.333984375,881.9114379882812,1004.4120483398438
|
||||||
|
RT,1.341,-6097.54833984375,881.911376953125,1004.4118041992188
|
||||||
|
RT,1.391,-6177.02392578125,881.9113159179688,1004.4116821289062
|
||||||
|
RT,1.441,-6316.1669921875,881.9112548828125,1004.411376953125
|
||||||
|
RT,1.491,-6355.90478515625,881.9112548828125,1004.4113159179688
|
||||||
|
RT,1.541,-6455.3095703125,881.9111938476562,1004.4110717773438
|
||||||
|
RT,1.591,-6455.3095703125,881.9111938476562,1004.4110717773438
|
||||||
|
RT,1.641,-6455.3095703125,881.9111938476562,1004.4110717773438
|
||||||
|
RT,1.691,-6455.3095703125,881.9111938476562,1004.4110717773438
|
||||||
|
RT,1.742,-6713.666015625,881.9110717773438,1004.4105834960938
|
||||||
|
RT,1.792,-6793.14208984375,881.9110107421875,1004.410400390625
|
||||||
|
RT,1.842,-6912.35595703125,881.9109497070312,1004.41015625
|
||||||
|
RT,1.892,-6952.09423828125,881.9109497070312,1004.4100952148438
|
||||||
|
RT,1.942,-7011.6416015625,881.910888671875,1004.4099731445312
|
||||||
|
RT,1.992,-7011.6416015625,881.910888671875,1004.4099731445312
|
||||||
|
RT,2.042,-7011.6416015625,881.910888671875,1004.4099731445312
|
||||||
|
RT,2.092,-7011.6416015625,881.910888671875,1004.4099731445312
|
||||||
|
RT,2.144,-7269.998046875,881.9107666015625,1004.409423828125
|
||||||
|
RT,2.194,-7369.40283203125,881.9107055664062,1004.4092407226562
|
||||||
|
RT,2.244,-7488.61669921875,881.91064453125,1004.4089965820312
|
||||||
|
RT,2.294,-7528.3544921875,881.91064453125,1004.408935546875
|
||||||
|
RT,2.347,-7587.90185546875,881.9105834960938,1004.4088134765625
|
||||||
|
RT,2.397,-7587.90185546875,881.9105834960938,1004.4088134765625
|
||||||
|
RT,2.448,-7587.90185546875,881.9105834960938,1004.4088134765625
|
||||||
|
RT,2.498,-7587.90185546875,881.9105834960938,1004.4088134765625
|
||||||
|
RT,2.549,-7826.44921875,881.9104614257812,1004.4083251953125
|
||||||
|
RT,2.599,-7965.591796875,881.910400390625,1004.4080200195312
|
||||||
|
RT,2.65,-8084.80615234375,881.9103393554688,1004.4077758789062
|
||||||
|
RT,2.7,-8124.5439453125,881.9102783203125,1004.40771484375
|
||||||
|
RT,2.751,-8164.16259765625,881.9102783203125,1004.4076538085938
|
||||||
|
RT,2.801,-8164.16259765625,881.9102783203125,1004.4076538085938
|
||||||
|
RT,2.852,-8164.16259765625,881.9102783203125,1004.4076538085938
|
||||||
|
RT,2.902,-8164.16259765625,881.9102783203125,1004.4076538085938
|
||||||
|
RT,2.952,-8422.638671875,881.91015625,1004.4071044921875
|
||||||
|
RT,3.004,-8502.1142578125,881.9100952148438,1004.4069213867188
|
||||||
|
RT,3.054,-8621.3291015625,881.9100341796875,1004.4066772460938
|
||||||
|
RT,3.104,-8661.06640625,881.9100341796875,1004.4066162109375
|
||||||
|
RT,3.155,-8740.4228515625,881.9099731445312,1004.4064331054688
|
||||||
|
RT,3.205,-8740.4228515625,881.9099731445312,1004.4064331054688
|
||||||
|
RT,3.29,-8740.4228515625,881.9099731445312,1004.4064331054688
|
||||||
|
RT,3.34,-8939.232421875,881.9098510742188,1004.4060668945312
|
||||||
|
RT,3.39,-8998.7802734375,881.9098510742188,1004.4059448242188
|
||||||
|
RT,3.44,-9137.9228515625,881.9097290039062,1004.4056396484375
|
||||||
|
RT,3.49,-9177.66015625,881.9097290039062,1004.4055786132812
|
||||||
|
RT,3.54,-9276.9462890625,881.90966796875,1004.4053955078125
|
||||||
|
RT,3.592,-9296.7548828125,881.90966796875,1004.4053344726562
|
||||||
|
RT,3.642,-9296.7548828125,881.90966796875,1004.4053344726562
|
||||||
|
RT,3.692,-9296.7548828125,881.90966796875,1004.4053344726562
|
||||||
|
RT,3.747,-9555.1123046875,881.9095458984375,1004.40478515625
|
||||||
|
RT,3.797,-9614.7783203125,881.9094848632812,1004.4046630859375
|
||||||
|
RT,3.847,-9733.9921875,881.909423828125,1004.4044189453125
|
||||||
|
RT,3.898,-9793.6591796875,881.909423828125,1004.404296875
|
||||||
|
RT,3.948,-9873.015625,881.9093627929688,1004.4041748046875
|
||||||
|
RT,3.998,-9873.015625,881.9093627929688,1004.4041748046875
|
||||||
|
RT,4.048,-9873.015625,881.9093627929688,1004.4041748046875
|
||||||
|
RT,4.098,-9873.015625,881.9093627929688,1004.4041748046875
|
||||||
|
RT,4.148,-10111.5634765625,881.9092407226562,1004.4036865234375
|
||||||
|
RT,4.198,-10151.30078125,881.9092407226562,1004.4036254882812
|
||||||
|
RT,4.249,-10310.2529296875,881.9091186523438,1004.4032592773438
|
||||||
|
RT,4.3,-10349.9912109375,881.9091186523438,1004.4031982421875
|
||||||
|
RT,4.35,-10469.205078125,881.9090576171875,1004.4029541015625
|
||||||
|
RT,4.4,-10469.205078125,881.9090576171875,1004.4029541015625
|
||||||
|
RT,4.451,-10469.205078125,881.9090576171875,1004.4029541015625
|
||||||
|
RT,4.501,-10469.205078125,881.9090576171875,1004.4029541015625
|
||||||
|
RT,4.551,-10727.5615234375,881.9088745117188,1004.4024047851562
|
||||||
|
RT,4.601,-10727.5615234375,881.9088745117188,1004.4024047851562
|
||||||
|
RT,4.651,-10906.4423828125,881.9088134765625,1004.4020385742188
|
||||||
|
RT,4.704,-11005.8466796875,881.9087524414062,1004.40185546875
|
||||||
|
RT,4.754,-11065.39453125,881.9087524414062,1004.4017333984375
|
||||||
|
RT,4.804,-11065.39453125,881.9087524414062,1004.4017333984375
|
||||||
|
RT,4.855,-11065.39453125,881.9087524414062,1004.4017333984375
|
||||||
|
RT,4.905,-11065.39453125,881.9087524414062,1004.4017333984375
|
||||||
|
RT,4.957,-11323.7509765625,881.9085693359375,1004.4012451171875
|
||||||
|
RT,5.007,-11423.15625,881.9085083007812,1004.4010009765625
|
||||||
|
RT,5.058,-11542.3701171875,881.908447265625,1004.4007568359375
|
||||||
|
RT,5.108,-11621.845703125,881.908447265625,1004.400634765625
|
||||||
|
RT,5.158,-11681.3935546875,881.9083862304688,1004.4005126953125
|
||||||
|
RT,5.208,-11681.3935546875,881.9083862304688,1004.4005126953125
|
||||||
|
RT,5.259,-11681.3935546875,881.9083862304688,1004.4005126953125
|
||||||
|
RT,5.309,-11681.3935546875,881.9083862304688,1004.4005126953125
|
||||||
|
RT,5.36,-11939.75,881.9082641601562,1004.3999633789062
|
||||||
|
RT,5.41,-12058.9638671875,881.908203125,1004.3997192382812
|
||||||
|
RT,5.489,-12178.177734375,881.9081420898438,1004.3994750976562
|
||||||
|
RT,5.539,-12297.3916015625,881.9080810546875,1004.3992309570312
|
||||||
|
RT,5.59,-12297.3916015625,881.9080810546875,1004.3992309570312
|
||||||
|
RT,5.64,-12297.3916015625,881.9080810546875,1004.3992309570312
|
||||||
|
RT,5.69,-12297.3916015625,881.9080810546875,1004.3992309570312
|
||||||
|
RT,5.743,-12555.748046875,881.9078979492188,1004.3987426757812
|
||||||
|
RT,5.793,-12595.486328125,881.9078979492188,1004.398681640625
|
||||||
|
RT,5.844,-12714.7001953125,881.9078369140625,1004.3984375
|
||||||
|
RT,5.894,-12814.10546875,881.9077758789062,1004.398193359375
|
||||||
|
RT,5.944,-12913.390625,881.90771484375,1004.3980102539062
|
||||||
|
RT,5.994,-12913.390625,881.90771484375,1004.3980102539062
|
||||||
|
RT,6.044,-12913.390625,881.90771484375,1004.3980102539062
|
||||||
|
RT,6.094,-12913.390625,881.90771484375,1004.3980102539062
|
||||||
|
RT,6.144,-13132.0087890625,881.9075927734375,1004.3975830078125
|
||||||
|
RT,6.195,-13171.7470703125,881.9075927734375,1004.3975219726562
|
||||||
|
RT,6.246,-13350.6279296875,881.907470703125,1004.3971557617188
|
||||||
|
RT,6.296,-13390.365234375,881.907470703125,1004.3970336914062
|
||||||
|
RT,6.347,-13489.6513671875,881.9074096679688,1004.3968505859375
|
||||||
|
RT,6.397,-13489.6513671875,881.9074096679688,1004.3968505859375
|
||||||
|
RT,6.447,-13489.6513671875,881.9074096679688,1004.3968505859375
|
||||||
|
RT,6.497,-13489.6513671875,881.9074096679688,1004.3968505859375
|
||||||
|
RT,6.548,-13728.1982421875,881.9072875976562,1004.3963623046875
|
||||||
|
RT,6.598,-13807.673828125,881.9072265625,1004.3961791992188
|
||||||
|
RT,6.649,-13966.6259765625,881.9071655273438,1004.3958740234375
|
||||||
|
RT,6.701,-14066.03125,881.9071044921875,1004.3956909179688
|
||||||
|
RT,6.752,-14125.578125,881.9071044921875,1004.3955688476562
|
||||||
|
RT,6.802,-14125.578125,881.9071044921875,1004.3955688476562
|
||||||
|
RT,6.852,-14125.578125,881.9071044921875,1004.3955688476562
|
||||||
|
RT,6.902,-14125.578125,881.9071044921875,1004.3955688476562
|
||||||
|
RT,6.952,-14383.9345703125,881.9069213867188,1004.39501953125
|
||||||
|
RT,7.002,-14443.6015625,881.9069213867188,1004.3948974609375
|
||||||
|
RT,7.052,-14562.8154296875,881.9068603515625,1004.3946533203125
|
||||||
|
RT,7.102,-14602.5537109375,881.9067993164062,1004.3945922851562
|
||||||
|
RT,7.152,-14721.767578125,881.90673828125,1004.3943481445312
|
||||||
|
RT,7.202,-14721.767578125,881.90673828125,1004.3943481445312
|
||||||
|
RT,7.252,-14721.767578125,881.90673828125,1004.3943481445312
|
||||||
|
RT,7.302,-14721.767578125,881.90673828125,1004.3943481445312
|
||||||
|
RT,7.354,-14960.314453125,881.9066162109375,1004.3938598632812
|
||||||
|
RT,7.404,-15059.7197265625,881.9065551757812,1004.3936767578125
|
||||||
|
RT,7.455,-15178.93359375,881.906494140625,1004.3934326171875
|
||||||
|
RT,7.505,-15278.337890625,881.9064331054688,1004.3932495117188
|
||||||
|
RT,7.555,-15337.8857421875,881.9064331054688,1004.3931274414062
|
||||||
|
RT,7.605,-15337.8857421875,881.9064331054688,1004.3931274414062
|
||||||
|
RT,7.656,-15337.8857421875,881.9064331054688,1004.3931274414062
|
||||||
|
RT,7.706,-15496.95703125,881.9063720703125,1004.3927612304688
|
||||||
|
RT,7.756,-15596.2421875,881.9063110351562,1004.392578125
|
||||||
|
RT,7.806,-15655.9091796875,881.90625,1004.3924560546875
|
||||||
|
RT,7.857,-15775.123046875,881.9061889648438,1004.3922119140625
|
||||||
|
RT,7.907,-15874.52734375,881.9061279296875,1004.3920288085938
|
||||||
|
RT,7.957,-15894.3369140625,881.9061279296875,1004.3919677734375
|
||||||
|
coast,0.0,-15894.3369140625,881.9061279296875,1004.3919677734375
|
||||||
|
coast,0.05,-15894.3369140625,881.9061279296875,1004.3919677734375
|
||||||
|
coast,0.1,-16132.259765625,881.906005859375,1004.3914794921875
|
||||||
|
coast,0.15,-16228.6279296875,881.9059448242188,1004.3912963867188
|
||||||
|
coast,0.201,-16341.4130859375,881.9058837890625,1004.3910522460938
|
||||||
|
coast,0.251,-16414.818359375,881.9058837890625,1004.3909301757812
|
||||||
|
coast,0.302,-16432.935546875,881.9058227539062,1004.390869140625
|
||||||
|
coast,0.352,-16432.935546875,881.9058227539062,1004.390869140625
|
||||||
|
coast,0.402,-16432.935546875,881.9058227539062,1004.390869140625
|
||||||
|
coast,0.453,-16589.41015625,881.90576171875,1004.3905639648438
|
||||||
|
coast,0.503,-16674.68359375,881.9057006835938,1004.390380859375
|
||||||
|
coast,0.553,-16741.302734375,881.9057006835938,1004.3902587890625
|
||||||
|
coast,0.603,-16838.55078125,881.9056396484375,1004.3900756835938
|
||||||
|
coast,0.653,-16870.25390625,881.9056396484375,1004.3900146484375
|
||||||
|
coast,0.705,-16885.966796875,881.9055786132812,1004.3899536132812
|
||||||
|
coast,0.755,-16885.966796875,881.9055786132812,1004.3899536132812
|
||||||
|
coast,0.805,-16885.966796875,881.9055786132812,1004.3899536132812
|
||||||
|
coast,0.855,-17035.544921875,881.905517578125,1004.3896484375
|
||||||
|
coast,0.906,-17122.61328125,881.9054565429688,1004.3894653320312
|
||||||
|
coast,0.956,-17150.923828125,881.9054565429688,1004.389404296875
|
||||||
|
coast,1.006,-17233.70703125,881.9053955078125,1004.3892822265625
|
||||||
|
coast,1.056,-17260.5859375,881.9053955078125,1004.3892211914062
|
||||||
|
coast,1.107,-17287.109375,881.9053955078125,1004.38916015625
|
||||||
|
coast,1.157,-17287.109375,881.9053955078125,1004.38916015625
|
||||||
|
coast,1.207,-17387.55859375,881.9053344726562,1004.3889770507812
|
||||||
|
coast,1.259,-17424.537109375,881.9053344726562,1004.3888549804688
|
||||||
|
coast,1.309,-17496.0703125,881.9052734375,1004.3887329101562
|
||||||
|
coast,1.359,-17541.97265625,881.9052734375,1004.3886108398438
|
||||||
|
coast,1.409,-17586.4453125,881.9052124023438,1004.3885498046875
|
||||||
|
coast,1.459,-17629.4921875,881.9052124023438,1004.3884887695312
|
||||||
|
coast,1.509,-17629.4921875,881.9052124023438,1004.3884887695312
|
||||||
|
coast,1.559,-17629.4921875,881.9052124023438,1004.3884887695312
|
||||||
|
coast,1.611,-17718.390625,881.9051513671875,1004.3883056640625
|
||||||
|
coast,1.661,-17747.33984375,881.9051513671875,1004.3882446289062
|
||||||
|
coast,1.737,-17802.796875,881.9050903320312,1004.3881225585938
|
||||||
|
coast,1.787,-17855.041015625,881.9050903320312,1004.3880004882812
|
||||||
|
coast,1.837,-17871.7421875,881.9050903320312,1004.387939453125
|
||||||
|
coast,1.889,-17896.01171875,881.905029296875,1004.387939453125
|
||||||
|
coast,1.942,-17896.01171875,881.905029296875,1004.387939453125
|
||||||
|
coast,1.992,-17896.01171875,881.905029296875,1004.387939453125
|
||||||
|
coast,2.042,-17976.451171875,881.905029296875,1004.3877563476562
|
||||||
|
coast,2.098,-18003.77734375,881.905029296875,1004.3876953125
|
||||||
|
coast,2.148,-18016.90625,881.9049682617188,1004.3876953125
|
||||||
|
coast,2.198,-18071.580078125,881.9049682617188,1004.3875732421875
|
||||||
|
coast,2.248,-18077.390625,881.9049682617188,1004.3875732421875
|
||||||
|
coast,2.302,-18077.390625,881.9049682617188,1004.3875732421875
|
||||||
|
coast,2.352,-18077.390625,881.9049682617188,1004.3875732421875
|
||||||
|
coast,2.402,-18135.69921875,881.9049072265625,1004.387451171875
|
||||||
|
coast,2.452,-18147.35546875,881.9049072265625,1004.3873901367188
|
||||||
|
coast,2.537,-18193.974609375,881.9049072265625,1004.3873291015625
|
||||||
|
coast,2.587,-18228.939453125,881.9049072265625,1004.3872680664062
|
||||||
|
coast,2.638,-18234.75,881.9049072265625,1004.38720703125
|
||||||
|
coast,2.688,-18234.75,881.9049072265625,1004.38720703125
|
||||||
|
coast,2.738,-18234.75,881.9049072265625,1004.38720703125
|
||||||
|
coast,2.788,-18293.060546875,881.9048461914062,1004.3870849609375
|
||||||
|
coast,2.84,-18310.525390625,881.9048461914062,1004.3870849609375
|
||||||
|
coast,2.89,-18345.490234375,881.9048461914062,1004.3870239257812
|
||||||
|
coast,2.94,-18357.14453125,881.90478515625,1004.386962890625
|
||||||
|
coast,2.99,-18386.265625,881.90478515625,1004.3869018554688
|
||||||
|
coast,3.043,-18392.07421875,881.90478515625,1004.3869018554688
|
||||||
|
coast,3.093,-18392.07421875,881.90478515625,1004.3869018554688
|
||||||
|
coast,3.143,-18392.07421875,881.90478515625,1004.3869018554688
|
||||||
|
coast,3.193,-18467.849609375,881.9047241210938,1004.3867797851562
|
||||||
|
coast,3.243,-18479.505859375,881.9047241210938,1004.38671875
|
||||||
|
coast,3.293,-18514.470703125,881.9047241210938,1004.3866577148438
|
||||||
|
coast,3.343,-18537.779296875,881.9047241210938,1004.3865966796875
|
||||||
|
coast,3.394,-18561.0546875,881.9047241210938,1004.3865966796875
|
||||||
|
coast,3.445,-18561.0546875,881.9047241210938,1004.3865966796875
|
||||||
|
coast,3.495,-18561.0546875,881.9047241210938,1004.3865966796875
|
||||||
|
coast,3.546,-18561.0546875,881.9047241210938,1004.3865966796875
|
||||||
|
coast,3.596,-18631.01953125,881.9046630859375,1004.3864135742188
|
||||||
|
coast,3.646,-18654.330078125,881.9046630859375,1004.3863525390625
|
||||||
|
coast,3.697,-18700.94921875,881.9046020507812,1004.3862915039062
|
||||||
|
coast,3.747,-18712.60546875,881.9046020507812,1004.3862915039062
|
||||||
|
coast,3.797,-18747.5703125,881.9046020507812,1004.3861694335938
|
||||||
|
coast,3.847,-18747.5703125,881.9046020507812,1004.3861694335938
|
||||||
|
coast,3.897,-18747.5703125,881.9046020507812,1004.3861694335938
|
||||||
|
coast,3.947,-18747.5703125,881.9046020507812,1004.3861694335938
|
||||||
|
coast,3.998,-18823.345703125,881.904541015625,1004.3860473632812
|
||||||
|
coast,4.048,-18846.654296875,881.904541015625,1004.385986328125
|
||||||
|
coast,4.098,-18881.619140625,881.904541015625,1004.3859252929688
|
||||||
|
coast,4.148,-18904.9296875,881.904541015625,1004.3858642578125
|
||||||
|
coast,4.199,-18910.740234375,881.904541015625,1004.3858642578125
|
||||||
|
coast,4.249,-18910.740234375,881.904541015625,1004.3858642578125
|
||||||
|
coast,4.299,-18910.740234375,881.904541015625,1004.3858642578125
|
||||||
|
coast,4.349,-18910.740234375,881.904541015625,1004.3858642578125
|
||||||
|
coast,4.399,-18980.705078125,881.9044799804688,1004.3857421875
|
||||||
|
coast,4.449,-19021.515625,881.9044799804688,1004.3856201171875
|
||||||
|
coast,4.499,-19056.48046875,881.9044189453125,1004.3855590820312
|
||||||
|
coast,4.549,-19068.134765625,881.9044189453125,1004.3855590820312
|
||||||
|
coast,4.6,-19073.9453125,881.9044189453125,1004.385498046875
|
||||||
|
coast,4.65,-19073.9453125,881.9044189453125,1004.385498046875
|
||||||
|
coast,4.7,-19073.9453125,881.9044189453125,1004.385498046875
|
||||||
|
coast,4.751,-19138.099609375,881.9044189453125,1004.3853759765625
|
||||||
|
coast,4.801,-19155.564453125,881.9043579101562,1004.3853759765625
|
||||||
|
coast,4.851,-19190.529296875,881.9043579101562,1004.3853149414062
|
||||||
|
coast,4.902,-19225.494140625,881.9043579101562,1004.3851928710938
|
||||||
|
coast,4.952,-19237.150390625,881.9043579101562,1004.3851928710938
|
||||||
|
coast,5.005,-19242.958984375,881.9043579101562,1004.3851928710938
|
||||||
|
coast,5.055,-19242.958984375,881.9043579101562,1004.3851928710938
|
||||||
|
coast,5.109,-19242.958984375,881.9043579101562,1004.3851928710938
|
||||||
|
coast,5.159,-19312.92578125,881.904296875,1004.3850708007812
|
||||||
|
coast,5.209,-19347.890625,881.904296875,1004.3849487304688
|
||||||
|
coast,5.259,-19377.044921875,881.9042358398438,1004.3848876953125
|
||||||
|
coast,5.31,-19412.009765625,881.9042358398438,1004.3848266601562
|
||||||
|
coast,5.36,-19423.6640625,881.9042358398438,1004.3848266601562
|
||||||
|
coast,5.411,-19423.6640625,881.9042358398438,1004.3848266601562
|
||||||
|
coast,5.461,-19423.6640625,881.9042358398438,1004.3848266601562
|
||||||
|
coast,5.537,-19481.974609375,881.9042358398438,1004.3847045898438
|
||||||
|
coast,5.587,-19522.78515625,881.9041748046875,1004.3846435546875
|
||||||
|
coast,5.637,-19534.439453125,881.9041748046875,1004.3845825195312
|
||||||
|
coast,5.687,-19569.404296875,881.9041748046875,1004.384521484375
|
||||||
|
coast,5.737,-19586.869140625,881.9041748046875,1004.3844604492188
|
||||||
|
coast,5.787,-19586.869140625,881.9041748046875,1004.3844604492188
|
||||||
|
coast,5.839,-19586.869140625,881.9041748046875,1004.3844604492188
|
||||||
|
coast,5.889,-19586.869140625,881.9041748046875,1004.3844604492188
|
||||||
|
coast,5.939,-19650.990234375,881.9041137695312,1004.3843383789062
|
||||||
|
coast,5.989,-19685.955078125,881.9041137695312,1004.38427734375
|
||||||
|
coast,6.039,-19697.609375,881.9041137695312,1004.38427734375
|
||||||
|
coast,6.09,-19744.23046875,881.904052734375,1004.3841552734375
|
||||||
|
coast,6.14,-19755.849609375,881.904052734375,1004.3841552734375
|
||||||
|
coast,6.192,-19755.849609375,881.904052734375,1004.3841552734375
|
||||||
|
coast,6.242,-19755.849609375,881.904052734375,1004.3841552734375
|
||||||
|
coast,6.292,-19814.16015625,881.904052734375,1004.384033203125
|
||||||
|
coast,6.343,-19831.625,881.9039916992188,1004.3839721679688
|
||||||
|
coast,6.393,-19878.244140625,881.9039916992188,1004.3839111328125
|
||||||
|
coast,6.443,-19889.900390625,881.9039916992188,1004.3838500976562
|
||||||
|
coast,6.494,-19913.173828125,881.9039916992188,1004.3838500976562
|
||||||
|
coast,6.544,-19913.173828125,881.9039916992188,1004.3838500976562
|
||||||
|
coast,6.594,-19913.173828125,881.9039916992188,1004.3838500976562
|
||||||
|
coast,6.644,-19913.173828125,881.9039916992188,1004.3838500976562
|
||||||
|
coast,6.694,-19988.94921875,881.9039306640625,1004.3836669921875
|
||||||
|
coast,6.744,-20006.44921875,881.9039306640625,1004.3836059570312
|
||||||
|
coast,6.795,-20041.4140625,881.9039306640625,1004.383544921875
|
||||||
|
coast,6.846,-20070.5703125,881.9038696289062,1004.3834838867188
|
||||||
|
coast,6.896,-20088.03515625,881.9038696289062,1004.3834838867188
|
||||||
|
coast,6.946,-20088.03515625,881.9038696289062,1004.3834838867188
|
||||||
|
coast,6.996,-20088.03515625,881.9038696289062,1004.3834838867188
|
||||||
|
coast,7.046,-20088.03515625,881.9038696289062,1004.3834838867188
|
||||||
|
coast,7.097,-20152.154296875,881.9038696289062,1004.3833618164062
|
||||||
|
coast,7.147,-20192.96484375,881.90380859375,1004.3832397460938
|
||||||
|
coast,7.197,-20227.9296875,881.90380859375,1004.3831787109375
|
||||||
|
coast,7.247,-20245.4296875,881.90380859375,1004.3831787109375
|
||||||
|
coast,7.298,-20257.083984375,881.90380859375,1004.3831176757812
|
||||||
|
coast,7.348,-20257.083984375,881.90380859375,1004.3831176757812
|
||||||
|
coast,7.399,-20257.083984375,881.90380859375,1004.3831176757812
|
||||||
|
coast,7.449,-20315.39453125,881.9037475585938,1004.3829956054688
|
||||||
|
coast,7.499,-20344.515625,881.9037475585938,1004.3829345703125
|
||||||
|
coast,7.55,-20367.82421875,881.9037475585938,1004.3828735351562
|
||||||
|
coast,7.6,-20414.4453125,881.9036865234375,1004.3828125
|
||||||
|
coast,7.65,-20426.099609375,881.9036865234375,1004.3828125
|
||||||
|
coast,7.702,-20437.75390625,881.9036865234375,1004.3827514648438
|
||||||
|
coast,7.752,-20437.75390625,881.9036865234375,1004.3827514648438
|
||||||
|
coast,7.802,-20437.75390625,881.9036865234375,1004.3827514648438
|
||||||
|
coast,7.852,-20507.71875,881.9036865234375,1004.3826293945312
|
||||||
|
coast,7.902,-20542.685546875,881.9036254882812,1004.382568359375
|
||||||
|
coast,7.952,-20554.33984375,881.9036254882812,1004.3825073242188
|
||||||
|
LT,0.0,-20600.958984375,881.9036254882812,1004.3824462890625
|
||||||
|
LT,0.05,-20600.958984375,881.9036254882812,1004.3824462890625
|
||||||
|
LT,0.104,-20600.958984375,881.9036254882812,1004.3824462890625
|
||||||
|
LT,0.175,-20641.892578125,881.903564453125,1004.38232421875
|
||||||
|
LT,0.225,-20670.3359375,881.903564453125,1004.3822631835938
|
||||||
|
LT,0.275,-20679.1328125,881.903564453125,1004.3822631835938
|
||||||
|
LT,0.325,-20703.380859375,881.903564453125,1004.3822021484375
|
||||||
|
LT,0.376,-20714.333984375,881.903564453125,1004.3822021484375
|
||||||
|
LT,0.426,-20714.333984375,881.903564453125,1004.3822021484375
|
||||||
|
LT,0.479,-20714.333984375,881.903564453125,1004.3822021484375
|
||||||
|
LT,0.529,-20714.333984375,881.903564453125,1004.3822021484375
|
||||||
|
LT,0.579,-20745.40234375,881.9035034179688,1004.3821411132812
|
||||||
|
LT,0.629,-20758.935546875,881.9035034179688,1004.3821411132812
|
||||||
|
LT,0.679,-20762.732421875,881.9035034179688,1004.382080078125
|
||||||
|
LT,0.729,-20772.962890625,881.9035034179688,1004.382080078125
|
||||||
|
LT,0.779,-20778.05078125,881.9035034179688,1004.382080078125
|
||||||
|
LT,0.829,-20778.05078125,881.9035034179688,1004.382080078125
|
||||||
|
LT,0.88,-20778.05078125,881.9035034179688,1004.382080078125
|
||||||
|
LT,0.93,-20795.037109375,881.9035034179688,1004.3820190429688
|
||||||
|
LT,0.981,-20800.125,881.9035034179688,1004.3820190429688
|
||||||
|
LT,1.031,-20808.619140625,881.9035034179688,1004.3820190429688
|
||||||
|
LT,1.081,-20817.11328125,881.9035034179688,1004.3820190429688
|
||||||
|
LT,1.131,-20827.298828125,881.9035034179688,1004.3819580078125
|
||||||
|
LT,1.183,-20828.990234375,881.9035034179688,1004.3819580078125
|
||||||
|
LT,1.233,-20828.990234375,881.9035034179688,1004.3819580078125
|
||||||
|
LT,1.283,-20828.990234375,881.9035034179688,1004.3819580078125
|
||||||
|
LT,1.335,-20847.669921875,881.9035034179688,1004.3819580078125
|
||||||
|
LT,1.386,-20854.4609375,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.436,-20864.646484375,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.486,-20868.041015625,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.536,-20874.822265625,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.586,-20874.822265625,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.636,-20874.822265625,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.686,-20874.822265625,881.9034423828125,1004.3818969726562
|
||||||
|
LT,1.737,-20895.203125,881.9034423828125,1004.3818359375
|
||||||
|
LT,1.787,-20903.697265625,881.9034423828125,1004.3818359375
|
||||||
|
LT,1.837,-20913.8828125,881.9034423828125,1004.3817749023438
|
||||||
|
LT,1.887,-20917.279296875,881.9034423828125,1004.3817749023438
|
||||||
|
LT,1.937,-20924.068359375,881.9034423828125,1004.3817749023438
|
||||||
|
LT,1.987,-20924.068359375,881.9034423828125,1004.3817749023438
|
||||||
|
LT,2.037,-20924.068359375,881.9034423828125,1004.3817749023438
|
||||||
|
LT,2.088,-20924.068359375,881.9034423828125,1004.3817749023438
|
||||||
|
LT,2.139,-20946.14453125,881.9034423828125,1004.3817138671875
|
||||||
|
LT,2.189,-20956.330078125,881.9034423828125,1004.3817138671875
|
||||||
|
LT,2.239,-20966.515625,881.9034423828125,1004.3817138671875
|
||||||
|
LT,2.289,-20969.91015625,881.9033813476562,1004.3817138671875
|
||||||
|
LT,2.34,-20971.603515625,881.9033813476562,1004.3816528320312
|
||||||
|
LT,2.39,-20971.603515625,881.9033813476562,1004.3816528320312
|
||||||
|
LT,2.44,-20971.603515625,881.9033813476562,1004.3816528320312
|
||||||
|
LT,2.492,-20991.974609375,881.9033813476562,1004.3816528320312
|
||||||
|
LT,2.542,-21002.16015625,881.9033813476562,1004.381591796875
|
||||||
|
LT,2.592,-21005.556640625,881.9033813476562,1004.381591796875
|
||||||
|
LT,2.642,-21015.7421875,881.9033813476562,1004.381591796875
|
||||||
|
LT,2.693,-21017.435546875,881.9033813476562,1004.381591796875
|
||||||
|
LT,2.775,-21017.435546875,881.9033813476562,1004.381591796875
|
||||||
|
LT,2.825,-21017.435546875,881.9033813476562,1004.381591796875
|
||||||
|
LT,2.878,-21037.81640625,881.9033813476562,1004.3815307617188
|
||||||
|
LT,2.928,-21048.001953125,881.9033813476562,1004.3815307617188
|
||||||
|
LT,2.978,-21051.3984375,881.9033813476562,1004.3815307617188
|
||||||
|
LT,3.029,-21061.583984375,881.9033813476562,1004.3814697265625
|
||||||
|
LT,3.079,-21063.275390625,881.9033813476562,1004.3814697265625
|
||||||
|
LT,3.129,-21063.275390625,881.9033813476562,1004.3814697265625
|
||||||
|
LT,3.179,-21063.275390625,881.9033813476562,1004.3814697265625
|
||||||
|
LT,3.229,-21081.955078125,881.9033203125,1004.3814697265625
|
||||||
|
LT,3.279,-21090.44921875,881.9033203125,1004.3814697265625
|
||||||
|
LT,3.329,-21097.240234375,881.9033203125,1004.3814086914062
|
||||||
|
LT,3.379,-21100.634765625,881.9033203125,1004.3814086914062
|
||||||
|
LT,3.429,-21110.8203125,881.9033203125,1004.3814086914062
|
||||||
|
LT,3.48,-21110.8203125,881.9033203125,1004.3814086914062
|
||||||
|
LT,3.53,-21110.8203125,881.9033203125,1004.3814086914062
|
||||||
|
LT,3.58,-21110.8203125,881.9033203125,1004.3814086914062
|
||||||
|
LT,3.631,-21132.89453125,881.9033203125,1004.38134765625
|
||||||
|
LT,3.681,-21143.080078125,881.9033203125,1004.38134765625
|
||||||
|
LT,3.731,-21153.267578125,881.9033203125,1004.3812866210938
|
||||||
|
LT,3.781,-21160.056640625,881.9033203125,1004.3812866210938
|
||||||
|
LT,3.831,-21163.453125,881.9033203125,1004.3812866210938
|
||||||
|
LT,3.882,-21163.453125,881.9033203125,1004.3812866210938
|
||||||
|
LT,3.932,-21163.453125,881.9033203125,1004.3812866210938
|
||||||
|
LT,3.982,-21177.033203125,881.9033203125,1004.3812866210938
|
||||||
|
LT,4.035,-21188.921875,881.9033203125,1004.3812255859375
|
||||||
|
LT,4.085,-21199.107421875,881.9032592773438,1004.3812255859375
|
||||||
|
LT,4.135,-21205.8984375,881.9032592773438,1004.3812255859375
|
||||||
|
LT,4.187,-21207.591796875,881.9032592773438,1004.3812255859375
|
||||||
|
LT,4.237,-21207.591796875,881.9032592773438,1004.3812255859375
|
||||||
|
LT,4.287,-21207.591796875,881.9032592773438,1004.3812255859375
|
||||||
|
LT,4.337,-21222.875,881.9032592773438,1004.3811645507812
|
||||||
|
LT,4.387,-21229.666015625,881.9032592773438,1004.3811645507812
|
||||||
|
LT,4.437,-21239.8515625,881.9032592773438,1004.3811645507812
|
||||||
|
LT,4.487,-21244.94921875,881.9032592773438,1004.381103515625
|
||||||
|
LT,4.537,-21251.73046875,881.9032592773438,1004.381103515625
|
||||||
|
LT,4.587,-21251.73046875,881.9032592773438,1004.381103515625
|
||||||
|
LT,4.638,-21251.73046875,881.9032592773438,1004.381103515625
|
||||||
|
LT,4.688,-21251.73046875,881.9032592773438,1004.381103515625
|
||||||
|
LT,4.741,-21272.111328125,881.9032592773438,1004.381103515625
|
||||||
|
LT,4.791,-21284.0,881.9032592773438,1004.3810424804688
|
||||||
|
LT,4.841,-21290.791015625,881.9032592773438,1004.3810424804688
|
||||||
|
LT,4.891,-21297.58203125,881.9032592773438,1004.3810424804688
|
||||||
|
LT,4.942,-21299.275390625,881.9032592773438,1004.3810424804688
|
||||||
|
LT,4.992,-21299.275390625,881.9032592773438,1004.3810424804688
|
||||||
|
LT,5.042,-21299.275390625,881.9032592773438,1004.3810424804688
|
||||||
|
LT,5.092,-21316.26171875,881.9031982421875,1004.3809814453125
|
||||||
|
LT,5.142,-21324.744140625,881.9031982421875,1004.3809814453125
|
||||||
|
LT,5.192,-21331.53515625,881.9031982421875,1004.3809814453125
|
||||||
|
LT,5.242,-21341.720703125,881.9031982421875,1004.3809204101562
|
||||||
|
LT,5.292,-21346.818359375,881.9031982421875,1004.3809204101562
|
||||||
|
LT,5.343,-21350.21484375,881.9031982421875,1004.3809204101562
|
||||||
|
LT,5.393,-21350.21484375,881.9031982421875,1004.3809204101562
|
||||||
|
LT,5.443,-21362.103515625,881.9031982421875,1004.3809204101562
|
||||||
|
LT,5.493,-21370.5859375,881.9031982421875,1004.380859375
|
||||||
|
LT,5.578,-21380.771484375,881.9031982421875,1004.380859375
|
||||||
|
LT,5.628,-21390.95703125,881.9031982421875,1004.380859375
|
||||||
|
LT,5.678,-21396.044921875,881.9031982421875,1004.3807983398438
|
||||||
|
LT,5.728,-21396.044921875,881.9031982421875,1004.3807983398438
|
||||||
|
LT,5.778,-21396.044921875,881.9031982421875,1004.3807983398438
|
||||||
|
LT,5.828,-21413.03125,881.9031982421875,1004.3807983398438
|
||||||
|
LT,5.882,-21418.119140625,881.9031982421875,1004.3807983398438
|
||||||
|
LT,5.932,-21430.0078125,881.9031372070312,1004.3807373046875
|
||||||
|
LT,5.983,-21436.798828125,881.9031372070312,1004.3807373046875
|
||||||
|
LT,6.033,-21443.58984375,881.9031372070312,1004.3807373046875
|
||||||
|
LT,6.085,-21445.283203125,881.9031372070312,1004.3807373046875
|
||||||
|
LT,6.135,-21445.283203125,881.9031372070312,1004.3807373046875
|
||||||
|
LT,6.185,-21445.283203125,881.9031372070312,1004.3807373046875
|
||||||
|
LT,6.235,-21463.9609375,881.9031372070312,1004.3806762695312
|
||||||
|
LT,6.285,-21469.060546875,881.9031372070312,1004.3806762695312
|
||||||
|
LT,6.335,-21479.24609375,881.9031372070312,1004.3806762695312
|
||||||
|
LT,6.385,-21482.640625,881.9031372070312,1004.3806762695312
|
||||||
|
LT,6.438,-21489.431640625,881.9031372070312,1004.380615234375
|
||||||
|
LT,6.488,-21489.431640625,881.9031372070312,1004.380615234375
|
||||||
|
LT,6.538,-21489.431640625,881.9031372070312,1004.380615234375
|
||||||
|
LT,6.588,-21506.41796875,881.9031372070312,1004.380615234375
|
||||||
|
LT,6.638,-21514.900390625,881.9031372070312,1004.3805541992188
|
||||||
|
LT,6.689,-21525.087890625,881.9031372070312,1004.3805541992188
|
||||||
|
LT,6.739,-21535.2734375,881.9031372070312,1004.3805541992188
|
||||||
|
LT,6.789,-21538.66796875,881.903076171875,1004.3805541992188
|
||||||
|
LT,6.84,-21542.064453125,881.903076171875,1004.3805541992188
|
||||||
|
LT,6.89,-21542.064453125,881.903076171875,1004.3805541992188
|
||||||
|
LT,6.94,-21542.064453125,881.903076171875,1004.3805541992188
|
||||||
|
LT,6.99,-21560.7421875,881.903076171875,1004.3804931640625
|
||||||
|
LT,7.075,-21570.927734375,881.903076171875,1004.3804931640625
|
||||||
|
LT,7.125,-21581.115234375,881.903076171875,1004.3804321289062
|
||||||
|
LT,7.175,-21586.203125,881.903076171875,1004.3804321289062
|
||||||
|
LT,7.225,-21586.203125,881.903076171875,1004.3804321289062
|
||||||
|
LT,7.275,-21586.203125,881.903076171875,1004.3804321289062
|
||||||
|
LT,7.325,-21603.189453125,881.903076171875,1004.3804321289062
|
||||||
|
LT,7.376,-21608.27734375,881.903076171875,1004.38037109375
|
||||||
|
LT,7.426,-21620.166015625,881.903076171875,1004.38037109375
|
||||||
|
LT,7.476,-21620.166015625,881.903076171875,1004.38037109375
|
||||||
|
LT,7.526,-21632.04296875,881.903076171875,1004.38037109375
|
||||||
|
LT,7.577,-21633.736328125,881.903076171875,1004.38037109375
|
||||||
|
LT,7.627,-21633.736328125,881.903076171875,1004.38037109375
|
||||||
|
LT,7.677,-21633.736328125,881.903076171875,1004.38037109375
|
||||||
|
LT,7.729,-21652.416015625,881.9030151367188,1004.3803100585938
|
||||||
|
LT,7.779,-21659.20703125,881.9030151367188,1004.3803100585938
|
||||||
|
LT,7.829,-21672.787109375,881.9030151367188,1004.3802490234375
|
||||||
|
LT,7.879,-21676.18359375,881.9030151367188,1004.3802490234375
|
||||||
|
LT,7.929,-21681.271484375,881.9030151367188,1004.3802490234375
|
||||||
|
LT,7.979,-21681.271484375,881.9030151367188,1004.3802490234375
|
||||||
|
coast2,0.0,-21699.958984375,881.9030151367188,1004.3801879882812
|
||||||
|
coast2,0.05,-21709.087890625,881.9030151367188,1004.3801879882812
|
||||||
|
coast2,0.1,-21722.490234375,881.9030151367188,1004.3801879882812
|
||||||
|
coast2,0.15,-21733.17578125,881.9030151367188,1004.380126953125
|
||||||
|
coast2,0.2,-21748.78125,881.9030151367188,1004.380126953125
|
||||||
|
coast2,0.25,-21748.78125,881.9030151367188,1004.380126953125
|
||||||
|
coast2,0.301,-21748.78125,881.9030151367188,1004.380126953125
|
||||||
|
coast2,0.351,-21780.17578125,881.9029541015625,1004.3800659179688
|
||||||
|
coast2,0.401,-21797.376953125,881.9029541015625,1004.3800048828125
|
||||||
|
coast2,0.478,-21826.087890625,881.9029541015625,1004.3799438476562
|
||||||
|
coast2,0.528,-21858.291015625,881.9029541015625,1004.3798828125
|
||||||
|
coast2,0.579,-21875.611328125,881.9029541015625,1004.3798828125
|
||||||
|
coast2,0.629,-21875.611328125,881.9029541015625,1004.3798828125
|
||||||
|
coast2,0.68,-21875.611328125,881.9029541015625,1004.3798828125
|
||||||
|
coast2,0.73,-21875.611328125,881.9029541015625,1004.3798828125
|
||||||
|
coast2,0.78,-21951.38671875,881.9028930664062,1004.3796997070312
|
||||||
|
coast2,0.83,-21986.3515625,881.9028930664062,1004.379638671875
|
||||||
|
coast2,0.881,-21998.005859375,881.90283203125,1004.3795776367188
|
||||||
|
coast2,0.932,-22044.626953125,881.90283203125,1004.3795166015625
|
||||||
|
coast2,0.982,-22062.091796875,881.90283203125,1004.3794555664062
|
||||||
|
coast2,1.032,-22062.091796875,881.90283203125,1004.3794555664062
|
||||||
|
coast2,1.082,-22062.091796875,881.90283203125,1004.3794555664062
|
||||||
|
coast2,1.132,-22062.091796875,881.90283203125,1004.3794555664062
|
||||||
|
coast2,1.183,-22143.7109375,881.9027709960938,1004.3793334960938
|
||||||
|
coast2,1.233,-22178.677734375,881.9027709960938,1004.3792114257812
|
||||||
|
coast2,1.283,-22190.33203125,881.9027709960938,1004.3792114257812
|
||||||
|
coast2,1.333,-22236.951171875,881.9027099609375,1004.379150390625
|
||||||
|
coast2,1.383,-22242.76171875,881.9027099609375,1004.3790893554688
|
||||||
|
coast2,1.433,-22242.76171875,881.9027099609375,1004.3790893554688
|
||||||
|
coast2,1.483,-22242.76171875,881.9027099609375,1004.3790893554688
|
||||||
|
coast2,1.533,-22289.416015625,881.9027099609375,1004.3790283203125
|
||||||
|
coast2,1.583,-22318.537109375,881.9027099609375,1004.3789672851562
|
||||||
|
coast2,1.634,-22353.501953125,881.9026489257812,1004.37890625
|
||||||
|
coast2,1.684,-22365.15625,881.9026489257812,1004.3788452148438
|
||||||
|
coast2,1.734,-22411.77734375,881.9026489257812,1004.3787841796875
|
||||||
|
coast2,1.784,-22417.5859375,881.9026489257812,1004.3787841796875
|
||||||
|
coast2,1.834,-22417.5859375,881.9026489257812,1004.3787841796875
|
||||||
|
coast2,1.885,-22417.5859375,881.9026489257812,1004.3787841796875
|
||||||
|
coast2,1.935,-22475.896484375,881.902587890625,1004.378662109375
|
||||||
|
coast2,1.989,-22493.361328125,881.902587890625,1004.3786010742188
|
||||||
|
coast2,2.042,-22539.982421875,881.902587890625,1004.3785400390625
|
||||||
|
coast2,2.092,-22563.291015625,881.9025268554688,1004.3784790039062
|
||||||
|
coast2,2.143,-22592.412109375,881.9025268554688,1004.37841796875
|
||||||
|
coast2,2.194,-22598.22265625,881.9025268554688,1004.37841796875
|
||||||
|
coast2,2.279,-22598.22265625,881.9025268554688,1004.37841796875
|
||||||
|
coast2,2.329,-22598.22265625,881.9025268554688,1004.37841796875
|
||||||
|
coast2,2.38,-22662.341796875,881.9025268554688,1004.3782348632812
|
||||||
|
coast2,2.43,-22708.9609375,881.9024658203125,1004.378173828125
|
||||||
|
coast2,2.48,-22708.9609375,881.9024658203125,1004.378173828125
|
||||||
|
coast2,2.531,-22743.92578125,881.9024658203125,1004.3781127929688
|
||||||
|
coast2,2.581,-22761.392578125,881.9024658203125,1004.3780517578125
|
||||||
|
coast2,2.631,-22761.392578125,881.9024658203125,1004.3780517578125
|
||||||
|
coast2,2.681,-22761.392578125,881.9024658203125,1004.3780517578125
|
||||||
|
coast2,2.731,-22761.392578125,881.9024658203125,1004.3780517578125
|
||||||
|
coast2,2.781,-22837.166015625,881.9024047851562,1004.3779296875
|
||||||
|
coast2,2.832,-22872.130859375,881.9024047851562,1004.3778686523438
|
||||||
|
coast2,2.882,-22883.787109375,881.9024047851562,1004.3778076171875
|
||||||
|
coast2,2.933,-22930.40625,881.90234375,1004.3777465820312
|
||||||
|
coast2,2.983,-22942.02734375,881.90234375,1004.377685546875
|
||||||
|
coast2,3.033,-22942.02734375,881.90234375,1004.377685546875
|
||||||
|
coast2,3.083,-22942.02734375,881.90234375,1004.377685546875
|
||||||
|
coast2,3.133,-22994.52734375,881.90234375,1004.3775634765625
|
||||||
|
coast2,3.183,-23011.9921875,881.90234375,1004.3775634765625
|
||||||
|
coast2,3.234,-23046.95703125,881.9022827148438,1004.3775024414062
|
||||||
|
coast2,3.284,-23058.611328125,881.9022827148438,1004.37744140625
|
||||||
|
coast2,3.334,-23105.232421875,881.9022827148438,1004.3773803710938
|
||||||
|
coast2,3.384,-23111.041015625,881.9022827148438,1004.3773803710938
|
||||||
|
coast2,3.435,-23111.041015625,881.9022827148438,1004.3773803710938
|
||||||
|
coast2,3.485,-23111.041015625,881.9022827148438,1004.3773803710938
|
||||||
|
coast2,3.535,-23163.541015625,881.9022216796875,1004.3772583007812
|
||||||
|
coast2,3.587,-23181.005859375,881.9022216796875,1004.377197265625
|
||||||
|
coast2,3.677,-23221.81640625,881.9022216796875,1004.3771362304688
|
||||||
|
coast2,3.728,-23256.78125,881.9021606445312,1004.3770751953125
|
||||||
|
coast2,3.778,-23274.24609375,881.9021606445312,1004.3770141601562
|
||||||
|
coast2,3.828,-23274.24609375,881.9021606445312,1004.3770141601562
|
||||||
|
coast2,3.878,-23274.24609375,881.9021606445312,1004.3770141601562
|
||||||
|
coast2,3.928,-23274.24609375,881.9021606445312,1004.3770141601562
|
||||||
|
coast2,3.979,-23344.2109375,881.9021606445312,1004.3768920898438
|
||||||
|
coast2,4.029,-23379.17578125,881.902099609375,1004.3768310546875
|
||||||
|
coast2,4.079,-23390.83203125,881.902099609375,1004.3767700195312
|
||||||
|
coast2,4.129,-23437.451171875,881.902099609375,1004.376708984375
|
||||||
|
coast2,4.18,-23449.072265625,881.902099609375,1004.3766479492188
|
||||||
|
coast2,4.23,-23449.072265625,881.902099609375,1004.3766479492188
|
||||||
|
coast2,4.28,-23449.072265625,881.902099609375,1004.3766479492188
|
||||||
|
coast2,4.33,-23449.072265625,881.902099609375,1004.3766479492188
|
||||||
|
coast2,4.38,-23524.845703125,881.9020385742188,1004.3765258789062
|
||||||
|
coast2,4.43,-23559.8125,881.9020385742188,1004.37646484375
|
||||||
|
coast2,4.48,-23571.466796875,881.9020385742188,1004.3764038085938
|
||||||
|
coast2,4.53,-23606.431640625,881.9019775390625,1004.3763427734375
|
||||||
|
coast2,4.58,-23623.896484375,881.9019775390625,1004.3763427734375
|
||||||
|
coast2,4.631,-23623.896484375,881.9019775390625,1004.3763427734375
|
||||||
|
coast2,4.681,-23623.896484375,881.9019775390625,1004.3763427734375
|
||||||
|
coast2,4.731,-23623.896484375,881.9019775390625,1004.3763427734375
|
||||||
|
coast2,4.781,-23688.015625,881.9019775390625,1004.3761596679688
|
||||||
|
coast2,4.832,-23722.982421875,881.9019165039062,1004.3760986328125
|
||||||
|
coast2,4.882,-23746.291015625,881.9019165039062,1004.3760986328125
|
||||||
|
coast2,4.934,-23781.255859375,881.9019165039062,1004.3759765625
|
||||||
|
coast2,4.984,-23804.56640625,881.9019165039062,1004.3759765625
|
||||||
|
coast2,5.034,-23822.06640625,881.90185546875,1004.3759155273438
|
||||||
|
coast2,5.084,-23822.06640625,881.90185546875,1004.3759155273438
|
||||||
|
coast2,5.134,-23822.06640625,881.90185546875,1004.3759155273438
|
||||||
|
coast2,5.184,-23874.56640625,881.90185546875,1004.3757934570312
|
||||||
|
coast2,5.234,-23915.341796875,881.90185546875,1004.375732421875
|
||||||
|
coast2,5.284,-23938.65234375,881.9017944335938,1004.3756713867188
|
||||||
|
coast2,5.334,-23985.271484375,881.9017944335938,1004.3756103515625
|
||||||
|
coast2,5.385,-23996.92578125,881.9017944335938,1004.3755493164062
|
||||||
|
coast2,5.438,-24008.546875,881.9017944335938,1004.3755493164062
|
||||||
|
coast2,5.488,-24008.546875,881.9017944335938,1004.3755493164062
|
||||||
|
coast2,5.539,-24008.546875,881.9017944335938,1004.3755493164062
|
||||||
|
coast2,5.589,-24008.546875,881.9017944335938,1004.3755493164062
|
||||||
|
coast2,5.639,-24095.9765625,881.9017333984375,1004.3753662109375
|
||||||
|
coast2,5.689,-24125.130859375,881.9017333984375,1004.3753051757812
|
||||||
|
coast2,5.739,-24160.095703125,881.9016723632812,1004.375244140625
|
||||||
|
coast2,5.789,-24171.751953125,881.9016723632812,1004.3751831054688
|
||||||
|
coast2,5.839,-24195.02734375,881.9016723632812,1004.3751831054688
|
||||||
|
coast2,5.889,-24195.02734375,881.9016723632812,1004.3751831054688
|
||||||
|
coast2,5.94,-24195.02734375,881.9016723632812,1004.3751831054688
|
||||||
|
coast2,5.99,-24195.02734375,881.9016723632812,1004.3751831054688
|
||||||
|
coast2,6.04,-24264.9921875,881.9016723632812,1004.375
|
||||||
|
coast2,6.091,-24288.30078125,881.901611328125,1004.375
|
||||||
|
coast2,6.141,-24334.921875,881.901611328125,1004.3748779296875
|
||||||
|
coast2,6.192,-24358.232421875,881.901611328125,1004.3748168945312
|
||||||
|
coast2,6.242,-24387.3515625,881.9015502929688,1004.374755859375
|
||||||
|
coast2,6.292,-24393.162109375,881.9015502929688,1004.374755859375
|
||||||
|
coast2,6.345,-24393.162109375,881.9015502929688,1004.374755859375
|
||||||
|
coast2,6.395,-24393.162109375,881.9015502929688,1004.374755859375
|
||||||
|
coast2,6.446,-24451.470703125,881.9015502929688,1004.3746337890625
|
||||||
|
coast2,6.496,-24480.591796875,881.9015502929688,1004.3745727539062
|
||||||
|
coast2,6.578,-24515.556640625,881.9014892578125,1004.37451171875
|
||||||
|
coast2,6.628,-24568.021484375,881.9014892578125,1004.3743896484375
|
||||||
|
coast2,6.678,-24579.67578125,881.9014892578125,1004.3743896484375
|
||||||
|
coast2,6.728,-24591.33203125,881.9014892578125,1004.3743286132812
|
||||||
|
coast2,6.778,-24591.33203125,881.9014892578125,1004.3743286132812
|
||||||
|
coast2,6.829,-24591.33203125,881.9014892578125,1004.3743286132812
|
||||||
|
coast2,6.879,-24655.451171875,881.9014282226562,1004.3742065429688
|
||||||
|
coast2,6.929,-24690.416015625,881.9014282226562,1004.3741455078125
|
||||||
|
coast2,6.979,-24702.072265625,881.9014282226562,1004.3741455078125
|
||||||
|
coast2,7.031,-24737.037109375,881.9013671875,1004.3740844726562
|
||||||
|
coast2,7.081,-24760.345703125,881.9013671875,1004.3740234375
|
||||||
|
coast2,7.132,-24772.001953125,881.9013671875,1004.3739624023438
|
||||||
|
coast2,7.182,-24772.001953125,881.9013671875,1004.3739624023438
|
||||||
|
coast2,7.232,-24772.001953125,881.9013671875,1004.3739624023438
|
||||||
|
coast2,7.284,-24830.310546875,881.9013671875,1004.3738403320312
|
||||||
|
coast2,7.334,-24865.27734375,881.9013061523438,1004.373779296875
|
||||||
|
coast2,7.384,-24894.431640625,881.9013061523438,1004.3737182617188
|
||||||
|
coast2,7.434,-24929.396484375,881.9013061523438,1004.3736572265625
|
||||||
|
coast2,7.484,-24952.70703125,881.9012451171875,1004.3735961914062
|
||||||
|
coast2,7.534,-24958.515625,881.9012451171875,1004.3735961914062
|
||||||
|
coast2,7.584,-24958.515625,881.9012451171875,1004.3735961914062
|
||||||
|
coast2,7.635,-24958.515625,881.9012451171875,1004.3735961914062
|
||||||
|
coast2,7.685,-24958.515625,881.9012451171875,1004.3735961914062
|
||||||
|
coast2,7.736,-25028.48046875,881.9012451171875,1004.3734741210938
|
||||||
|
coast2,7.786,-25057.63671875,881.9012451171875,1004.3734130859375
|
||||||
|
coast2,7.837,-25092.6015625,881.9011840820312,1004.3733520507812
|
||||||
|
coast2,7.887,-25104.255859375,881.9011840820312,1004.373291015625
|
||||||
|
coast2,7.937,-25121.720703125,881.9011840820312,1004.373291015625
|
||||||
|
coast2,7.987,-25121.720703125,881.9011840820312,1004.373291015625
|
||||||
|
50
docs/re/captures/stage-s02-index-buffer-truth.txt
Normal file
50
docs/re/captures/stage-s02-index-buffer-truth.txt
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
container load constant: vbase - file_offset = 0x17FE3FF4 (93 buffers agree)
|
||||||
|
decoded 356 resources, 422 distinct vertex offsets
|
||||||
|
|
||||||
|
vb 0x13FD6E8 v=25448 batches 8 idx 52077 span 104154 gap 2 decpad 2 cover exact f101_bdy_01(v25448,i52077)
|
||||||
|
vb 0x192961C v=13172 batches 2 idx 24816 span 49632 gap 0 decpad 0 cover exact f101_bdy_02(v13172,i24816)
|
||||||
|
vb 0x1BF40F4 v=261 batches 3 idx 498 span 996 gap 41476 decpad 41476 cover exact e_rob_f001(v24,i36) e_rou_f003_Near(v24,i36) e_rou_f101_wep_01(v24,i36) e_rou_f105(v24,i36) _rou_f105_break(v261,i498) e_rou_f106(v24,i36) e_rou_f302_barrel(v24,i36) e_rou_f302_base(v24,i36) e_rou_f303_barrel(v24,i36) e_rou_f303_base(v24,i36) e_rou_e007_Far(v24,i36) e_rou_e007_Near(v24,i36) e_rou_e010_Far(v24,i36) e_rou_e010_Near(v24,i36) e_rou_e105(v24,i36) e_rou_e105_wep_01(v24,i36) e_rou_e106(v24,i36) e_rou_e106_eng(v24,i36) e_rou_e106_wep_02_01(v24,i36) e_rou_e106_wep_02_joint(v24,i36) e_rou_e108_Missile_open(v24,i36) e_rou_e201(v24,i36) e_rou_e302_barrel(v24,i36) e_rou_e302_base(v24,i36) e_rou_e303_barrel_Near(v24,i36) e_rou_e303_base_Near(v24,i36) e_rou_e501(v24,i36)
|
||||||
|
vb 0x1C0F67C v=82 batches 1 idx 144 span 288 gap 133672 decpad 133672 cover exact _rou_f105_break(v82,i144)
|
||||||
|
vb 0x1C1D92C v=220 batches 3 idx 384 span 768 gap 179872 decpad 179872 cover exact _rou_f105_break(v220,i384)
|
||||||
|
vb 0x1C1EDCC v=80 batches 2 idx 132 span 264 gap 184888 decpad 184888 cover exact _rou_f105_break(v80,i132)
|
||||||
|
vb 0x1C1F54C v=148 batches 3 idx 288 span 576 gap 186232 decpad 186232 cover exact _rou_f105_break(v148,i288)
|
||||||
|
vb 0x1C2032C v=156 batches 1 idx 246 span 492 gap 189292 decpad 189292 cover exact _rou_f105_break(v156,i246)
|
||||||
|
vb 0x1C2953C v=84 batches 1 idx 156 span 312 gap 220012 decpad 220012 cover exact _rou_f105_break(v84,i156)
|
||||||
|
vb 0x1C2AF1C v=122 batches 3 idx 351 span 702 gap 224882 decpad 224882 cover exact _rou_f105_break(v122,i351)
|
||||||
|
vb 0x1C2BA8C v=24 batches 2 idx 36 span 72 gap 227736 decpad 227736 cover exact _rou_f105_break(v24,i36)
|
||||||
|
vb 0x1ECB4C0 v=2446 batches 4 idx 5466 span 10932 gap 0 decpad 0 cover exact f105_bdy_01_m(v2446,i5466)
|
||||||
|
vb 0x227AC94 v=1692 batches 3 idx 3651 span 7302 gap 2 decpad 2 cover exact f106_bdy_02_l(v1692,i3651)
|
||||||
|
vb 0x22C2EF0 v=686 batches 2 idx 1506 span 3012 gap 0 decpad 0 cover exact f106_bdy_03_l(v686,i1506)
|
||||||
|
vb 0x22C8F50 v=1558 batches 3 idx 4098 span 8196 gap 0 decpad 0 cover exact f106_bdy_03_m(v1558,i4098)
|
||||||
|
vb 0x22ED420 v=261 batches 4 idx 561 span 1122 gap 2 decpad 2 cover exact f106_eng_01_l(v261,i561)
|
||||||
|
vb 0x22F0430 v=1162 batches 4 idx 3018 span 6036 gap 0 decpad 0 cover exact f106_eng_01_m(v1162,i3018)
|
||||||
|
vb 0x2326C9C v=254 batches 2 idx 495 span 990 gap 2 decpad 2 cover exact f106_sld_01_l(v254,i495)
|
||||||
|
vb 0x233B3FC v=254 batches 2 idx 495 span 990 gap 2 decpad 2 cover exact f106_sld_02_l(v254,i495)
|
||||||
|
vb 0x233D700 v=627 batches 3 idx 1434 span 2868 gap 0 decpad 0 cover exact f106_sld_02_m(v627,i1434)
|
||||||
|
vb 0x24CE5F4 v=32 batches 1 idx 60 span 120 gap 0 decpad 0 cover exact f303_body_l(v32,i60)
|
||||||
|
vb 0x28EA1D4 v=156 batches 2 idx 228 span 456 gap 0 decpad 0 cover exact e105_bdy_01_l(v156,i228)
|
||||||
|
vb 0x28F7514 v=107 batches 3 idx 180 span 360 gap 0 decpad 0 cover exact e105_bdy_02_l(v107,i180)
|
||||||
|
vb 0x291E1E8 v=185 batches 2 idx 285 span 570 gap 2 decpad 2 cover exact e105_bdy_03_l(v185,i285)
|
||||||
|
vb 0x29A4788 v=181 batches 3 idx 318 span 636 gap 0 decpad 0 cover exact e105_bdy_04_l(v181,i318)
|
||||||
|
vb 0x29B78B8 v=93 batches 2 idx 117 span 234 gap 2 decpad 2 cover exact e105_bdy_05_l(v93,i117)
|
||||||
|
vb 0x2A22574 v=41 batches 1 idx 51 span 102 gap 2 decpad 2 cover exact e105_bdy_06_l(v41,i51)
|
||||||
|
vb 0x2A47BAC v=77 batches 1 idx 111 span 222 gap 2 decpad 2 cover exact e105_brg_l(v77,i111)
|
||||||
|
vb 0x2A9FDA0 v=76 batches 1 idx 90 span 180 gap 0 decpad 0 cover exact e105_eng_01_l(v76,i90)
|
||||||
|
vb 0x2ACE840 v=60 batches 1 idx 90 span 180 gap 0 decpad 0 cover exact e105_wep_01_l(v60,i90)
|
||||||
|
vb 0x2D1FEE8 v=119 batches 2 idx 246 span 492 gap 0 decpad 0 cover exact e106_bdy_01_l(v119,i246)
|
||||||
|
vb 0x2D315D8 v=119 batches 2 idx 246 span 492 gap 0 decpad 0 cover exact e106_bdy_02_l(v119,i246)
|
||||||
|
vb 0x2D492C4 v=146 batches 2 idx 324 span 648 gap 0 decpad 0 cover exact e106_bdy_03_l(v146,i324)
|
||||||
|
vb 0x2D7363C v=179 batches 2 idx 399 span 798 gap 2 decpad 2 cover exact e106_bdy_04_l(v179,i399)
|
||||||
|
vb 0x2D7A418 v=51 batches 2 idx 126 span 252 gap 0 decpad 0 cover exact e106_brg_01_l(v51,i126)
|
||||||
|
vb 0x2DB0CCC v=58 batches 2 idx 96 span 192 gap 0 decpad 0 cover exact e106_eng_01_l(v58,i96)
|
||||||
|
vb 0x2DB632C v=44 batches 2 idx 72 span 144 gap 0 decpad 0 cover exact e106_eng_02_l(v44,i72)
|
||||||
|
vb 0x2DC305C v=82 batches 2 idx 168 span 336 gap 0 decpad 0 cover exact e106_wep_02_01_l(v82,i168)
|
||||||
|
vb 0x329077C v=6000 batches 1 idx 6000 span 12000 gap 0 decpad 0 cover exact n006_02(v6000,i6000)
|
||||||
|
vb 0x3434030 v=4 batches 1 idx 6 span 12 gap 24 decpad 24 cover exact n301_02B(v4,i6)
|
||||||
|
vb 0x3434090 v=4 batches 1 idx 6 span 12 gap 108 decpad 108 cover exact n301_02B(v4,i6)
|
||||||
|
vb 0x34340F0 v=4 batches 1 idx 6 span 12 gap 192 decpad 192 cover exact n301_02B(v4,i6)
|
||||||
|
|
||||||
|
placed 42 drawn buffers in this container
|
||||||
|
DECODER layout assumption — whole index buffer at vb - 2*idx_count - pad: pad 0 20 · pad 1..3 10 · elsewhere 12 · not decoded here 0
|
||||||
|
index extent: our idx_count == sum of captured batches for 42 buffers, differs for 0
|
||||||
|
vertex-pool coverage by the union of batches: exact 42 · short 0
|
||||||
BIN
docs/re/captures/stage05-mission-approach.png
Normal file
BIN
docs/re/captures/stage05-mission-approach.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 601 KiB |
589
docs/re/captures/throttle-curve-hud.csv
Normal file
589
docs/re/captures/throttle-curve-hud.csv
Normal file
@@ -0,0 +1,589 @@
|
|||||||
|
rt,t,x,y,z
|
||||||
|
0.0,0.0,-3409.5771484375,881.912841796875,1004.4171752929688
|
||||||
|
0.0,0.05,-3421.232177734375,881.912841796875,1004.4171752929688
|
||||||
|
0.0,0.1,-3456.197265625,881.9127807617188,1004.4171142578125
|
||||||
|
0.0,0.151,-3462.00732421875,881.9127807617188,1004.4170532226562
|
||||||
|
0.0,0.201,-3462.00732421875,881.9127807617188,1004.4170532226562
|
||||||
|
0.0,0.251,-3462.00732421875,881.9127807617188,1004.4170532226562
|
||||||
|
0.0,0.301,-3526.127197265625,881.9127807617188,1004.4169311523438
|
||||||
|
0.0,0.351,-3537.7822265625,881.9127807617188,1004.4169311523438
|
||||||
|
0.0,0.402,-3584.402099609375,881.9127197265625,1004.4168090820312
|
||||||
|
0.0,0.452,-3596.05712890625,881.9127197265625,1004.4168090820312
|
||||||
|
0.0,0.505,-3631.022216796875,881.9127197265625,1004.416748046875
|
||||||
|
0.0,0.555,-3631.022216796875,881.9127197265625,1004.416748046875
|
||||||
|
0.0,0.605,-3631.022216796875,881.9127197265625,1004.416748046875
|
||||||
|
0.0,0.655,-3631.022216796875,881.9127197265625,1004.416748046875
|
||||||
|
0.0,0.708,-3706.797119140625,881.9126586914062,1004.4165649414062
|
||||||
|
0.0,0.758,-3741.76220703125,881.9126586914062,1004.41650390625
|
||||||
|
0.0,0.808,-3788.382080078125,881.91259765625,1004.4164428710938
|
||||||
|
0.0,0.859,-3800.037109375,881.91259765625,1004.4163818359375
|
||||||
|
0.0,0.911,-3817.502197265625,881.91259765625,1004.4163818359375
|
||||||
|
0.0,0.961,-3817.502197265625,881.91259765625,1004.4163818359375
|
||||||
|
0.0,1.011,-3817.502197265625,881.91259765625,1004.4163818359375
|
||||||
|
0.0,1.061,-3817.502197265625,881.91259765625,1004.4163818359375
|
||||||
|
0.0,1.111,-3893.277099609375,881.91259765625,1004.4161987304688
|
||||||
|
0.0,1.162,-3916.587158203125,881.9125366210938,1004.4161376953125
|
||||||
|
0.0,1.212,-3957.397216796875,881.9125366210938,1004.4160766601562
|
||||||
|
0.0,1.262,-3986.55224609375,881.9125366210938,1004.416015625
|
||||||
|
0.0,1.315,-3998.20703125,881.9125366210938,1004.416015625
|
||||||
|
0.0,1.365,-3998.20703125,881.9125366210938,1004.416015625
|
||||||
|
0.0,1.415,-3998.20703125,881.9125366210938,1004.416015625
|
||||||
|
0.0,1.465,-4050.70703125,881.9124755859375,1004.4158935546875
|
||||||
|
0.0,1.515,-4079.8271484375,881.9124755859375,1004.4158325195312
|
||||||
|
0.0,1.565,-4108.98193359375,881.9124755859375,1004.415771484375
|
||||||
|
0.0,1.615,-4143.947265625,881.9124145507812,1004.4157104492188
|
||||||
|
0.0,1.665,-4178.912109375,881.9124145507812,1004.4156494140625
|
||||||
|
0.0,1.717,-4184.72216796875,881.9124145507812,1004.4155883789062
|
||||||
|
0.0,1.767,-4184.72216796875,881.9124145507812,1004.4155883789062
|
||||||
|
0.0,1.817,-4184.72216796875,881.9124145507812,1004.4155883789062
|
||||||
|
0.0,1.867,-4243.0322265625,881.912353515625,1004.41552734375
|
||||||
|
0.0,1.917,-4272.15234375,881.912353515625,1004.4154663085938
|
||||||
|
0.0,1.967,-4307.1171875,881.912353515625,1004.4153442382812
|
||||||
|
0.0,2.017,-4353.7373046875,881.912353515625,1004.415283203125
|
||||||
|
0.0,2.067,-4365.39208984375,881.9122924804688,1004.4152221679688
|
||||||
|
0.0,2.118,-4377.046875,881.9122924804688,1004.4152221679688
|
||||||
|
0.0,2.168,-4377.046875,881.9122924804688,1004.4152221679688
|
||||||
|
0.0,2.218,-4377.046875,881.9122924804688,1004.4152221679688
|
||||||
|
0.0,2.268,-4441.2021484375,881.9122924804688,1004.4151000976562
|
||||||
|
0.0,2.318,-4476.1669921875,881.9122314453125,1004.4150390625
|
||||||
|
0.0,2.368,-4493.6669921875,881.9122314453125,1004.4149780273438
|
||||||
|
0.0,2.418,-4540.287109375,881.9122314453125,1004.4149169921875
|
||||||
|
0.0,2.468,-4557.787109375,881.9122314453125,1004.4148559570312
|
||||||
|
0.0,2.52,-4563.59716796875,881.9122314453125,1004.4148559570312
|
||||||
|
0.0,2.57,-4563.59716796875,881.9122314453125,1004.4148559570312
|
||||||
|
0.0,2.62,-4610.251953125,881.9121704101562,1004.4147338867188
|
||||||
|
0.0,2.671,-4633.56201171875,881.9121704101562,1004.4147338867188
|
||||||
|
0.0,2.75,-4668.52685546875,881.9121704101562,1004.4146118164062
|
||||||
|
0.0,2.8,-4703.4921875,881.912109375,1004.41455078125
|
||||||
|
0.0,2.85,-4726.76708984375,881.912109375,1004.4144897460938
|
||||||
|
0.0,2.9,-4726.76708984375,881.912109375,1004.4144897460938
|
||||||
|
0.0,2.95,-4726.76708984375,881.912109375,1004.4144897460938
|
||||||
|
0.0,3.0,-4726.76708984375,881.912109375,1004.4144897460938
|
||||||
|
0.0,3.053,-4779.23193359375,881.912109375,1004.4144287109375
|
||||||
|
0.0,3.103,-4820.0419921875,881.9120483398438,1004.414306640625
|
||||||
|
0.0,3.153,-4831.697265625,881.9120483398438,1004.414306640625
|
||||||
|
0.0,3.204,-4878.31689453125,881.9120483398438,1004.4141845703125
|
||||||
|
0.0,3.254,-4884.126953125,881.9120483398438,1004.4141845703125
|
||||||
|
0.0,3.304,-4884.126953125,881.9120483398438,1004.4141845703125
|
||||||
|
0.0,3.354,-4884.126953125,881.9120483398438,1004.4141845703125
|
||||||
|
0.0,3.404,-4936.591796875,881.9119873046875,1004.4140625
|
||||||
|
0.0,3.454,-4948.2470703125,881.9119873046875,1004.4140625
|
||||||
|
0.0,3.505,-5000.7119140625,881.9119873046875,1004.4139404296875
|
||||||
|
0.0,3.555,-5012.3671875,881.9119873046875,1004.4139404296875
|
||||||
|
0.0,3.605,-5041.48681640625,881.9119262695312,1004.4138793945312
|
||||||
|
0.0,3.655,-5041.48681640625,881.9119262695312,1004.4138793945312
|
||||||
|
0.0,3.705,-5041.48681640625,881.9119262695312,1004.4138793945312
|
||||||
|
0.0,3.755,-5041.48681640625,881.9119262695312,1004.4138793945312
|
||||||
|
0.0,3.807,-5105.60693359375,881.9119262695312,1004.4137573242188
|
||||||
|
0.0,3.857,-5128.9169921875,881.9119262695312,1004.4136962890625
|
||||||
|
0.0,3.907,-5175.537109375,881.911865234375,1004.41357421875
|
||||||
|
0.0,3.957,-5187.19189453125,881.911865234375,1004.41357421875
|
||||||
|
0.0,4.01,-5210.501953125,881.911865234375,1004.4135131835938
|
||||||
|
0.0,4.06,-5210.501953125,881.911865234375,1004.4135131835938
|
||||||
|
0.0,4.11,-5210.501953125,881.911865234375,1004.4135131835938
|
||||||
|
0.0,4.16,-5210.501953125,881.911865234375,1004.4135131835938
|
||||||
|
0.0,4.21,-5286.27685546875,881.9118041992188,1004.4133911132812
|
||||||
|
0.0,4.26,-5321.2421875,881.9118041992188,1004.413330078125
|
||||||
|
0.0,4.314,-5356.20703125,881.9118041992188,1004.4132690429688
|
||||||
|
0.0,4.364,-5385.36181640625,881.9117431640625,1004.4132080078125
|
||||||
|
0.0,4.414,-5391.171875,881.9117431640625,1004.4131469726562
|
||||||
|
0.0,4.464,-5391.171875,881.9117431640625,1004.4131469726562
|
||||||
|
0.0,4.514,-5391.171875,881.9117431640625,1004.4131469726562
|
||||||
|
0.0,4.565,-5443.671875,881.9117431640625,1004.4130859375
|
||||||
|
0.0,4.615,-5472.7919921875,881.9117431640625,1004.4130249023438
|
||||||
|
0.0,4.667,-5496.10205078125,881.9116821289062,1004.4129638671875
|
||||||
|
0.0,4.717,-5531.06689453125,881.9116821289062,1004.4129028320312
|
||||||
|
0.0,4.767,-5560.22216796875,881.9116821289062,1004.412841796875
|
||||||
|
0.0,4.822,-5566.03173828125,881.9116821289062,1004.412841796875
|
||||||
|
0.0,4.872,-5566.03173828125,881.9116821289062,1004.412841796875
|
||||||
|
0.0,4.922,-5566.03173828125,881.9116821289062,1004.412841796875
|
||||||
|
0.0,4.978,-5635.9970703125,881.91162109375,1004.4126586914062
|
||||||
|
0.0,5.028,-5659.30712890625,881.91162109375,1004.4126586914062
|
||||||
|
0.0,5.079,-5694.27197265625,881.91162109375,1004.4125366210938
|
||||||
|
0.0,5.15,-5717.58203125,881.91162109375,1004.4125366210938
|
||||||
|
0.0,5.2,-5740.89208984375,881.9115600585938,1004.4124755859375
|
||||||
|
0.0,5.251,-5740.89208984375,881.9115600585938,1004.4124755859375
|
||||||
|
0.0,5.302,-5740.89208984375,881.9115600585938,1004.4124755859375
|
||||||
|
0.0,5.353,-5787.546875,881.9115600585938,1004.412353515625
|
||||||
|
0.0,5.403,-5828.35693359375,881.9115600585938,1004.4122924804688
|
||||||
|
0.0,5.453,-5840.01171875,881.9114990234375,1004.4122924804688
|
||||||
|
0.0,5.506,-5892.47705078125,881.9114990234375,1004.4121704101562
|
||||||
|
0.0,5.556,-5904.1318359375,881.9114990234375,1004.412109375
|
||||||
|
0.0,5.606,-5915.787109375,881.9114990234375,1004.412109375
|
||||||
|
0.0,5.656,-5915.787109375,881.9114990234375,1004.412109375
|
||||||
|
0.0,5.706,-5915.787109375,881.9114990234375,1004.412109375
|
||||||
|
0.0,5.756,-5974.0966796875,881.9114379882812,1004.4119873046875
|
||||||
|
0.0,5.806,-5985.751953125,881.9114379882812,1004.4119873046875
|
||||||
|
0.0,5.857,-6026.56201171875,881.9114379882812,1004.411865234375
|
||||||
|
0.0,5.907,-6061.52685546875,881.9114379882812,1004.4118041992188
|
||||||
|
0.0,5.957,-6084.8369140625,881.911376953125,1004.4117431640625
|
||||||
|
0.25,0.0,-10118.99609375,881.9092407226562,1004.4036254882812
|
||||||
|
0.25,0.055,-10228.689453125,881.9091796875,1004.4033813476562
|
||||||
|
0.25,0.105,-10279.3056640625,881.9091186523438,1004.4033203125
|
||||||
|
0.25,0.155,-10296.177734375,881.9091186523438,1004.4032592773438
|
||||||
|
0.25,0.205,-10372.126953125,881.9091186523438,1004.403076171875
|
||||||
|
0.25,0.255,-10380.537109375,881.9091186523438,1004.403076171875
|
||||||
|
0.25,0.305,-10380.537109375,881.9091186523438,1004.403076171875
|
||||||
|
0.25,0.356,-10380.537109375,881.9091186523438,1004.403076171875
|
||||||
|
0.25,0.406,-10380.537109375,881.9091186523438,1004.403076171875
|
||||||
|
0.25,0.46,-10490.23046875,881.9090576171875,1004.4028930664062
|
||||||
|
0.25,0.51,-10540.8466796875,881.9089965820312,1004.4027709960938
|
||||||
|
0.25,0.56,-10557.71875,881.9089965820312,1004.4027099609375
|
||||||
|
0.25,0.61,-10625.20703125,881.908935546875,1004.402587890625
|
||||||
|
0.25,0.661,-10650.4892578125,881.908935546875,1004.4025268554688
|
||||||
|
0.25,0.711,-10650.4892578125,881.908935546875,1004.4025268554688
|
||||||
|
0.25,0.761,-10650.4892578125,881.908935546875,1004.4025268554688
|
||||||
|
0.25,0.811,-10718.0283203125,881.908935546875,1004.4024047851562
|
||||||
|
0.25,0.861,-10743.310546875,881.9088745117188,1004.40234375
|
||||||
|
0.25,0.912,-10777.0546875,881.9088745117188,1004.4022827148438
|
||||||
|
0.25,0.962,-10793.9267578125,881.9088745117188,1004.4022216796875
|
||||||
|
0.25,1.012,-10878.287109375,881.9088134765625,1004.402099609375
|
||||||
|
0.25,1.064,-10886.697265625,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,1.114,-10886.697265625,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,1.164,-10886.697265625,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,1.214,-10886.697265625,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,1.268,-11004.8525390625,881.9087524414062,1004.4017944335938
|
||||||
|
0.25,1.318,-11055.4677734375,881.9087524414062,1004.4017333984375
|
||||||
|
0.25,1.368,-11080.8017578125,881.90869140625,1004.4016723632812
|
||||||
|
0.25,1.418,-11131.4169921875,881.90869140625,1004.4015502929688
|
||||||
|
0.25,1.468,-11148.23828125,881.90869140625,1004.4015502929688
|
||||||
|
0.25,1.519,-11148.23828125,881.90869140625,1004.4015502929688
|
||||||
|
0.25,1.569,-11148.23828125,881.90869140625,1004.4015502929688
|
||||||
|
0.25,1.619,-11232.6494140625,881.9086303710938,1004.4013671875
|
||||||
|
0.25,1.67,-11257.931640625,881.9086303710938,1004.4013061523438
|
||||||
|
0.25,1.72,-11308.5478515625,881.9085693359375,1004.4011840820312
|
||||||
|
0.25,1.771,-11333.8818359375,881.9085693359375,1004.401123046875
|
||||||
|
0.25,1.821,-11384.4970703125,881.9085693359375,1004.4010620117188
|
||||||
|
0.25,1.871,-11401.318359375,881.9085693359375,1004.4010009765625
|
||||||
|
0.25,1.921,-11401.318359375,881.9085693359375,1004.4010009765625
|
||||||
|
0.25,1.971,-11401.318359375,881.9085693359375,1004.4010009765625
|
||||||
|
0.25,2.022,-11401.318359375,881.9085693359375,1004.4010009765625
|
||||||
|
0.25,2.072,-11527.9345703125,881.908447265625,1004.4007568359375
|
||||||
|
0.25,2.122,-11561.6787109375,881.908447265625,1004.4006958007812
|
||||||
|
0.25,2.172,-11603.8837890625,881.908447265625,1004.400634765625
|
||||||
|
0.25,2.222,-11671.3720703125,881.9083862304688,1004.4004516601562
|
||||||
|
0.25,2.272,-11688.244140625,881.9083862304688,1004.4004516601562
|
||||||
|
0.25,2.322,-11705.0654296875,881.9083862304688,1004.400390625
|
||||||
|
0.25,2.373,-11705.0654296875,881.9083862304688,1004.400390625
|
||||||
|
0.25,2.423,-11705.0654296875,881.9083862304688,1004.400390625
|
||||||
|
0.25,2.473,-11789.4755859375,881.9083251953125,1004.4002075195312
|
||||||
|
0.25,2.524,-11814.7587890625,881.9083251953125,1004.4002075195312
|
||||||
|
0.25,2.574,-11882.2470703125,881.9082641601562,1004.4000244140625
|
||||||
|
0.25,2.624,-11915.990234375,881.9082641601562,1004.3999633789062
|
||||||
|
0.25,2.674,-11949.734375,881.9082641601562,1004.39990234375
|
||||||
|
0.25,2.725,-11958.1455078125,881.9082641601562,1004.39990234375
|
||||||
|
0.25,2.775,-11958.1455078125,881.9082641601562,1004.39990234375
|
||||||
|
0.25,2.825,-11958.1455078125,881.9082641601562,1004.39990234375
|
||||||
|
0.25,2.876,-12042.5556640625,881.908203125,1004.3997192382812
|
||||||
|
0.25,2.926,-12067.8388671875,881.908203125,1004.399658203125
|
||||||
|
0.25,2.977,-12118.455078125,881.9081420898438,1004.3995971679688
|
||||||
|
0.25,3.028,-12185.9423828125,881.9081420898438,1004.3994140625
|
||||||
|
0.25,3.078,-12228.1474609375,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,3.128,-12236.55859375,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,3.178,-12236.55859375,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,3.228,-12236.55859375,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,3.278,-12312.55859375,881.9080810546875,1004.399169921875
|
||||||
|
0.25,3.329,-12354.712890625,881.9080200195312,1004.3991088867188
|
||||||
|
0.25,3.382,-12396.9189453125,881.9080200195312,1004.3989868164062
|
||||||
|
0.25,3.432,-12430.662109375,881.9080200195312,1004.39892578125
|
||||||
|
0.25,3.482,-12489.740234375,881.907958984375,1004.3988037109375
|
||||||
|
0.25,3.534,-12498.150390625,881.907958984375,1004.3988037109375
|
||||||
|
0.25,3.584,-12498.150390625,881.907958984375,1004.3988037109375
|
||||||
|
0.25,3.654,-12498.150390625,881.907958984375,1004.3988037109375
|
||||||
|
0.25,3.706,-12582.5615234375,881.9078979492188,1004.3986206054688
|
||||||
|
0.25,3.756,-12616.3056640625,881.9078979492188,1004.3985595703125
|
||||||
|
0.25,3.807,-12666.9208984375,881.9078369140625,1004.3984375
|
||||||
|
0.25,3.857,-12700.6650390625,881.9078369140625,1004.3983764648438
|
||||||
|
0.25,3.907,-12751.28125,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,3.96,-12751.28125,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,4.01,-12751.28125,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,4.06,-12751.28125,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,4.11,-12844.1025390625,881.9077758789062,1004.3981323242188
|
||||||
|
0.25,4.16,-12877.8466796875,881.9077758789062,1004.3980102539062
|
||||||
|
0.25,4.211,-12928.462890625,881.90771484375,1004.39794921875
|
||||||
|
0.25,4.261,-12962.2060546875,881.90771484375,1004.3978881835938
|
||||||
|
0.25,4.311,-13012.822265625,881.9076538085938,1004.3977661132812
|
||||||
|
0.25,4.361,-13021.2333984375,881.9076538085938,1004.3977661132812
|
||||||
|
0.25,4.411,-13021.2333984375,881.9076538085938,1004.3977661132812
|
||||||
|
0.25,4.461,-13021.2333984375,881.9076538085938,1004.3977661132812
|
||||||
|
0.25,4.511,-13105.6435546875,881.9076538085938,1004.3975830078125
|
||||||
|
0.25,4.562,-13122.515625,881.9075927734375,1004.3975219726562
|
||||||
|
0.25,4.612,-13198.46484375,881.9075927734375,1004.3973999023438
|
||||||
|
0.25,4.663,-13215.3369140625,881.9075927734375,1004.3973388671875
|
||||||
|
0.25,4.713,-13265.953125,881.9075317382812,1004.3972778320312
|
||||||
|
0.25,4.763,-13274.3642578125,881.9075317382812,1004.397216796875
|
||||||
|
0.25,4.813,-13274.3642578125,881.9075317382812,1004.397216796875
|
||||||
|
0.25,4.863,-13274.3642578125,881.9075317382812,1004.397216796875
|
||||||
|
0.25,4.913,-13358.7744140625,881.907470703125,1004.3970336914062
|
||||||
|
0.25,4.963,-13375.646484375,881.907470703125,1004.3970336914062
|
||||||
|
0.25,5.014,-13451.595703125,881.907470703125,1004.3968505859375
|
||||||
|
0.25,5.064,-13476.9287109375,881.9074096679688,1004.3968505859375
|
||||||
|
0.25,5.114,-13527.494140625,881.9074096679688,1004.396728515625
|
||||||
|
0.25,5.164,-13527.494140625,881.9074096679688,1004.396728515625
|
||||||
|
0.25,5.215,-13527.494140625,881.9074096679688,1004.396728515625
|
||||||
|
0.25,5.265,-13527.494140625,881.9074096679688,1004.396728515625
|
||||||
|
0.25,5.315,-13620.3154296875,881.9073486328125,1004.3965454101562
|
||||||
|
0.25,5.365,-13654.0595703125,881.9073486328125,1004.396484375
|
||||||
|
0.25,5.416,-13704.67578125,881.9072875976562,1004.3963623046875
|
||||||
|
0.25,5.466,-13738.419921875,881.9072875976562,1004.3963012695312
|
||||||
|
0.25,5.516,-13780.57421875,881.9072875976562,1004.3961791992188
|
||||||
|
0.25,5.567,-13780.57421875,881.9072875976562,1004.3961791992188
|
||||||
|
0.25,5.617,-13780.57421875,881.9072875976562,1004.3961791992188
|
||||||
|
0.25,5.667,-13780.57421875,881.9072875976562,1004.3961791992188
|
||||||
|
0.25,5.717,-13864.9853515625,881.9072265625,1004.3960571289062
|
||||||
|
0.25,5.768,-13898.7294921875,881.9072265625,1004.39599609375
|
||||||
|
0.25,5.818,-13949.3447265625,881.9071655273438,1004.3958740234375
|
||||||
|
0.25,5.868,-13966.216796875,881.9071655273438,1004.3958129882812
|
||||||
|
0.25,5.918,-14008.3720703125,881.9071655273438,1004.395751953125
|
||||||
|
0.25,5.968,-14008.3720703125,881.9071655273438,1004.395751953125
|
||||||
|
0.5,0.0,-19904.896484375,881.9039916992188,1004.3837890625
|
||||||
|
0.5,0.063,-19953.958984375,881.9039306640625,1004.3837280273438
|
||||||
|
0.5,0.113,-19990.71875,881.9039306640625,1004.3836669921875
|
||||||
|
0.5,0.164,-19990.71875,881.9039306640625,1004.3836669921875
|
||||||
|
0.5,0.215,-19990.71875,881.9039306640625,1004.3836669921875
|
||||||
|
0.5,0.265,-19990.71875,881.9039306640625,1004.3836669921875
|
||||||
|
0.5,0.316,-20150.20703125,881.9038696289062,1004.38330078125
|
||||||
|
0.5,0.366,-20174.73828125,881.90380859375,1004.38330078125
|
||||||
|
0.5,0.416,-20260.6328125,881.90380859375,1004.3831176757812
|
||||||
|
0.5,0.467,-20309.6953125,881.9037475585938,1004.3829956054688
|
||||||
|
0.5,0.517,-20346.455078125,881.9037475585938,1004.3829345703125
|
||||||
|
0.5,0.567,-20346.455078125,881.9037475585938,1004.3829345703125
|
||||||
|
0.5,0.62,-20346.455078125,881.9037475585938,1004.3829345703125
|
||||||
|
0.5,0.67,-20346.455078125,881.9037475585938,1004.3829345703125
|
||||||
|
0.5,0.72,-20505.943359375,881.9036865234375,1004.3826293945312
|
||||||
|
0.5,0.771,-20530.474609375,881.9036254882812,1004.382568359375
|
||||||
|
0.5,0.821,-20616.369140625,881.9036254882812,1004.3823852539062
|
||||||
|
0.5,0.871,-20689.962890625,881.903564453125,1004.3822021484375
|
||||||
|
0.5,0.921,-20738.951171875,881.903564453125,1004.3821411132812
|
||||||
|
0.5,0.971,-20738.951171875,881.903564453125,1004.3821411132812
|
||||||
|
0.5,1.021,-20738.951171875,881.903564453125,1004.3821411132812
|
||||||
|
0.5,1.071,-20738.951171875,881.903564453125,1004.3821411132812
|
||||||
|
0.5,1.124,-20886.2109375,881.9034423828125,1004.3818359375
|
||||||
|
0.5,1.174,-20935.2734375,881.9034423828125,1004.3817138671875
|
||||||
|
0.5,1.225,-21033.396484375,881.9033813476562,1004.3815307617188
|
||||||
|
0.5,1.275,-21057.927734375,881.9033813476562,1004.3814697265625
|
||||||
|
0.5,1.325,-21106.916015625,881.9033203125,1004.3814086914062
|
||||||
|
0.5,1.375,-21106.916015625,881.9033203125,1004.3814086914062
|
||||||
|
0.5,1.427,-21106.916015625,881.9033203125,1004.3814086914062
|
||||||
|
0.5,1.477,-21106.916015625,881.9033203125,1004.3814086914062
|
||||||
|
0.5,1.527,-21266.404296875,881.9032592773438,1004.3810424804688
|
||||||
|
0.5,1.577,-21327.76953125,881.9031982421875,1004.3809204101562
|
||||||
|
0.5,1.627,-21401.361328125,881.9031982421875,1004.3807983398438
|
||||||
|
0.5,1.678,-21425.892578125,881.9031372070312,1004.3807373046875
|
||||||
|
0.5,1.728,-21487.18359375,881.9031372070312,1004.380615234375
|
||||||
|
0.5,1.778,-21487.18359375,881.9031372070312,1004.380615234375
|
||||||
|
0.5,1.828,-21487.18359375,881.9031372070312,1004.380615234375
|
||||||
|
0.5,1.878,-21487.18359375,881.9031372070312,1004.380615234375
|
||||||
|
0.5,1.93,-21622.140625,881.903076171875,1004.3803100585938
|
||||||
|
0.5,1.98,-21658.974609375,881.9030151367188,1004.3802490234375
|
||||||
|
0.5,2.061,-21732.56640625,881.9030151367188,1004.380126953125
|
||||||
|
0.5,2.111,-21793.857421875,881.9029541015625,1004.3800048828125
|
||||||
|
0.5,2.162,-21806.0859375,881.9029541015625,1004.3799438476562
|
||||||
|
0.5,2.212,-21806.0859375,881.9029541015625,1004.3799438476562
|
||||||
|
0.5,2.262,-21806.0859375,881.9029541015625,1004.3799438476562
|
||||||
|
0.5,2.312,-21916.513671875,881.9028930664062,1004.3797607421875
|
||||||
|
0.5,2.365,-21941.04296875,881.9028930664062,1004.3796997070312
|
||||||
|
0.5,2.415,-22051.470703125,881.90283203125,1004.3794555664062
|
||||||
|
0.5,2.466,-22051.470703125,881.90283203125,1004.3794555664062
|
||||||
|
0.5,2.516,-22149.59375,881.9027709960938,1004.3792724609375
|
||||||
|
0.5,2.566,-22161.822265625,881.9027709960938,1004.3792114257812
|
||||||
|
0.5,2.616,-22161.822265625,881.9027709960938,1004.3792114257812
|
||||||
|
0.5,2.667,-22161.822265625,881.9027709960938,1004.3792114257812
|
||||||
|
0.5,2.717,-22309.08203125,881.9027099609375,1004.37890625
|
||||||
|
0.5,2.769,-22333.61328125,881.9026489257812,1004.37890625
|
||||||
|
0.5,2.819,-22431.73828125,881.9026489257812,1004.378662109375
|
||||||
|
0.5,2.87,-22456.267578125,881.902587890625,1004.378662109375
|
||||||
|
0.5,2.92,-22554.392578125,881.902587890625,1004.37841796875
|
||||||
|
0.5,2.973,-22554.392578125,881.902587890625,1004.37841796875
|
||||||
|
0.5,3.023,-22554.392578125,881.902587890625,1004.37841796875
|
||||||
|
0.5,3.075,-22554.392578125,881.902587890625,1004.37841796875
|
||||||
|
0.5,3.125,-22701.65234375,881.9024658203125,1004.3781127929688
|
||||||
|
0.5,3.176,-22726.18359375,881.9024658203125,1004.3781127929688
|
||||||
|
0.5,3.261,-22824.306640625,881.9024047851562,1004.3778686523438
|
||||||
|
0.5,3.311,-22897.900390625,881.9024047851562,1004.3777465820312
|
||||||
|
0.5,3.362,-22922.357421875,881.90234375,1004.377685546875
|
||||||
|
0.5,3.412,-22922.357421875,881.90234375,1004.377685546875
|
||||||
|
0.5,3.462,-22922.357421875,881.90234375,1004.377685546875
|
||||||
|
0.5,3.512,-23032.857421875,881.9022827148438,1004.37744140625
|
||||||
|
0.5,3.567,-23069.6171875,881.9022827148438,1004.3773803710938
|
||||||
|
0.5,3.617,-23143.2109375,881.9022216796875,1004.3772583007812
|
||||||
|
0.5,3.668,-23192.271484375,881.9022216796875,1004.3771362304688
|
||||||
|
0.5,3.718,-23241.333984375,881.9022216796875,1004.3770751953125
|
||||||
|
0.5,3.768,-23265.791015625,881.9021606445312,1004.3770141601562
|
||||||
|
0.5,3.818,-23265.791015625,881.9021606445312,1004.3770141601562
|
||||||
|
0.5,3.868,-23265.791015625,881.9021606445312,1004.3770141601562
|
||||||
|
0.5,3.919,-23265.791015625,881.9021606445312,1004.3770141601562
|
||||||
|
0.5,3.969,-23413.125,881.902099609375,1004.376708984375
|
||||||
|
0.5,4.02,-23486.716796875,881.9020385742188,1004.3765258789062
|
||||||
|
0.5,4.07,-23548.08203125,881.9020385742188,1004.3764038085938
|
||||||
|
0.5,4.12,-23621.67578125,881.9019775390625,1004.3762817382812
|
||||||
|
0.5,4.17,-23670.736328125,881.9019775390625,1004.3761596679688
|
||||||
|
0.5,4.221,-23695.193359375,881.9019775390625,1004.3761596679688
|
||||||
|
0.5,4.271,-23695.193359375,881.9019775390625,1004.3761596679688
|
||||||
|
0.5,4.321,-23695.193359375,881.9019775390625,1004.3761596679688
|
||||||
|
0.5,4.371,-23695.193359375,881.9019775390625,1004.3761596679688
|
||||||
|
0.5,4.421,-23891.515625,881.90185546875,1004.375732421875
|
||||||
|
0.5,4.471,-23916.046875,881.90185546875,1004.3756713867188
|
||||||
|
0.5,4.521,-23989.640625,881.9017944335938,1004.3755493164062
|
||||||
|
0.5,4.571,-24038.701171875,881.9017333984375,1004.3754272460938
|
||||||
|
0.5,4.622,-24087.689453125,881.9017333984375,1004.3753662109375
|
||||||
|
0.5,4.672,-24087.689453125,881.9017333984375,1004.3753662109375
|
||||||
|
0.5,4.723,-24087.689453125,881.9017333984375,1004.3753662109375
|
||||||
|
0.5,4.773,-24087.689453125,881.9017333984375,1004.3753662109375
|
||||||
|
0.5,4.824,-24234.94921875,881.9016723632812,1004.3750610351562
|
||||||
|
0.5,4.874,-24259.48046875,881.9016723632812,1004.375
|
||||||
|
0.5,4.925,-24357.60546875,881.901611328125,1004.3748168945312
|
||||||
|
0.5,4.975,-24394.4375,881.9015502929688,1004.3746948242188
|
||||||
|
0.5,5.025,-24455.728515625,881.9015502929688,1004.3745727539062
|
||||||
|
0.5,5.076,-24455.728515625,881.9015502929688,1004.3745727539062
|
||||||
|
0.5,5.126,-24455.728515625,881.9015502929688,1004.3745727539062
|
||||||
|
0.5,5.177,-24455.728515625,881.9015502929688,1004.3745727539062
|
||||||
|
0.5,5.227,-24602.98828125,881.9014892578125,1004.3743286132812
|
||||||
|
0.5,5.278,-24664.353515625,881.9014282226562,1004.3742065429688
|
||||||
|
0.5,5.361,-24737.9453125,881.9013671875,1004.3740234375
|
||||||
|
0.5,5.414,-24811.5390625,881.9013671875,1004.3739013671875
|
||||||
|
0.5,5.464,-24848.298828125,881.9013061523438,1004.373779296875
|
||||||
|
0.5,5.517,-24885.130859375,881.9013061523438,1004.3737182617188
|
||||||
|
0.5,5.567,-24885.130859375,881.9013061523438,1004.3737182617188
|
||||||
|
0.5,5.618,-24885.130859375,881.9013061523438,1004.3737182617188
|
||||||
|
0.5,5.668,-24885.130859375,881.9013061523438,1004.3737182617188
|
||||||
|
0.5,5.718,-25044.619140625,881.9012451171875,1004.3734130859375
|
||||||
|
0.5,5.768,-25093.681640625,881.9011840820312,1004.373291015625
|
||||||
|
0.5,5.818,-25167.275390625,881.9011840820312,1004.3731689453125
|
||||||
|
0.5,5.869,-25228.638671875,881.901123046875,1004.373046875
|
||||||
|
0.5,5.919,-25289.9296875,881.901123046875,1004.3729248046875
|
||||||
|
0.5,5.969,-25289.9296875,881.901123046875,1004.3729248046875
|
||||||
|
0.75,0.0,-32630.017578125,881.8971557617188,1004.3580932617188
|
||||||
|
0.75,0.056,-32630.017578125,881.8971557617188,1004.3580932617188
|
||||||
|
0.75,0.109,-32630.017578125,881.8971557617188,1004.3580932617188
|
||||||
|
0.75,0.167,-32630.017578125,881.8971557617188,1004.3580932617188
|
||||||
|
0.75,0.217,-32806.5,881.8970336914062,1004.3577270507812
|
||||||
|
0.75,0.267,-32870.66015625,881.8970336914062,1004.3576049804688
|
||||||
|
0.75,0.317,-33031.1484375,881.8969116210938,1004.3572387695312
|
||||||
|
0.75,0.368,-33063.23046875,881.8969116210938,1004.357177734375
|
||||||
|
0.75,0.421,-33111.30078125,881.8969116210938,1004.3571166992188
|
||||||
|
0.75,0.471,-33111.30078125,881.8969116210938,1004.3571166992188
|
||||||
|
0.75,0.521,-33111.30078125,881.8969116210938,1004.3571166992188
|
||||||
|
0.75,0.571,-33111.30078125,881.8969116210938,1004.3571166992188
|
||||||
|
0.75,0.624,-33255.703125,881.8967895507812,1004.3568115234375
|
||||||
|
0.75,0.674,-33368.02734375,881.8967895507812,1004.3565673828125
|
||||||
|
0.75,0.724,-33464.265625,881.896728515625,1004.3563842773438
|
||||||
|
0.75,0.774,-33528.421875,881.8966674804688,1004.3562622070312
|
||||||
|
0.75,0.827,-33576.4921875,881.8966674804688,1004.3561401367188
|
||||||
|
0.75,0.877,-33576.4921875,881.8966674804688,1004.3561401367188
|
||||||
|
0.75,0.929,-33576.4921875,881.8966674804688,1004.3561401367188
|
||||||
|
0.75,0.979,-33736.984375,881.8965454101562,1004.3558349609375
|
||||||
|
0.75,1.029,-33785.0546875,881.8965454101562,1004.355712890625
|
||||||
|
0.75,1.079,-33897.37890625,881.896484375,1004.3555297851562
|
||||||
|
0.75,1.129,-33993.6171875,881.8964233398438,1004.3552856445312
|
||||||
|
0.75,1.179,-34025.6953125,881.8964233398438,1004.355224609375
|
||||||
|
0.75,1.23,-34041.6875,881.8964233398438,1004.355224609375
|
||||||
|
0.75,1.28,-34041.6875,881.8964233398438,1004.355224609375
|
||||||
|
0.75,1.33,-34041.6875,881.8964233398438,1004.355224609375
|
||||||
|
0.75,1.381,-34202.1796875,881.8963012695312,1004.3549194335938
|
||||||
|
0.75,1.431,-34282.328125,881.896240234375,1004.354736328125
|
||||||
|
0.75,1.482,-34330.4921875,881.896240234375,1004.3546142578125
|
||||||
|
0.75,1.532,-34426.73046875,881.8961791992188,1004.3544311523438
|
||||||
|
0.75,1.582,-34458.80859375,881.8961791992188,1004.3543701171875
|
||||||
|
0.75,1.632,-34474.80078125,881.8961791992188,1004.3543090820312
|
||||||
|
0.75,1.682,-34474.80078125,881.8961791992188,1004.3543090820312
|
||||||
|
0.75,1.732,-34474.80078125,881.8961791992188,1004.3543090820312
|
||||||
|
0.75,1.785,-34635.29296875,881.8960571289062,1004.35400390625
|
||||||
|
0.75,1.867,-34715.5390625,881.8960571289062,1004.3538208007812
|
||||||
|
0.75,1.917,-34811.7734375,881.89599609375,1004.3536376953125
|
||||||
|
0.75,1.967,-34859.84375,881.8959350585938,1004.3535766601562
|
||||||
|
0.75,2.018,-34859.84375,881.8959350585938,1004.3535766601562
|
||||||
|
0.75,2.069,-34859.84375,881.8959350585938,1004.3535766601562
|
||||||
|
0.75,2.119,-34859.84375,881.8959350585938,1004.3535766601562
|
||||||
|
0.75,2.172,-35004.25,881.8958740234375,1004.353271484375
|
||||||
|
0.75,2.228,-35132.66015625,881.8958129882812,1004.35302734375
|
||||||
|
0.75,2.278,-35196.8203125,881.895751953125,1004.3528442382812
|
||||||
|
0.75,2.328,-35276.96875,881.895751953125,1004.3527221679688
|
||||||
|
0.75,2.381,-35292.9609375,881.895751953125,1004.3526611328125
|
||||||
|
0.75,2.431,-35292.9609375,881.895751953125,1004.3526611328125
|
||||||
|
0.75,2.481,-35292.9609375,881.895751953125,1004.3526611328125
|
||||||
|
0.75,2.531,-35469.44140625,881.8956298828125,1004.352294921875
|
||||||
|
0.75,2.581,-35469.44140625,881.8956298828125,1004.352294921875
|
||||||
|
0.75,2.632,-35597.7578125,881.8955688476562,1004.35205078125
|
||||||
|
0.75,2.682,-35661.91796875,881.8955078125,1004.3519287109375
|
||||||
|
0.75,2.732,-35742.06640625,881.8955078125,1004.3517456054688
|
||||||
|
0.75,2.782,-35758.05859375,881.8954467773438,1004.3517456054688
|
||||||
|
0.75,2.832,-35758.05859375,881.8954467773438,1004.3517456054688
|
||||||
|
0.75,2.882,-35758.05859375,881.8954467773438,1004.3517456054688
|
||||||
|
0.75,2.935,-35950.62890625,881.8953857421875,1004.351318359375
|
||||||
|
0.75,2.985,-35982.70703125,881.8953857421875,1004.3512573242188
|
||||||
|
0.75,3.067,-36078.9453125,881.8953247070312,1004.35107421875
|
||||||
|
0.75,3.117,-36191.171875,881.895263671875,1004.350830078125
|
||||||
|
0.75,3.168,-36207.1640625,881.895263671875,1004.350830078125
|
||||||
|
0.75,3.218,-36207.1640625,881.895263671875,1004.350830078125
|
||||||
|
0.75,3.268,-36207.1640625,881.895263671875,1004.350830078125
|
||||||
|
0.75,3.32,-36367.65625,881.8951416015625,1004.3505249023438
|
||||||
|
0.75,3.37,-36367.65625,881.8951416015625,1004.3505249023438
|
||||||
|
0.75,3.421,-36528.05078125,881.8950805664062,1004.3501586914062
|
||||||
|
0.75,3.472,-36560.12890625,881.89501953125,1004.35009765625
|
||||||
|
0.75,3.522,-36672.453125,881.8949584960938,1004.349853515625
|
||||||
|
0.75,3.572,-36688.4453125,881.8949584960938,1004.349853515625
|
||||||
|
0.75,3.628,-36688.4453125,881.8949584960938,1004.349853515625
|
||||||
|
0.75,3.678,-36688.4453125,881.8949584960938,1004.349853515625
|
||||||
|
0.75,3.728,-36848.9375,881.8948974609375,1004.3495483398438
|
||||||
|
0.75,3.778,-36881.015625,881.8948974609375,1004.3494262695312
|
||||||
|
0.75,3.828,-36977.25390625,881.8948364257812,1004.3492431640625
|
||||||
|
0.75,3.878,-37041.41015625,881.894775390625,1004.34912109375
|
||||||
|
0.75,3.928,-37105.56640625,881.894775390625,1004.3489990234375
|
||||||
|
0.75,3.979,-37121.55859375,881.894775390625,1004.3489379882812
|
||||||
|
0.75,4.029,-37121.55859375,881.894775390625,1004.3489379882812
|
||||||
|
0.75,4.079,-37121.55859375,881.894775390625,1004.3489379882812
|
||||||
|
0.75,4.129,-37281.953125,881.8946533203125,1004.3486328125
|
||||||
|
0.75,4.179,-37281.953125,881.8946533203125,1004.3486328125
|
||||||
|
0.75,4.23,-37410.26953125,881.8945922851562,1004.348388671875
|
||||||
|
0.75,4.28,-37474.4296875,881.89453125,1004.3482666015625
|
||||||
|
0.75,4.33,-37554.578125,881.89453125,1004.3480834960938
|
||||||
|
0.75,4.382,-37570.5703125,881.89453125,1004.3480834960938
|
||||||
|
0.75,4.432,-37570.5703125,881.89453125,1004.3480834960938
|
||||||
|
0.75,4.482,-37570.5703125,881.89453125,1004.3480834960938
|
||||||
|
0.75,4.532,-37714.97265625,881.8944091796875,1004.3477783203125
|
||||||
|
0.75,4.582,-37763.140625,881.8944091796875,1004.34765625
|
||||||
|
0.75,4.632,-37859.375,881.8943481445312,1004.3474731445312
|
||||||
|
0.75,4.682,-37907.54296875,881.8943481445312,1004.3473510742188
|
||||||
|
0.75,4.732,-37987.69140625,881.894287109375,1004.3472290039062
|
||||||
|
0.75,4.783,-37987.69140625,881.894287109375,1004.3472290039062
|
||||||
|
0.75,4.834,-37987.69140625,881.894287109375,1004.3472290039062
|
||||||
|
0.75,4.884,-37987.69140625,881.894287109375,1004.3472290039062
|
||||||
|
0.75,4.937,-38116.0078125,881.8942260742188,1004.3469848632812
|
||||||
|
0.75,4.987,-38196.25390625,881.8941650390625,1004.3468017578125
|
||||||
|
0.75,5.037,-38324.5703125,881.8941040039062,1004.3465576171875
|
||||||
|
0.75,5.088,-38404.81640625,881.89404296875,1004.3463745117188
|
||||||
|
0.75,5.138,-38420.80859375,881.89404296875,1004.3463134765625
|
||||||
|
0.75,5.189,-38420.80859375,881.89404296875,1004.3463134765625
|
||||||
|
0.75,5.239,-38420.80859375,881.89404296875,1004.3463134765625
|
||||||
|
0.75,5.289,-38549.21875,881.8939819335938,1004.3460693359375
|
||||||
|
0.75,5.367,-38629.3671875,881.8939208984375,1004.345947265625
|
||||||
|
0.75,5.417,-38741.69140625,881.8938598632812,1004.345703125
|
||||||
|
0.75,5.467,-38773.7734375,881.8938598632812,1004.3456420898438
|
||||||
|
0.75,5.517,-38886.09765625,881.893798828125,1004.3453979492188
|
||||||
|
0.75,5.567,-38886.09765625,881.893798828125,1004.3453979492188
|
||||||
|
0.75,5.618,-38886.09765625,881.893798828125,1004.3453979492188
|
||||||
|
0.75,5.668,-38886.09765625,881.893798828125,1004.3453979492188
|
||||||
|
0.75,5.722,-39046.58984375,881.8937377929688,1004.3450927734375
|
||||||
|
0.75,5.772,-39110.74609375,881.8936767578125,1004.344970703125
|
||||||
|
0.75,5.822,-39255.1484375,881.8936157226562,1004.3446655273438
|
||||||
|
0.75,5.873,-39335.39453125,881.8935546875,1004.344482421875
|
||||||
|
0.75,5.923,-39367.37890625,881.8935546875,1004.3444213867188
|
||||||
|
0.75,5.973,-39367.37890625,881.8935546875,1004.3444213867188
|
||||||
|
1.0,0.0,-45039.73828125,881.888671875,1004.3260498046875
|
||||||
|
1.0,0.05,-45039.73828125,881.8886108398438,1004.3258666992188
|
||||||
|
1.0,0.101,-45039.73828125,881.8886108398438,1004.3258056640625
|
||||||
|
1.0,0.158,-45039.73828125,881.8886108398438,1004.3258056640625
|
||||||
|
1.0,0.208,-45039.73828125,881.8886108398438,1004.3258056640625
|
||||||
|
1.0,0.259,-45019.80859375,881.8884887695312,1004.325439453125
|
||||||
|
1.0,0.309,-45039.73828125,881.888427734375,1004.3251953125
|
||||||
|
1.0,0.359,-45039.73828125,881.888427734375,1004.3251342773438
|
||||||
|
1.0,0.409,-45039.73828125,881.8883666992188,1004.3247680664062
|
||||||
|
1.0,0.459,-45019.80859375,881.8883056640625,1004.3247680664062
|
||||||
|
1.0,0.511,-45019.80859375,881.8883056640625,1004.3247680664062
|
||||||
|
1.0,0.561,-45019.80859375,881.8883056640625,1004.3247680664062
|
||||||
|
1.0,0.611,-45019.80859375,881.88818359375,1004.3243408203125
|
||||||
|
1.0,0.661,-45039.73828125,881.88818359375,1004.32421875
|
||||||
|
1.0,0.711,-45039.73828125,881.8881225585938,1004.3239135742188
|
||||||
|
1.0,0.761,-45039.73828125,881.8880615234375,1004.3238525390625
|
||||||
|
1.0,0.811,-45039.73828125,881.8880004882812,1004.3236083984375
|
||||||
|
1.0,0.863,-45019.80859375,881.8880004882812,1004.3235473632812
|
||||||
|
1.0,0.914,-45019.80859375,881.8880004882812,1004.3235473632812
|
||||||
|
1.0,0.964,-45019.80859375,881.8880004882812,1004.3235473632812
|
||||||
|
1.0,1.014,-45019.80859375,881.8878784179688,1004.3231201171875
|
||||||
|
1.0,1.065,-45039.73828125,881.8878784179688,1004.322998046875
|
||||||
|
1.0,1.115,-45039.73828125,881.8878173828125,1004.32275390625
|
||||||
|
1.0,1.165,-45039.73828125,881.8877563476562,1004.3225708007812
|
||||||
|
1.0,1.216,-45019.80859375,881.8876953125,1004.3224487304688
|
||||||
|
1.0,1.266,-45019.80859375,881.8876953125,1004.3224487304688
|
||||||
|
1.0,1.316,-45019.80859375,881.8876953125,1004.3224487304688
|
||||||
|
1.0,1.366,-45019.80859375,881.8876953125,1004.3224487304688
|
||||||
|
1.0,1.416,-45059.66796875,881.8875732421875,1004.3219604492188
|
||||||
|
1.0,1.466,-45039.73828125,881.8875122070312,1004.32177734375
|
||||||
|
1.0,1.516,-45039.73828125,881.887451171875,1004.3214721679688
|
||||||
|
1.0,1.567,-45039.73828125,881.887451171875,1004.3213500976562
|
||||||
|
1.0,1.618,-45039.73828125,881.8873901367188,1004.3212890625
|
||||||
|
1.0,1.668,-45039.73828125,881.8873901367188,1004.3212890625
|
||||||
|
1.0,1.718,-45039.73828125,881.8873901367188,1004.3212890625
|
||||||
|
1.0,1.771,-45039.73828125,881.8873291015625,1004.3209228515625
|
||||||
|
1.0,1.821,-45039.73828125,881.8872680664062,1004.3207397460938
|
||||||
|
1.0,1.871,-45039.73828125,881.8872680664062,1004.3206787109375
|
||||||
|
1.0,1.921,-45039.73828125,881.8871459960938,1004.3203125
|
||||||
|
1.0,1.971,-45039.73828125,881.8871459960938,1004.3201904296875
|
||||||
|
1.0,2.022,-45039.73828125,881.8871459960938,1004.3201904296875
|
||||||
|
1.0,2.072,-45039.73828125,881.8871459960938,1004.3201904296875
|
||||||
|
1.0,2.122,-45039.73828125,881.8871459960938,1004.3201904296875
|
||||||
|
1.0,2.173,-45059.66796875,881.8870239257812,1004.3197021484375
|
||||||
|
1.0,2.223,-45039.73828125,881.8869018554688,1004.3194580078125
|
||||||
|
1.0,2.273,-45039.73828125,881.8869018554688,1004.3193969726562
|
||||||
|
1.0,2.323,-45039.73828125,881.8868408203125,1004.3191528320312
|
||||||
|
1.0,2.373,-45059.66796875,881.8867797851562,1004.3190307617188
|
||||||
|
1.0,2.424,-45059.66796875,881.8867797851562,1004.3190307617188
|
||||||
|
1.0,2.474,-45059.66796875,881.8867797851562,1004.3190307617188
|
||||||
|
1.0,2.524,-45179.0,881.88671875,1004.3186645507812
|
||||||
|
1.0,2.575,-45039.73828125,881.8866577148438,1004.3185424804688
|
||||||
|
1.0,2.625,-45039.73828125,881.8865966796875,1004.3182983398438
|
||||||
|
1.0,2.678,-45059.66796875,881.8865356445312,1004.3180541992188
|
||||||
|
1.0,2.728,-45039.73828125,881.886474609375,1004.31787109375
|
||||||
|
1.0,2.778,-45019.80859375,881.886474609375,1004.3178100585938
|
||||||
|
1.0,2.86,-45019.80859375,881.886474609375,1004.3178100585938
|
||||||
|
1.0,2.91,-45019.80859375,881.886474609375,1004.3178100585938
|
||||||
|
1.0,2.96,-45019.80859375,881.8863525390625,1004.3173828125
|
||||||
|
1.0,3.01,-45039.73828125,881.8862915039062,1004.317138671875
|
||||||
|
1.0,3.06,-45039.73828125,881.8862915039062,1004.317138671875
|
||||||
|
1.0,3.11,-45039.73828125,881.88623046875,1004.3167724609375
|
||||||
|
1.0,3.16,-45019.80859375,881.8861694335938,1004.316650390625
|
||||||
|
1.0,3.211,-45019.80859375,881.8861694335938,1004.316650390625
|
||||||
|
1.0,3.261,-45019.80859375,881.8861694335938,1004.316650390625
|
||||||
|
1.0,3.311,-45019.80859375,881.8861694335938,1004.316650390625
|
||||||
|
1.0,3.364,-45019.80859375,881.8861083984375,1004.3162841796875
|
||||||
|
1.0,3.414,-45039.73828125,881.885986328125,1004.3159790039062
|
||||||
|
1.0,3.464,-45039.73828125,881.885986328125,1004.31591796875
|
||||||
|
1.0,3.514,-45039.73828125,881.8859252929688,1004.3156127929688
|
||||||
|
1.0,3.565,-45019.80859375,881.8858642578125,1004.3155517578125
|
||||||
|
1.0,3.616,-45019.80859375,881.8858642578125,1004.3155517578125
|
||||||
|
1.0,3.666,-45019.80859375,881.8858642578125,1004.3155517578125
|
||||||
|
1.0,3.716,-45218.73828125,881.8857421875,1004.3151245117188
|
||||||
|
1.0,3.767,-45039.73828125,881.8857421875,1004.3150024414062
|
||||||
|
1.0,3.817,-45039.73828125,881.8856811523438,1004.3147583007812
|
||||||
|
1.0,3.867,-45039.73828125,881.8856811523438,1004.3146362304688
|
||||||
|
1.0,3.918,-45039.73828125,881.8855590820312,1004.3142700195312
|
||||||
|
1.0,3.968,-45019.80859375,881.8855590820312,1004.3142700195312
|
||||||
|
1.0,4.024,-45019.80859375,881.8855590820312,1004.3142700195312
|
||||||
|
1.0,4.074,-45019.80859375,881.8855590820312,1004.3142700195312
|
||||||
|
1.0,4.124,-45218.73828125,881.8854370117188,1004.3137817382812
|
||||||
|
1.0,4.175,-45039.73828125,881.8853759765625,1004.3136596679688
|
||||||
|
1.0,4.225,-45039.73828125,881.8853149414062,1004.3134765625
|
||||||
|
1.0,4.276,-45079.4765625,881.8853149414062,1004.3132934570312
|
||||||
|
1.0,4.326,-45019.80859375,881.8851928710938,1004.31298828125
|
||||||
|
1.0,4.377,-45019.80859375,881.8851928710938,1004.31298828125
|
||||||
|
1.0,4.458,-45019.80859375,881.8851928710938,1004.31298828125
|
||||||
|
1.0,4.508,-45019.80859375,881.8851928710938,1004.31298828125
|
||||||
|
1.0,4.561,-45019.80859375,881.8851318359375,1004.3126220703125
|
||||||
|
1.0,4.611,-45059.66796875,881.885009765625,1004.3123168945312
|
||||||
|
1.0,4.661,-45059.66796875,881.885009765625,1004.3123168945312
|
||||||
|
1.0,4.711,-45039.73828125,881.8849487304688,1004.31201171875
|
||||||
|
1.0,4.761,-45019.80859375,881.8848876953125,1004.3118896484375
|
||||||
|
1.0,4.812,-45019.80859375,881.8848876953125,1004.3118896484375
|
||||||
|
1.0,4.862,-45019.80859375,881.8848876953125,1004.3118896484375
|
||||||
|
1.0,4.912,-45019.80859375,881.8848876953125,1004.3118896484375
|
||||||
|
1.0,4.962,-45039.73828125,881.884765625,1004.3114013671875
|
||||||
|
1.0,5.012,-45039.73828125,881.884765625,1004.3111572265625
|
||||||
|
1.0,5.062,-45039.73828125,881.8847045898438,1004.3110961914062
|
||||||
|
1.0,5.112,-45039.73828125,881.8846435546875,1004.310791015625
|
||||||
|
1.0,5.163,-45019.80859375,881.8845825195312,1004.3106689453125
|
||||||
|
1.0,5.213,-45019.80859375,881.8845825195312,1004.3106689453125
|
||||||
|
1.0,5.263,-45019.80859375,881.8845825195312,1004.3106689453125
|
||||||
|
1.0,5.314,-45159.0703125,881.884521484375,1004.3103637695312
|
||||||
|
1.0,5.367,-45039.73828125,881.884521484375,1004.3102416992188
|
||||||
|
1.0,5.417,-45039.73828125,881.8843994140625,1004.3099975585938
|
||||||
|
1.0,5.468,-45039.73828125,881.8843994140625,1004.3098754882812
|
||||||
|
1.0,5.518,-45039.73828125,881.8843383789062,1004.3096313476562
|
||||||
|
1.0,5.569,-45019.80859375,881.8843383789062,1004.3095703125
|
||||||
|
1.0,5.619,-45019.80859375,881.8843383789062,1004.3095703125
|
||||||
|
1.0,5.669,-45019.80859375,881.8843383789062,1004.3095703125
|
||||||
|
1.0,5.719,-45179.0,881.8842163085938,1004.3092041015625
|
||||||
|
1.0,5.772,-45039.73828125,881.8841552734375,1004.30908203125
|
||||||
|
1.0,5.858,-45039.73828125,881.8841552734375,1004.3088989257812
|
||||||
|
1.0,5.908,-45039.73828125,881.884033203125,1004.3084106445312
|
||||||
|
1.0,5.958,-45019.80859375,881.8839721679688,1004.3084106445312
|
||||||
|
394
docs/re/captures/throttle-curve-lt.csv
Normal file
394
docs/re/captures/throttle-curve-lt.csv
Normal file
@@ -0,0 +1,394 @@
|
|||||||
|
lt,t,x,y,z
|
||||||
|
0.0,0.0,-1241.3275146484375,881.9140014648438,1004.421630859375
|
||||||
|
0.0,0.05,-1287.947509765625,881.9139404296875,1004.4215087890625
|
||||||
|
0.0,0.1,-1299.6025390625,881.9139404296875,1004.4215087890625
|
||||||
|
0.0,0.15,-1334.5675048828125,881.9139404296875,1004.4214477539062
|
||||||
|
0.0,0.2,-1352.032470703125,881.9139404296875,1004.42138671875
|
||||||
|
0.0,0.251,-1352.032470703125,881.9139404296875,1004.42138671875
|
||||||
|
0.0,0.301,-1352.032470703125,881.9139404296875,1004.42138671875
|
||||||
|
0.0,0.351,-1410.342529296875,881.9138793945312,1004.4212646484375
|
||||||
|
0.0,0.401,-1427.8074951171875,881.9138793945312,1004.4212646484375
|
||||||
|
0.0,0.451,-1462.7724609375,881.9138793945312,1004.4212036132812
|
||||||
|
0.0,0.501,-1474.427490234375,881.9138793945312,1004.421142578125
|
||||||
|
0.0,0.551,-1509.3924560546875,881.9138793945312,1004.4210815429688
|
||||||
|
0.0,0.602,-1515.2025146484375,881.913818359375,1004.4210815429688
|
||||||
|
0.0,0.652,-1515.2025146484375,881.913818359375,1004.4210815429688
|
||||||
|
0.0,0.702,-1515.2025146484375,881.913818359375,1004.4210815429688
|
||||||
|
0.0,0.752,-1567.66748046875,881.913818359375,1004.4209594726562
|
||||||
|
0.0,0.803,-1579.322509765625,881.913818359375,1004.4209594726562
|
||||||
|
0.0,0.853,-1625.9425048828125,881.9137573242188,1004.4208374023438
|
||||||
|
0.0,0.903,-1649.25244140625,881.9137573242188,1004.4207763671875
|
||||||
|
0.0,0.953,-1684.1824951171875,881.9137573242188,1004.4207153320312
|
||||||
|
0.0,1.003,-1684.1824951171875,881.9137573242188,1004.4207153320312
|
||||||
|
0.0,1.053,-1684.1824951171875,881.9137573242188,1004.4207153320312
|
||||||
|
0.0,1.104,-1684.1824951171875,881.9137573242188,1004.4207153320312
|
||||||
|
0.0,1.155,-1748.302490234375,881.9136962890625,1004.4205932617188
|
||||||
|
0.0,1.205,-1771.6124267578125,881.9136962890625,1004.4205322265625
|
||||||
|
0.0,1.255,-1824.077392578125,881.9136962890625,1004.4204711914062
|
||||||
|
0.0,1.305,-1835.732421875,881.9136962890625,1004.42041015625
|
||||||
|
0.0,1.357,-1841.54248046875,881.9136962890625,1004.42041015625
|
||||||
|
0.0,1.407,-1841.54248046875,881.9136962890625,1004.42041015625
|
||||||
|
0.0,1.457,-1841.54248046875,881.9136962890625,1004.42041015625
|
||||||
|
0.0,1.507,-1894.0074462890625,881.9136352539062,1004.4202880859375
|
||||||
|
0.0,1.56,-1928.972412109375,881.9136352539062,1004.4202270507812
|
||||||
|
0.0,1.61,-1952.2823486328125,881.9136352539062,1004.420166015625
|
||||||
|
0.0,1.66,-1987.2474365234375,881.91357421875,1004.4201049804688
|
||||||
|
0.0,1.711,-1993.057373046875,881.91357421875,1004.4201049804688
|
||||||
|
0.0,1.761,-1993.057373046875,881.91357421875,1004.4201049804688
|
||||||
|
0.0,1.811,-1993.057373046875,881.91357421875,1004.4201049804688
|
||||||
|
0.0,1.861,-2045.5223388671875,881.91357421875,1004.4199829101562
|
||||||
|
0.0,1.911,-2057.177490234375,881.91357421875,1004.4199829101562
|
||||||
|
0.0,1.998,-2103.79736328125,881.9135131835938,1004.4198608398438
|
||||||
|
0.0,2.048,-2132.91748046875,881.9135131835938,1004.4197998046875
|
||||||
|
0.0,2.101,-2138.727294921875,881.9135131835938,1004.4197998046875
|
||||||
|
0.0,2.151,-2138.727294921875,881.9135131835938,1004.4197998046875
|
||||||
|
0.0,2.201,-2138.727294921875,881.9135131835938,1004.4197998046875
|
||||||
|
0.0,2.251,-2202.847412109375,881.9134521484375,1004.419677734375
|
||||||
|
0.0,2.301,-2226.157470703125,881.9134521484375,1004.4196166992188
|
||||||
|
0.0,2.351,-2261.122314453125,881.9134521484375,1004.4195556640625
|
||||||
|
0.0,2.401,-2284.432373046875,881.9134521484375,1004.4194946289062
|
||||||
|
0.0,2.451,-2313.55224609375,881.9133911132812,1004.41943359375
|
||||||
|
0.0,2.502,-2313.55224609375,881.9133911132812,1004.41943359375
|
||||||
|
0.0,2.552,-2313.55224609375,881.9133911132812,1004.41943359375
|
||||||
|
0.0,2.602,-2313.55224609375,881.9133911132812,1004.41943359375
|
||||||
|
0.0,2.652,-2383.517333984375,881.9133911132812,1004.4193115234375
|
||||||
|
0.0,2.711,-2418.482421875,881.9133911132812,1004.4192504882812
|
||||||
|
0.0,2.761,-2453.447265625,881.913330078125,1004.419189453125
|
||||||
|
0.0,2.812,-2476.75732421875,881.913330078125,1004.4191284179688
|
||||||
|
0.0,2.862,-2476.75732421875,881.913330078125,1004.4191284179688
|
||||||
|
0.0,2.913,-2476.75732421875,881.913330078125,1004.4191284179688
|
||||||
|
0.0,2.963,-2529.222412109375,881.913330078125,1004.4190063476562
|
||||||
|
0.0,3.016,-2546.687255859375,881.9132690429688,1004.4190063476562
|
||||||
|
0.0,3.066,-2581.65234375,881.9132690429688,1004.4188842773438
|
||||||
|
0.0,3.116,-2604.96240234375,881.9132690429688,1004.4188842773438
|
||||||
|
0.0,3.166,-2634.082275390625,881.9132690429688,1004.4188232421875
|
||||||
|
0.0,3.217,-2634.082275390625,881.9132690429688,1004.4188232421875
|
||||||
|
0.0,3.296,-2634.082275390625,881.9132690429688,1004.4188232421875
|
||||||
|
0.0,3.346,-2692.392333984375,881.9132080078125,1004.418701171875
|
||||||
|
0.0,3.399,-2709.857421875,881.9132080078125,1004.4186401367188
|
||||||
|
0.0,3.453,-2744.822265625,881.9132080078125,1004.4185791015625
|
||||||
|
0.0,3.504,-2768.13232421875,881.9131469726562,1004.4185180664062
|
||||||
|
0.0,3.554,-2785.597412109375,881.9131469726562,1004.4185180664062
|
||||||
|
0.0,3.604,-2785.597412109375,881.9131469726562,1004.4185180664062
|
||||||
|
0.0,3.655,-2785.597412109375,881.9131469726562,1004.4185180664062
|
||||||
|
0.0,3.705,-2785.597412109375,881.9131469726562,1004.4185180664062
|
||||||
|
0.0,3.755,-2855.562255859375,881.9131469726562,1004.4183349609375
|
||||||
|
0.0,3.807,-2890.52734375,881.9130859375,1004.4182739257812
|
||||||
|
0.0,3.857,-2925.4921875,881.9130859375,1004.418212890625
|
||||||
|
0.0,3.907,-2954.647216796875,881.9130859375,1004.4181518554688
|
||||||
|
0.0,3.958,-2966.30224609375,881.9130859375,1004.4181518554688
|
||||||
|
0.25,0.0,-3754.611328125,881.9126586914062,1004.4165649414062
|
||||||
|
0.25,0.05,-3774.8525390625,881.9126586914062,1004.41650390625
|
||||||
|
0.25,0.1,-3805.21435546875,881.91259765625,1004.4164428710938
|
||||||
|
0.25,0.15,-3810.25927734375,881.91259765625,1004.4164428710938
|
||||||
|
0.25,0.201,-3810.25927734375,881.91259765625,1004.4164428710938
|
||||||
|
0.25,0.251,-3810.25927734375,881.91259765625,1004.4164428710938
|
||||||
|
0.25,0.301,-3850.77197265625,881.91259765625,1004.4163208007812
|
||||||
|
0.25,0.351,-3876.058349609375,881.91259765625,1004.4163208007812
|
||||||
|
0.25,0.402,-3906.420166015625,881.9125366210938,1004.416259765625
|
||||||
|
0.25,0.454,-3916.540771484375,881.9125366210938,1004.4161987304688
|
||||||
|
0.25,0.505,-3962.0986328125,881.9125366210938,1004.4161376953125
|
||||||
|
0.25,0.555,-3967.1435546875,881.9125366210938,1004.4161376953125
|
||||||
|
0.25,0.64,-3967.1435546875,881.9125366210938,1004.4161376953125
|
||||||
|
0.25,0.69,-3967.1435546875,881.9125366210938,1004.4161376953125
|
||||||
|
0.25,0.743,-4032.942626953125,881.9124755859375,1004.4159545898438
|
||||||
|
0.25,0.793,-4063.304443359375,881.9124755859375,1004.4158935546875
|
||||||
|
0.25,0.843,-4063.304443359375,881.9124755859375,1004.4158935546875
|
||||||
|
0.25,0.893,-4103.78662109375,881.9124755859375,1004.4158325195312
|
||||||
|
0.25,0.943,-4118.95263671875,881.9124755859375,1004.4158325195312
|
||||||
|
0.25,0.994,-4118.95263671875,881.9124755859375,1004.4158325195312
|
||||||
|
0.25,1.045,-4118.95263671875,881.9124755859375,1004.4158325195312
|
||||||
|
0.25,1.095,-4118.95263671875,881.9124755859375,1004.4158325195312
|
||||||
|
0.25,1.145,-4179.70654296875,881.9124145507812,1004.4157104492188
|
||||||
|
0.25,1.198,-4210.06787109375,881.9124145507812,1004.4156494140625
|
||||||
|
0.25,1.248,-4225.26416015625,881.9124145507812,1004.4155883789062
|
||||||
|
0.25,1.299,-4255.6259765625,881.912353515625,1004.41552734375
|
||||||
|
0.25,1.351,-4265.71630859375,881.912353515625,1004.41552734375
|
||||||
|
0.25,1.401,-4265.71630859375,881.912353515625,1004.41552734375
|
||||||
|
0.25,1.451,-4265.71630859375,881.912353515625,1004.41552734375
|
||||||
|
0.25,1.501,-4321.4248046875,881.912353515625,1004.4154052734375
|
||||||
|
0.25,1.552,-4336.5908203125,881.912353515625,1004.4153442382812
|
||||||
|
0.25,1.602,-4372.02783203125,881.9122924804688,1004.415283203125
|
||||||
|
0.25,1.652,-4397.3447265625,881.9122924804688,1004.4152221679688
|
||||||
|
0.25,1.703,-4427.70654296875,881.9122924804688,1004.4151611328125
|
||||||
|
0.25,1.755,-4432.75146484375,881.9122924804688,1004.4151611328125
|
||||||
|
0.25,1.805,-4432.75146484375,881.9122924804688,1004.4151611328125
|
||||||
|
0.25,1.855,-4432.75146484375,881.9122924804688,1004.4151611328125
|
||||||
|
0.25,1.905,-4488.4296875,881.9122314453125,1004.4150390625
|
||||||
|
0.25,1.955,-4498.55029296875,881.9122314453125,1004.4150390625
|
||||||
|
0.25,2.042,-4539.03271484375,881.9122314453125,1004.4149780273438
|
||||||
|
0.25,2.092,-4569.39453125,881.9122314453125,1004.4149169921875
|
||||||
|
0.25,2.143,-4574.439453125,881.9122314453125,1004.4148559570312
|
||||||
|
0.25,2.193,-4574.439453125,881.9122314453125,1004.4148559570312
|
||||||
|
0.25,2.243,-4574.439453125,881.9122314453125,1004.4148559570312
|
||||||
|
0.25,2.293,-4625.07275390625,881.9121704101562,1004.414794921875
|
||||||
|
0.25,2.344,-4640.23876953125,881.9121704101562,1004.4147338867188
|
||||||
|
0.25,2.394,-4680.72119140625,881.9121704101562,1004.4146728515625
|
||||||
|
0.25,2.444,-4690.841796875,881.9121704101562,1004.4146728515625
|
||||||
|
0.25,2.494,-4716.1279296875,881.912109375,1004.4146118164062
|
||||||
|
0.25,2.545,-4721.1728515625,881.912109375,1004.4146118164062
|
||||||
|
0.25,2.595,-4721.1728515625,881.912109375,1004.4146118164062
|
||||||
|
0.25,2.645,-4721.1728515625,881.912109375,1004.4146118164062
|
||||||
|
0.25,2.695,-4776.8515625,881.912109375,1004.4144897460938
|
||||||
|
0.25,2.745,-4786.97216796875,881.912109375,1004.4144287109375
|
||||||
|
0.25,2.795,-4822.4091796875,881.9120483398438,1004.4143676757812
|
||||||
|
0.25,2.845,-4842.650390625,881.9120483398438,1004.414306640625
|
||||||
|
0.25,2.895,-4873.01220703125,881.9120483398438,1004.4142456054688
|
||||||
|
0.25,2.946,-4878.05712890625,881.9120483398438,1004.4142456054688
|
||||||
|
0.25,2.997,-4878.05712890625,881.9120483398438,1004.4142456054688
|
||||||
|
0.25,3.047,-4878.05712890625,881.9120483398438,1004.4142456054688
|
||||||
|
0.25,3.097,-4923.615234375,881.9120483398438,1004.4141845703125
|
||||||
|
0.25,3.147,-4933.73583984375,881.9119873046875,1004.4141235351562
|
||||||
|
0.25,3.197,-4974.2177734375,881.9119873046875,1004.4140625
|
||||||
|
0.25,3.248,-4994.458984375,881.9119873046875,1004.4140014648438
|
||||||
|
0.25,3.298,-5024.82080078125,881.9119873046875,1004.4139404296875
|
||||||
|
0.25,3.348,-5029.8662109375,881.9119873046875,1004.4139404296875
|
||||||
|
0.25,3.399,-5029.8662109375,881.9119873046875,1004.4139404296875
|
||||||
|
0.25,3.449,-5029.8662109375,881.9119873046875,1004.4139404296875
|
||||||
|
0.25,3.499,-5090.6201171875,881.9119262695312,1004.413818359375
|
||||||
|
0.25,3.549,-5100.74072265625,881.9119262695312,1004.413818359375
|
||||||
|
0.25,3.6,-5131.10205078125,881.9119262695312,1004.4137573242188
|
||||||
|
0.25,3.651,-5151.34326171875,881.9119262695312,1004.4136962890625
|
||||||
|
0.25,3.701,-5166.50927734375,881.911865234375,1004.4136962890625
|
||||||
|
0.25,3.751,-5166.50927734375,881.911865234375,1004.4136962890625
|
||||||
|
0.25,3.802,-5166.50927734375,881.911865234375,1004.4136962890625
|
||||||
|
0.25,3.852,-5166.50927734375,881.911865234375,1004.4136962890625
|
||||||
|
0.25,3.902,-5222.1875,881.911865234375,1004.41357421875
|
||||||
|
0.25,3.952,-5252.54931640625,881.911865234375,1004.4135131835938
|
||||||
|
0.5,0.0,-5905.412109375,881.9114990234375,1004.4121704101562
|
||||||
|
0.5,0.062,-5905.412109375,881.9114990234375,1004.4121704101562
|
||||||
|
0.5,0.112,-5905.412109375,881.9114990234375,1004.4121704101562
|
||||||
|
0.5,0.162,-5948.697265625,881.9114379882812,1004.412109375
|
||||||
|
0.5,0.212,-5980.16943359375,881.9114379882812,1004.4120483398438
|
||||||
|
0.5,0.263,-5988.037109375,881.9114379882812,1004.4119873046875
|
||||||
|
0.5,0.313,-6023.45458984375,881.9114379882812,1004.4119262695312
|
||||||
|
0.5,0.363,-6027.376953125,881.9114379882812,1004.4119262695312
|
||||||
|
0.5,0.413,-6031.298828125,881.9114379882812,1004.4119262695312
|
||||||
|
0.5,0.464,-6031.298828125,881.9114379882812,1004.4119262695312
|
||||||
|
0.5,0.514,-6031.298828125,881.9114379882812,1004.4119262695312
|
||||||
|
0.5,0.564,-6074.58447265625,881.911376953125,1004.411865234375
|
||||||
|
0.5,0.614,-6098.1884765625,881.911376953125,1004.4118041992188
|
||||||
|
0.5,0.665,-6106.05615234375,881.911376953125,1004.4117431640625
|
||||||
|
0.5,0.715,-6137.52783203125,881.911376953125,1004.4116821289062
|
||||||
|
0.5,0.765,-6145.3720703125,881.911376953125,1004.4116821289062
|
||||||
|
0.5,0.815,-6145.3720703125,881.911376953125,1004.4116821289062
|
||||||
|
0.5,0.865,-6145.3720703125,881.911376953125,1004.4116821289062
|
||||||
|
0.5,0.915,-6180.8134765625,881.9113159179688,1004.41162109375
|
||||||
|
0.5,0.965,-6184.73583984375,881.9113159179688,1004.41162109375
|
||||||
|
0.5,1.017,-6216.20751953125,881.9113159179688,1004.4115600585938
|
||||||
|
0.5,1.067,-6216.20751953125,881.9113159179688,1004.4115600585938
|
||||||
|
0.5,1.117,-6255.546875,881.9113159179688,1004.4114990234375
|
||||||
|
0.5,1.168,-6263.3916015625,881.9113159179688,1004.4114379882812
|
||||||
|
0.5,1.22,-6263.3916015625,881.9113159179688,1004.4114379882812
|
||||||
|
0.5,1.27,-6263.3916015625,881.9113159179688,1004.4114379882812
|
||||||
|
0.5,1.32,-6298.80908203125,881.9112548828125,1004.411376953125
|
||||||
|
0.5,1.37,-6306.6767578125,881.9112548828125,1004.411376953125
|
||||||
|
0.5,1.42,-6338.1484375,881.9112548828125,1004.4113159179688
|
||||||
|
0.5,1.471,-6346.0166015625,881.9112548828125,1004.4112548828125
|
||||||
|
0.5,1.521,-6361.72900390625,881.9112548828125,1004.4112548828125
|
||||||
|
0.5,1.571,-6361.72900390625,881.9112548828125,1004.4112548828125
|
||||||
|
0.5,1.621,-6361.72900390625,881.9112548828125,1004.4112548828125
|
||||||
|
0.5,1.672,-6361.72900390625,881.9112548828125,1004.4112548828125
|
||||||
|
0.5,1.722,-6397.146484375,881.9112548828125,1004.4111938476562
|
||||||
|
0.5,1.772,-6412.88232421875,881.9111938476562,1004.4111328125
|
||||||
|
0.5,1.822,-6440.43212890625,881.9111938476562,1004.4110717773438
|
||||||
|
0.5,1.872,-6460.11376953125,881.9111938476562,1004.4110717773438
|
||||||
|
0.5,1.922,-6471.90380859375,881.9111938476562,1004.4110107421875
|
||||||
|
0.5,1.973,-6471.90380859375,881.9111938476562,1004.4110107421875
|
||||||
|
0.5,2.023,-6471.90380859375,881.9111938476562,1004.4110107421875
|
||||||
|
0.5,2.073,-6471.90380859375,881.9111938476562,1004.4110107421875
|
||||||
|
0.5,2.123,-6519.134765625,881.9111328125,1004.4109497070312
|
||||||
|
0.5,2.173,-6542.73876953125,881.9111328125,1004.410888671875
|
||||||
|
0.5,2.223,-6566.3427734375,881.9111328125,1004.4108276367188
|
||||||
|
0.5,2.273,-6574.21044921875,881.9111328125,1004.4108276367188
|
||||||
|
0.5,2.323,-6578.1328125,881.9111328125,1004.4108276367188
|
||||||
|
0.5,2.373,-6578.1328125,881.9111328125,1004.4108276367188
|
||||||
|
0.5,2.423,-6578.1328125,881.9111328125,1004.4108276367188
|
||||||
|
0.5,2.474,-6621.41796875,881.9111328125,1004.4107055664062
|
||||||
|
0.5,2.524,-6641.099609375,881.9110717773438,1004.4107055664062
|
||||||
|
0.5,2.574,-6648.9677734375,881.9110717773438,1004.41064453125
|
||||||
|
0.5,2.624,-6684.38525390625,881.9110717773438,1004.4105834960938
|
||||||
|
0.5,2.674,-6688.3076171875,881.9110717773438,1004.4105834960938
|
||||||
|
0.5,2.725,-6688.3076171875,881.9110717773438,1004.4105834960938
|
||||||
|
0.5,2.775,-6688.3076171875,881.9110717773438,1004.4105834960938
|
||||||
|
0.5,2.825,-6727.6708984375,881.9110717773438,1004.4105224609375
|
||||||
|
0.5,2.875,-6739.4609375,881.9110717773438,1004.4104614257812
|
||||||
|
0.5,2.964,-6770.9326171875,881.9110107421875,1004.410400390625
|
||||||
|
0.5,3.014,-6790.5908203125,881.9110107421875,1004.410400390625
|
||||||
|
0.5,3.066,-6794.5126953125,881.9110107421875,1004.410400390625
|
||||||
|
0.5,3.117,-6794.5126953125,881.9110107421875,1004.410400390625
|
||||||
|
0.5,3.167,-6794.5126953125,881.9110107421875,1004.410400390625
|
||||||
|
0.5,3.217,-6829.93017578125,881.9110107421875,1004.4102783203125
|
||||||
|
0.5,3.269,-6837.79833984375,881.9110107421875,1004.4102783203125
|
||||||
|
0.5,3.321,-6873.2158203125,881.9109497070312,1004.4102172851562
|
||||||
|
0.5,3.371,-6881.083984375,881.9109497070312,1004.4102172851562
|
||||||
|
0.5,3.421,-6896.7958984375,881.9109497070312,1004.41015625
|
||||||
|
0.5,3.472,-6896.7958984375,881.9109497070312,1004.41015625
|
||||||
|
0.5,3.522,-6896.7958984375,881.9109497070312,1004.41015625
|
||||||
|
0.5,3.572,-6896.7958984375,881.9109497070312,1004.41015625
|
||||||
|
0.5,3.625,-6936.1591796875,881.9109497070312,1004.4100952148438
|
||||||
|
0.5,3.675,-6963.708984375,881.9109497070312,1004.4100341796875
|
||||||
|
0.5,3.725,-6987.31298828125,881.910888671875,1004.4099731445312
|
||||||
|
0.5,3.775,-7006.99462890625,881.910888671875,1004.4099731445312
|
||||||
|
0.5,3.825,-7014.8623046875,881.910888671875,1004.409912109375
|
||||||
|
0.5,3.876,-7014.8623046875,881.910888671875,1004.409912109375
|
||||||
|
0.5,3.926,-7014.8623046875,881.910888671875,1004.409912109375
|
||||||
|
0.5,3.976,-7054.2255859375,881.910888671875,1004.4098510742188
|
||||||
|
0.75,0.0,-7539.572265625,881.91064453125,1004.4088745117188
|
||||||
|
0.75,0.05,-7539.572265625,881.91064453125,1004.4088745117188
|
||||||
|
0.75,0.1,-7539.572265625,881.91064453125,1004.4088745117188
|
||||||
|
0.75,0.15,-7539.572265625,881.91064453125,1004.4088745117188
|
||||||
|
0.75,0.2,-7573.47705078125,881.9105834960938,1004.4088134765625
|
||||||
|
0.75,0.26,-7584.77294921875,881.9105834960938,1004.4087524414062
|
||||||
|
0.75,0.311,-7607.36474609375,881.9105834960938,1004.4087524414062
|
||||||
|
0.75,0.361,-7613.0126953125,881.9105834960938,1004.40869140625
|
||||||
|
0.75,0.413,-7621.47607421875,881.9105834960938,1004.40869140625
|
||||||
|
0.75,0.463,-7621.47607421875,881.9105834960938,1004.40869140625
|
||||||
|
0.75,0.513,-7621.47607421875,881.9105834960938,1004.40869140625
|
||||||
|
0.75,0.563,-7646.900390625,881.9105834960938,1004.4086303710938
|
||||||
|
0.75,0.614,-7669.4921875,881.9105224609375,1004.4086303710938
|
||||||
|
0.75,0.664,-7675.14013671875,881.9105224609375,1004.4085693359375
|
||||||
|
0.75,0.714,-7692.083984375,881.9105224609375,1004.4085693359375
|
||||||
|
0.75,0.764,-7700.54736328125,881.9105224609375,1004.4085693359375
|
||||||
|
0.75,0.814,-7700.54736328125,881.9105224609375,1004.4085693359375
|
||||||
|
0.75,0.864,-7700.54736328125,881.9105224609375,1004.4085693359375
|
||||||
|
0.75,0.914,-7700.54736328125,881.9105224609375,1004.4085693359375
|
||||||
|
0.75,0.966,-7737.26708984375,881.9105224609375,1004.408447265625
|
||||||
|
0.75,1.017,-7754.2109375,881.9105224609375,1004.408447265625
|
||||||
|
0.75,1.067,-7759.85888671875,881.9105224609375,1004.408447265625
|
||||||
|
0.75,1.117,-7785.283203125,881.9104614257812,1004.4083862304688
|
||||||
|
0.75,1.17,-7788.0986328125,881.9104614257812,1004.4083862304688
|
||||||
|
0.75,1.22,-7788.0986328125,881.9104614257812,1004.4083862304688
|
||||||
|
0.75,1.272,-7788.0986328125,881.9104614257812,1004.4083862304688
|
||||||
|
0.75,1.322,-7819.1708984375,881.9104614257812,1004.4083251953125
|
||||||
|
0.75,1.372,-7824.81884765625,881.9104614257812,1004.4082641601562
|
||||||
|
0.75,1.422,-7847.41064453125,881.9104614257812,1004.4082641601562
|
||||||
|
0.75,1.472,-7853.05859375,881.9104614257812,1004.408203125
|
||||||
|
0.75,1.522,-7864.33740234375,881.9104614257812,1004.408203125
|
||||||
|
0.75,1.573,-7864.33740234375,881.9104614257812,1004.408203125
|
||||||
|
0.75,1.624,-7864.33740234375,881.9104614257812,1004.408203125
|
||||||
|
0.75,1.674,-7864.33740234375,881.9104614257812,1004.408203125
|
||||||
|
0.75,1.726,-7898.2421875,881.910400390625,1004.4081420898438
|
||||||
|
0.75,1.776,-7915.18603515625,881.910400390625,1004.4080810546875
|
||||||
|
0.75,1.827,-7932.1298828125,881.910400390625,1004.4080810546875
|
||||||
|
0.75,1.877,-7943.42578125,881.910400390625,1004.4080200195312
|
||||||
|
0.75,1.928,-7951.88916015625,881.910400390625,1004.4080200195312
|
||||||
|
0.75,1.978,-7951.88916015625,881.910400390625,1004.4080200195312
|
||||||
|
0.75,2.028,-7951.88916015625,881.910400390625,1004.4080200195312
|
||||||
|
0.75,2.078,-7980.1455078125,881.910400390625,1004.407958984375
|
||||||
|
0.75,2.129,-7988.60888671875,881.910400390625,1004.407958984375
|
||||||
|
0.75,2.179,-8005.552734375,881.9103393554688,1004.4078979492188
|
||||||
|
0.75,2.229,-8022.49658203125,881.9103393554688,1004.4078979492188
|
||||||
|
0.75,2.279,-8028.14453125,881.9103393554688,1004.4078979492188
|
||||||
|
0.75,2.329,-8036.625,881.9103393554688,1004.4078369140625
|
||||||
|
0.75,2.379,-8036.625,881.9103393554688,1004.4078369140625
|
||||||
|
0.75,2.429,-8036.625,881.9103393554688,1004.4078369140625
|
||||||
|
0.75,2.482,-8067.697265625,881.9103393554688,1004.4077758789062
|
||||||
|
0.75,2.56,-8081.82568359375,881.9103393554688,1004.4077758789062
|
||||||
|
0.75,2.61,-8098.76953125,881.9103393554688,1004.40771484375
|
||||||
|
0.75,2.66,-8107.23291015625,881.9103393554688,1004.40771484375
|
||||||
|
0.75,2.71,-8107.23291015625,881.9103393554688,1004.40771484375
|
||||||
|
0.75,2.761,-8107.23291015625,881.9103393554688,1004.40771484375
|
||||||
|
0.75,2.811,-8107.23291015625,881.9103393554688,1004.40771484375
|
||||||
|
0.75,2.861,-8132.6572265625,881.9102783203125,1004.4076538085938
|
||||||
|
0.75,2.911,-8149.6005859375,881.9102783203125,1004.4076538085938
|
||||||
|
0.75,2.961,-8155.24853515625,881.9102783203125,1004.4075927734375
|
||||||
|
0.75,3.011,-8180.6728515625,881.9102783203125,1004.4075927734375
|
||||||
|
0.75,3.062,-8183.48828125,881.9102783203125,1004.4075317382812
|
||||||
|
0.75,3.112,-8183.48828125,881.9102783203125,1004.4075317382812
|
||||||
|
0.75,3.162,-8183.48828125,881.9102783203125,1004.4075317382812
|
||||||
|
0.75,3.212,-8214.560546875,881.9102783203125,1004.407470703125
|
||||||
|
0.75,3.262,-8220.208984375,881.9102783203125,1004.407470703125
|
||||||
|
0.75,3.313,-8242.80078125,881.9102172851562,1004.407470703125
|
||||||
|
0.75,3.363,-8248.4482421875,881.9102172851562,1004.4074096679688
|
||||||
|
0.75,3.413,-8268.2080078125,881.9102172851562,1004.4074096679688
|
||||||
|
0.75,3.464,-8268.2080078125,881.9102172851562,1004.4074096679688
|
||||||
|
0.75,3.514,-8268.2080078125,881.9102172851562,1004.4074096679688
|
||||||
|
0.75,3.564,-8268.2080078125,881.9102172851562,1004.4074096679688
|
||||||
|
0.75,3.615,-8299.279296875,881.9102172851562,1004.4073486328125
|
||||||
|
0.75,3.665,-8310.5751953125,881.9102172851562,1004.4072875976562
|
||||||
|
0.75,3.716,-8330.3515625,881.9102172851562,1004.4072875976562
|
||||||
|
0.75,3.766,-8336.0,881.9102172851562,1004.4072265625
|
||||||
|
0.75,3.818,-8344.462890625,881.91015625,1004.4072265625
|
||||||
|
0.75,3.87,-8344.462890625,881.91015625,1004.4072265625
|
||||||
|
0.75,3.92,-8344.462890625,881.91015625,1004.4072265625
|
||||||
|
0.75,3.97,-8369.8876953125,881.91015625,1004.4071655273438
|
||||||
|
1.0,0.0,-8673.5283203125,881.9100341796875,1004.4065551757812
|
||||||
|
1.0,0.05,-8673.5283203125,881.9100341796875,1004.4065551757812
|
||||||
|
1.0,0.1,-8673.5283203125,881.9100341796875,1004.4065551757812
|
||||||
|
1.0,0.15,-8687.119140625,881.9099731445312,1004.4065551757812
|
||||||
|
1.0,0.201,-8695.6025390625,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.259,-8702.392578125,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.309,-8715.974609375,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.359,-8719.369140625,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.412,-8722.7646484375,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.464,-8722.7646484375,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.514,-8722.7646484375,881.9099731445312,1004.406494140625
|
||||||
|
1.0,0.564,-8738.048828125,881.9099731445312,1004.4064331054688
|
||||||
|
1.0,0.614,-8753.3330078125,881.9099731445312,1004.4064331054688
|
||||||
|
1.0,0.664,-8756.7275390625,881.9099731445312,1004.4063720703125
|
||||||
|
1.0,0.714,-8766.9140625,881.9099731445312,1004.4063720703125
|
||||||
|
1.0,0.767,-8770.298828125,881.9099731445312,1004.4063720703125
|
||||||
|
1.0,0.817,-8770.298828125,881.9099731445312,1004.4063720703125
|
||||||
|
1.0,0.867,-8770.298828125,881.9099731445312,1004.4063720703125
|
||||||
|
1.0,0.917,-8787.28515625,881.9099731445312,1004.4063110351562
|
||||||
|
1.0,0.967,-8792.373046875,881.9099731445312,1004.4063110351562
|
||||||
|
1.0,1.018,-8802.5595703125,881.909912109375,1004.4063110351562
|
||||||
|
1.0,1.068,-8805.955078125,881.909912109375,1004.4063110351562
|
||||||
|
1.0,1.118,-8816.1298828125,881.909912109375,1004.40625
|
||||||
|
1.0,1.169,-8816.1298828125,881.909912109375,1004.40625
|
||||||
|
1.0,1.219,-8816.1298828125,881.909912109375,1004.40625
|
||||||
|
1.0,1.269,-8816.1298828125,881.909912109375,1004.40625
|
||||||
|
1.0,1.321,-8836.5126953125,881.909912109375,1004.40625
|
||||||
|
1.0,1.371,-8846.6982421875,881.909912109375,1004.4061889648438
|
||||||
|
1.0,1.421,-8856.8837890625,881.909912109375,1004.4061889648438
|
||||||
|
1.0,1.471,-8865.376953125,881.909912109375,1004.4061889648438
|
||||||
|
1.0,1.522,-8867.0703125,881.909912109375,1004.4061889648438
|
||||||
|
1.0,1.572,-8867.0703125,881.909912109375,1004.4061889648438
|
||||||
|
1.0,1.622,-8867.0703125,881.909912109375,1004.4061889648438
|
||||||
|
1.0,1.672,-8885.7490234375,881.909912109375,1004.4061279296875
|
||||||
|
1.0,1.722,-8895.9345703125,881.909912109375,1004.4061279296875
|
||||||
|
1.0,1.772,-8899.330078125,881.909912109375,1004.4061279296875
|
||||||
|
1.0,1.823,-8907.8134765625,881.9098510742188,1004.4060668945312
|
||||||
|
1.0,1.873,-8909.505859375,881.9098510742188,1004.4060668945312
|
||||||
|
1.0,1.923,-8909.505859375,881.9098510742188,1004.4060668945312
|
||||||
|
1.0,1.974,-8909.505859375,881.9098510742188,1004.4060668945312
|
||||||
|
1.0,2.024,-8926.4921875,881.9098510742188,1004.4060668945312
|
||||||
|
1.0,2.074,-8929.8876953125,881.9098510742188,1004.4060668945312
|
||||||
|
1.0,2.159,-8945.171875,881.9098510742188,1004.406005859375
|
||||||
|
1.0,2.209,-8958.7529296875,881.9098510742188,1004.406005859375
|
||||||
|
1.0,2.26,-8960.4453125,881.9098510742188,1004.406005859375
|
||||||
|
1.0,2.311,-8960.4453125,881.9098510742188,1004.406005859375
|
||||||
|
1.0,2.361,-8960.4453125,881.9098510742188,1004.406005859375
|
||||||
|
1.0,2.412,-8977.4326171875,881.9098510742188,1004.4059448242188
|
||||||
|
1.0,2.462,-8980.8271484375,881.9098510742188,1004.4059448242188
|
||||||
|
1.0,2.512,-8996.111328125,881.9098510742188,1004.4058837890625
|
||||||
|
1.0,2.562,-8999.5068359375,881.9098510742188,1004.4058837890625
|
||||||
|
1.0,2.614,-9006.296875,881.9098510742188,1004.4058837890625
|
||||||
|
1.0,2.664,-9006.296875,881.9098510742188,1004.4058837890625
|
||||||
|
1.0,2.714,-9006.296875,881.9098510742188,1004.4058837890625
|
||||||
|
1.0,2.764,-9024.9765625,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,2.814,-9035.162109375,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,2.865,-9035.162109375,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,2.915,-9045.3486328125,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,2.966,-9050.4365234375,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,3.016,-9050.4365234375,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,3.066,-9050.4365234375,881.9097900390625,1004.4058227539062
|
||||||
|
1.0,3.116,-9064.02734375,881.9097900390625,1004.40576171875
|
||||||
|
1.0,3.167,-9069.115234375,881.9097900390625,1004.40576171875
|
||||||
|
1.0,3.217,-9082.6962890625,881.9097900390625,1004.40576171875
|
||||||
|
1.0,3.267,-9082.6962890625,881.9097900390625,1004.40576171875
|
||||||
|
1.0,3.317,-9091.1796875,881.9097900390625,1004.4057006835938
|
||||||
|
1.0,3.367,-9092.8720703125,881.9097900390625,1004.4057006835938
|
||||||
|
1.0,3.418,-9092.8720703125,881.9097900390625,1004.4057006835938
|
||||||
|
1.0,3.468,-9092.8720703125,881.9097900390625,1004.4057006835938
|
||||||
|
1.0,3.518,-9111.5517578125,881.9097900390625,1004.4057006835938
|
||||||
|
1.0,3.568,-9118.341796875,881.9097900390625,1004.4056396484375
|
||||||
|
1.0,3.618,-9128.5283203125,881.9097900390625,1004.4056396484375
|
||||||
|
1.0,3.669,-9135.318359375,881.9097290039062,1004.4056396484375
|
||||||
|
1.0,3.719,-9143.8017578125,881.9097290039062,1004.4056396484375
|
||||||
|
1.0,3.769,-9143.8017578125,881.9097290039062,1004.4056396484375
|
||||||
|
1.0,3.819,-9143.8017578125,881.9097290039062,1004.4056396484375
|
||||||
|
1.0,3.87,-9143.8017578125,881.9097290039062,1004.4056396484375
|
||||||
|
1.0,3.92,-9162.48046875,881.9097290039062,1004.4055786132812
|
||||||
|
1.0,3.97,-9172.6669921875,881.9097290039062,1004.4055786132812
|
||||||
|
491
docs/re/captures/throttle-curve-rt.csv
Normal file
491
docs/re/captures/throttle-curve-rt.csv
Normal file
@@ -0,0 +1,491 @@
|
|||||||
|
rt,t,x,y,z
|
||||||
|
0.0,0.0,-7005.12646484375,881.910888671875,1004.4099731445312
|
||||||
|
0.0,0.05,-7057.591796875,881.910888671875,1004.4098510742188
|
||||||
|
0.0,0.1,-7075.056640625,881.910888671875,1004.4098510742188
|
||||||
|
0.0,0.173,-7110.021484375,881.9108276367188,1004.4097290039062
|
||||||
|
0.0,0.223,-7144.98681640625,881.9108276367188,1004.40966796875
|
||||||
|
0.0,0.274,-7156.6064453125,881.9108276367188,1004.40966796875
|
||||||
|
0.0,0.324,-7156.6064453125,881.9108276367188,1004.40966796875
|
||||||
|
0.0,0.374,-7156.6064453125,881.9108276367188,1004.40966796875
|
||||||
|
0.0,0.424,-7214.91650390625,881.9107666015625,1004.4095458984375
|
||||||
|
0.0,0.476,-7232.3818359375,881.9107666015625,1004.4094848632812
|
||||||
|
0.0,0.526,-7267.3466796875,881.9107666015625,1004.409423828125
|
||||||
|
0.0,0.577,-7279.00146484375,881.9107666015625,1004.409423828125
|
||||||
|
0.0,0.627,-7308.12158203125,881.9107666015625,1004.4093627929688
|
||||||
|
0.0,0.677,-7313.931640625,881.9107055664062,1004.4093627929688
|
||||||
|
0.0,0.727,-7313.931640625,881.9107055664062,1004.4093627929688
|
||||||
|
0.0,0.777,-7313.931640625,881.9107055664062,1004.4093627929688
|
||||||
|
0.0,0.827,-7378.0517578125,881.9107055664062,1004.4091796875
|
||||||
|
0.0,0.877,-7401.36181640625,881.9107055664062,1004.4091796875
|
||||||
|
0.0,0.927,-7447.9814453125,881.91064453125,1004.4090576171875
|
||||||
|
0.0,0.977,-7459.63671875,881.91064453125,1004.4090576171875
|
||||||
|
0.0,1.027,-7494.6015625,881.91064453125,1004.4089965820312
|
||||||
|
0.0,1.077,-7494.6015625,881.91064453125,1004.4089965820312
|
||||||
|
0.0,1.128,-7494.6015625,881.91064453125,1004.4089965820312
|
||||||
|
0.0,1.178,-7494.6015625,881.91064453125,1004.4089965820312
|
||||||
|
0.0,1.229,-7570.37646484375,881.9105834960938,1004.4088134765625
|
||||||
|
0.0,1.279,-7605.341796875,881.9105834960938,1004.4087524414062
|
||||||
|
0.0,1.329,-7628.65185546875,881.9105834960938,1004.40869140625
|
||||||
|
0.0,1.379,-7640.306640625,881.9105834960938,1004.40869140625
|
||||||
|
0.0,1.429,-7651.96142578125,881.9105834960938,1004.4086303710938
|
||||||
|
0.0,1.479,-7651.96142578125,881.9105834960938,1004.4086303710938
|
||||||
|
0.0,1.529,-7651.96142578125,881.9105834960938,1004.4086303710938
|
||||||
|
0.0,1.583,-7698.58154296875,881.9105224609375,1004.4085693359375
|
||||||
|
0.0,1.639,-7751.04638671875,881.9105224609375,1004.408447265625
|
||||||
|
0.0,1.689,-7780.20166015625,881.9104614257812,1004.4083862304688
|
||||||
|
0.0,1.739,-7809.32177734375,881.9104614257812,1004.4083251953125
|
||||||
|
0.0,1.789,-7809.32177734375,881.9104614257812,1004.4083251953125
|
||||||
|
0.0,1.839,-7809.32177734375,881.9104614257812,1004.4083251953125
|
||||||
|
0.0,1.892,-7809.32177734375,881.9104614257812,1004.4083251953125
|
||||||
|
0.0,1.942,-7873.44140625,881.9104614257812,1004.408203125
|
||||||
|
0.0,1.992,-7890.94140625,881.910400390625,1004.4081420898438
|
||||||
|
0.0,2.073,-7925.90673828125,881.910400390625,1004.4080810546875
|
||||||
|
0.0,2.123,-7949.181640625,881.910400390625,1004.4080810546875
|
||||||
|
0.0,2.173,-7949.181640625,881.910400390625,1004.4080810546875
|
||||||
|
0.0,2.223,-7949.181640625,881.910400390625,1004.4080810546875
|
||||||
|
0.0,2.273,-7949.181640625,881.910400390625,1004.4080810546875
|
||||||
|
0.0,2.325,-8024.95654296875,881.9103393554688,1004.4078979492188
|
||||||
|
0.0,2.376,-8059.92138671875,881.9103393554688,1004.4078369140625
|
||||||
|
0.0,2.426,-8094.88671875,881.9103393554688,1004.4077758789062
|
||||||
|
0.0,2.476,-8106.54150390625,881.9103393554688,1004.40771484375
|
||||||
|
0.0,2.526,-8124.00634765625,881.9102783203125,1004.40771484375
|
||||||
|
0.0,2.576,-8124.00634765625,881.9102783203125,1004.40771484375
|
||||||
|
0.0,2.626,-8124.00634765625,881.9102783203125,1004.40771484375
|
||||||
|
0.0,2.676,-8164.81640625,881.9102783203125,1004.4075927734375
|
||||||
|
0.0,2.727,-8199.78125,881.9102783203125,1004.4075317382812
|
||||||
|
0.0,2.777,-8211.4365234375,881.9102783203125,1004.4075317382812
|
||||||
|
0.0,2.827,-8246.4013671875,881.9102172851562,1004.407470703125
|
||||||
|
0.0,2.877,-8263.8662109375,881.9102172851562,1004.4074096679688
|
||||||
|
0.0,2.927,-8263.8662109375,881.9102172851562,1004.4074096679688
|
||||||
|
0.0,2.978,-8263.8662109375,881.9102172851562,1004.4074096679688
|
||||||
|
0.0,3.028,-8263.8662109375,881.9102172851562,1004.4074096679688
|
||||||
|
0.0,3.078,-8333.8310546875,881.9102172851562,1004.4072875976562
|
||||||
|
0.0,3.131,-8368.796875,881.91015625,1004.4072265625
|
||||||
|
0.0,3.181,-8380.451171875,881.91015625,1004.4071655273438
|
||||||
|
0.0,3.231,-8427.0712890625,881.91015625,1004.4071044921875
|
||||||
|
0.0,3.281,-8432.8818359375,881.91015625,1004.4070434570312
|
||||||
|
0.0,3.334,-8432.8818359375,881.91015625,1004.4070434570312
|
||||||
|
0.0,3.385,-8432.8818359375,881.91015625,1004.4070434570312
|
||||||
|
0.0,3.435,-8485.3818359375,881.9100952148438,1004.406982421875
|
||||||
|
0.0,3.485,-8502.8466796875,881.9100952148438,1004.4069213867188
|
||||||
|
0.0,3.535,-8549.466796875,881.9100952148438,1004.4067993164062
|
||||||
|
0.0,3.585,-8572.7763671875,881.9100341796875,1004.4067993164062
|
||||||
|
0.0,3.635,-8601.896484375,881.9100341796875,1004.40673828125
|
||||||
|
0.0,3.686,-8601.896484375,881.9100341796875,1004.40673828125
|
||||||
|
0.0,3.736,-8601.896484375,881.9100341796875,1004.40673828125
|
||||||
|
0.0,3.788,-8601.896484375,881.9100341796875,1004.40673828125
|
||||||
|
0.0,3.838,-8677.671875,881.9100341796875,1004.4065551757812
|
||||||
|
0.0,3.888,-8689.326171875,881.9099731445312,1004.4065551757812
|
||||||
|
0.0,3.938,-8735.9462890625,881.9099731445312,1004.4064331054688
|
||||||
|
0.0,3.988,-8747.6015625,881.9099731445312,1004.4064331054688
|
||||||
|
0.0,4.038,-8765.06640625,881.9099731445312,1004.4063720703125
|
||||||
|
0.0,4.089,-8765.06640625,881.9099731445312,1004.4063720703125
|
||||||
|
0.0,4.139,-8765.06640625,881.9099731445312,1004.4063720703125
|
||||||
|
0.0,4.189,-8817.56640625,881.909912109375,1004.4063110351562
|
||||||
|
0.0,4.24,-8846.6865234375,881.909912109375,1004.40625
|
||||||
|
0.0,4.29,-8875.841796875,881.909912109375,1004.4061889648438
|
||||||
|
0.0,4.34,-8910.806640625,881.9098510742188,1004.4060668945312
|
||||||
|
0.0,4.39,-8922.4619140625,881.9098510742188,1004.4060668945312
|
||||||
|
0.0,4.441,-8934.1162109375,881.9098510742188,1004.4060668945312
|
||||||
|
0.0,4.491,-8934.1162109375,881.9098510742188,1004.4060668945312
|
||||||
|
0.0,4.541,-8980.771484375,881.9098510742188,1004.4059448242188
|
||||||
|
0.0,4.591,-8998.236328125,881.9098510742188,1004.4059448242188
|
||||||
|
0.0,4.641,-9033.201171875,881.9097900390625,1004.4058227539062
|
||||||
|
0.0,4.691,-9044.8564453125,881.9097900390625,1004.4058227539062
|
||||||
|
0.0,4.741,-9073.9765625,881.9097900390625,1004.40576171875
|
||||||
|
0.0,4.793,-9079.7861328125,881.9097900390625,1004.40576171875
|
||||||
|
0.0,4.844,-9079.7861328125,881.9097900390625,1004.40576171875
|
||||||
|
0.0,4.894,-9079.7861328125,881.9097900390625,1004.40576171875
|
||||||
|
0.0,4.944,-9155.5615234375,881.9097290039062,1004.4055786132812
|
||||||
|
0.0,4.994,-9167.216796875,881.9097290039062,1004.4055786132812
|
||||||
|
0.25,0.0,-10721.111328125,881.908935546875,1004.4024047851562
|
||||||
|
0.25,0.056,-10788.650390625,881.9088745117188,1004.4022827148438
|
||||||
|
0.25,0.106,-10830.8046875,881.9088745117188,1004.4022216796875
|
||||||
|
0.25,0.156,-10847.6767578125,881.9088134765625,1004.4021606445312
|
||||||
|
0.25,0.206,-10898.29296875,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,0.258,-10923.5751953125,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,0.308,-10923.5751953125,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,0.358,-10923.5751953125,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,0.408,-10923.5751953125,881.9088134765625,1004.4020385742188
|
||||||
|
0.25,0.461,-11016.396484375,881.9087524414062,1004.4017944335938
|
||||||
|
0.25,0.511,-11075.4736328125,881.90869140625,1004.4017333984375
|
||||||
|
0.25,0.561,-11092.345703125,881.90869140625,1004.4016723632812
|
||||||
|
0.25,0.611,-11142.9619140625,881.90869140625,1004.4015502929688
|
||||||
|
0.25,0.663,-11159.783203125,881.90869140625,1004.4015502929688
|
||||||
|
0.25,0.713,-11159.783203125,881.90869140625,1004.4015502929688
|
||||||
|
0.25,0.763,-11159.783203125,881.90869140625,1004.4015502929688
|
||||||
|
0.25,0.813,-11261.06640625,881.9086303710938,1004.4013061523438
|
||||||
|
0.25,0.864,-11277.9384765625,881.9086303710938,1004.4013061523438
|
||||||
|
0.25,0.914,-11345.42578125,881.9085693359375,1004.4011840820312
|
||||||
|
0.25,0.964,-11345.42578125,881.9085693359375,1004.4011840820312
|
||||||
|
0.25,1.014,-11429.7861328125,881.9085083007812,1004.4010009765625
|
||||||
|
0.25,1.065,-11438.1962890625,881.9085083007812,1004.4009399414062
|
||||||
|
0.25,1.115,-11438.1962890625,881.9085083007812,1004.4009399414062
|
||||||
|
0.25,1.165,-11438.1962890625,881.9085083007812,1004.4009399414062
|
||||||
|
0.25,1.216,-11514.146484375,881.9085083007812,1004.4008178710938
|
||||||
|
0.25,1.266,-11547.8896484375,881.908447265625,1004.4007568359375
|
||||||
|
0.25,1.318,-11615.3779296875,881.908447265625,1004.400634765625
|
||||||
|
0.25,1.368,-11632.25,881.908447265625,1004.4005737304688
|
||||||
|
0.25,1.418,-11691.2763671875,881.9083862304688,1004.4004516601562
|
||||||
|
0.25,1.469,-11691.2763671875,881.9083862304688,1004.4004516601562
|
||||||
|
0.25,1.519,-11691.2763671875,881.9083862304688,1004.4004516601562
|
||||||
|
0.25,1.57,-11691.2763671875,881.9083862304688,1004.4004516601562
|
||||||
|
0.25,1.62,-11800.9697265625,881.9083251953125,1004.4002075195312
|
||||||
|
0.25,1.67,-11817.841796875,881.9083251953125,1004.4002075195312
|
||||||
|
0.25,1.72,-11876.9189453125,881.9082641601562,1004.4000854492188
|
||||||
|
0.25,1.77,-11927.53515625,881.9082641601562,1004.3999633789062
|
||||||
|
0.25,1.82,-11961.279296875,881.9082641601562,1004.39990234375
|
||||||
|
0.25,1.87,-11961.279296875,881.9082641601562,1004.39990234375
|
||||||
|
0.25,1.924,-11961.279296875,881.9082641601562,1004.39990234375
|
||||||
|
0.25,1.974,-11961.279296875,881.9082641601562,1004.39990234375
|
||||||
|
0.25,2.025,-12070.97265625,881.908203125,1004.399658203125
|
||||||
|
0.25,2.075,-12113.177734375,881.9081420898438,1004.3995971679688
|
||||||
|
0.25,2.125,-12163.7939453125,881.9081420898438,1004.3994750976562
|
||||||
|
0.25,2.175,-12205.9990234375,881.9080810546875,1004.3994140625
|
||||||
|
0.25,2.226,-12222.8203125,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,2.276,-12222.8203125,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,2.356,-12222.8203125,881.9080810546875,1004.3993530273438
|
||||||
|
0.25,2.408,-12307.2314453125,881.9080810546875,1004.3992309570312
|
||||||
|
0.25,2.458,-12340.9755859375,881.9080200195312,1004.3991088867188
|
||||||
|
0.25,2.508,-12416.9248046875,881.9080200195312,1004.3989868164062
|
||||||
|
0.25,2.558,-12433.796875,881.907958984375,1004.39892578125
|
||||||
|
0.25,2.608,-12476.001953125,881.907958984375,1004.3988647460938
|
||||||
|
0.25,2.658,-12476.001953125,881.907958984375,1004.3988647460938
|
||||||
|
0.25,2.708,-12476.001953125,881.907958984375,1004.3988647460938
|
||||||
|
0.25,2.758,-12476.001953125,881.907958984375,1004.3988647460938
|
||||||
|
0.25,2.809,-12577.2841796875,881.9078979492188,1004.398681640625
|
||||||
|
0.25,2.859,-12611.0283203125,881.9078979492188,1004.3985595703125
|
||||||
|
0.25,2.909,-12686.9775390625,881.9078369140625,1004.3984375
|
||||||
|
0.25,2.959,-12703.849609375,881.9078369140625,1004.3983764648438
|
||||||
|
0.25,3.01,-12737.59375,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,3.06,-12737.59375,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,3.113,-12737.59375,881.9078369140625,1004.3983154296875
|
||||||
|
0.25,3.163,-12822.0048828125,881.9077758789062,1004.3981323242188
|
||||||
|
0.25,3.216,-12864.1591796875,881.9077758789062,1004.3980712890625
|
||||||
|
0.25,3.268,-12914.775390625,881.90771484375,1004.39794921875
|
||||||
|
0.25,3.318,-12965.3916015625,881.90771484375,1004.3978881835938
|
||||||
|
0.25,3.368,-12982.2626953125,881.90771484375,1004.3978271484375
|
||||||
|
0.25,3.419,-12990.673828125,881.90771484375,1004.3978271484375
|
||||||
|
0.25,3.469,-12990.673828125,881.90771484375,1004.3978271484375
|
||||||
|
0.25,3.519,-12990.673828125,881.90771484375,1004.3978271484375
|
||||||
|
0.25,3.572,-13075.0849609375,881.9076538085938,1004.3976440429688
|
||||||
|
0.25,3.622,-13125.7001953125,881.9075927734375,1004.3975219726562
|
||||||
|
0.25,3.672,-13159.4443359375,881.9075927734375,1004.3974609375
|
||||||
|
0.25,3.722,-13210.060546875,881.9075927734375,1004.3973999023438
|
||||||
|
0.25,3.772,-13226.9326171875,881.9075927734375,1004.3973388671875
|
||||||
|
0.25,3.823,-13243.8046875,881.9075317382812,1004.3972778320312
|
||||||
|
0.25,3.873,-13243.8046875,881.9075317382812,1004.3972778320312
|
||||||
|
0.25,3.923,-13243.8046875,881.9075317382812,1004.3972778320312
|
||||||
|
0.25,3.973,-13336.6259765625,881.9075317382812,1004.3970947265625
|
||||||
|
0.25,4.023,-13387.2421875,881.907470703125,1004.3970336914062
|
||||||
|
0.25,4.073,-13404.1142578125,881.907470703125,1004.39697265625
|
||||||
|
0.25,4.123,-13463.19140625,881.9074096679688,1004.3968505859375
|
||||||
|
0.25,4.173,-13505.396484375,881.9074096679688,1004.3967895507812
|
||||||
|
0.25,4.223,-13513.806640625,881.9074096679688,1004.3967895507812
|
||||||
|
0.25,4.274,-13513.806640625,881.9074096679688,1004.3967895507812
|
||||||
|
0.25,4.324,-13581.345703125,881.9073486328125,1004.3966064453125
|
||||||
|
0.25,4.374,-13606.62890625,881.9073486328125,1004.3965454101562
|
||||||
|
0.25,4.456,-13657.244140625,881.9073486328125,1004.396484375
|
||||||
|
0.25,4.506,-13707.8603515625,881.9072875976562,1004.3963623046875
|
||||||
|
0.25,4.556,-13724.732421875,881.9072875976562,1004.3963623046875
|
||||||
|
0.25,4.609,-13750.0146484375,881.9072875976562,1004.3963012695312
|
||||||
|
0.25,4.659,-13750.0146484375,881.9072875976562,1004.3963012695312
|
||||||
|
0.25,4.709,-13750.0146484375,881.9072875976562,1004.3963012695312
|
||||||
|
0.25,4.761,-13834.42578125,881.9072265625,1004.3961181640625
|
||||||
|
0.25,4.811,-13901.9140625,881.9072265625,1004.39599609375
|
||||||
|
0.25,4.861,-13901.9140625,881.9072265625,1004.39599609375
|
||||||
|
0.25,4.911,-13969.4013671875,881.9071655273438,1004.3958129882812
|
||||||
|
0.25,4.962,-13986.22265625,881.9071655273438,1004.3958129882812
|
||||||
|
0.5,0.0,-16303.880859375,881.9058837890625,1004.39111328125
|
||||||
|
0.5,0.051,-16352.869140625,881.9058837890625,1004.3909912109375
|
||||||
|
0.5,0.101,-16352.869140625,881.9058837890625,1004.3909912109375
|
||||||
|
0.5,0.151,-16352.869140625,881.9058837890625,1004.3909912109375
|
||||||
|
0.5,0.201,-16352.869140625,881.9058837890625,1004.3909912109375
|
||||||
|
0.5,0.252,-16475.59765625,881.9058227539062,1004.3907470703125
|
||||||
|
0.5,0.302,-16500.12890625,881.9058227539062,1004.3906860351562
|
||||||
|
0.5,0.376,-16586.025390625,881.90576171875,1004.3905639648438
|
||||||
|
0.5,0.426,-16696.451171875,881.9057006835938,1004.3903198242188
|
||||||
|
0.5,0.477,-16708.6796875,881.9057006835938,1004.3903198242188
|
||||||
|
0.5,0.527,-16708.6796875,881.9057006835938,1004.3903198242188
|
||||||
|
0.5,0.577,-16708.6796875,881.9057006835938,1004.3903198242188
|
||||||
|
0.5,0.627,-16831.408203125,881.9056396484375,1004.3900146484375
|
||||||
|
0.5,0.678,-16831.408203125,881.9056396484375,1004.3900146484375
|
||||||
|
0.5,0.728,-16929.53125,881.9055786132812,1004.3898315429688
|
||||||
|
0.5,0.778,-16954.0625,881.9055786132812,1004.3897705078125
|
||||||
|
0.5,0.829,-17015.353515625,881.905517578125,1004.3896484375
|
||||||
|
0.5,0.879,-17027.58203125,881.905517578125,1004.3896484375
|
||||||
|
0.5,0.929,-17027.58203125,881.905517578125,1004.3896484375
|
||||||
|
0.5,0.979,-17027.58203125,881.905517578125,1004.3896484375
|
||||||
|
0.5,1.029,-17162.5390625,881.9054565429688,1004.3893432617188
|
||||||
|
0.5,1.079,-17211.6015625,881.9054565429688,1004.3892822265625
|
||||||
|
0.5,1.13,-17297.498046875,881.9053955078125,1004.3890991210938
|
||||||
|
0.5,1.18,-17346.55859375,881.9053344726562,1004.3889770507812
|
||||||
|
0.5,1.23,-17407.849609375,881.9053344726562,1004.3888549804688
|
||||||
|
0.5,1.28,-17407.849609375,881.9053344726562,1004.3888549804688
|
||||||
|
0.5,1.331,-17407.849609375,881.9053344726562,1004.3888549804688
|
||||||
|
0.5,1.381,-17407.849609375,881.9053344726562,1004.3888549804688
|
||||||
|
0.5,1.431,-17555.109375,881.9052124023438,1004.3885498046875
|
||||||
|
0.5,1.481,-17604.171875,881.9052124023438,1004.3884887695312
|
||||||
|
0.5,1.532,-17677.763671875,881.9051513671875,1004.3883056640625
|
||||||
|
0.5,1.585,-17726.826171875,881.9051513671875,1004.3882446289062
|
||||||
|
0.5,1.635,-17763.5859375,881.9051513671875,1004.38818359375
|
||||||
|
0.5,1.685,-17763.5859375,881.9051513671875,1004.38818359375
|
||||||
|
0.5,1.735,-17763.5859375,881.9051513671875,1004.38818359375
|
||||||
|
0.5,1.785,-17763.5859375,881.9051513671875,1004.38818359375
|
||||||
|
0.5,1.835,-17910.845703125,881.905029296875,1004.3878784179688
|
||||||
|
0.5,1.885,-17959.908203125,881.905029296875,1004.3877563476562
|
||||||
|
0.5,1.936,-18058.03125,881.9049682617188,1004.3875732421875
|
||||||
|
0.5,1.986,-18082.5625,881.9049682617188,1004.3875122070312
|
||||||
|
0.5,2.037,-18107.01953125,881.9049682617188,1004.387451171875
|
||||||
|
0.5,2.087,-18107.01953125,881.9049682617188,1004.387451171875
|
||||||
|
0.5,2.138,-18107.01953125,881.9049682617188,1004.387451171875
|
||||||
|
0.5,2.188,-18107.01953125,881.9049682617188,1004.387451171875
|
||||||
|
0.5,2.238,-18278.810546875,881.9048461914062,1004.3871459960938
|
||||||
|
0.5,2.288,-18352.404296875,881.90478515625,1004.386962890625
|
||||||
|
0.5,2.339,-18425.99609375,881.90478515625,1004.3868408203125
|
||||||
|
0.5,2.389,-18450.52734375,881.90478515625,1004.3867797851562
|
||||||
|
0.5,2.441,-18475.05859375,881.9047241210938,1004.38671875
|
||||||
|
0.5,2.491,-18475.05859375,881.9047241210938,1004.38671875
|
||||||
|
0.5,2.541,-18475.05859375,881.9047241210938,1004.38671875
|
||||||
|
0.5,2.591,-18610.015625,881.9046630859375,1004.386474609375
|
||||||
|
0.5,2.641,-18683.609375,881.9046630859375,1004.3862915039062
|
||||||
|
0.5,2.691,-18732.671875,881.9046020507812,1004.38623046875
|
||||||
|
0.5,2.741,-18781.732421875,881.9046020507812,1004.3861083984375
|
||||||
|
0.5,2.791,-18806.189453125,881.904541015625,1004.3860473632812
|
||||||
|
0.5,2.842,-18806.189453125,881.904541015625,1004.3860473632812
|
||||||
|
0.5,2.892,-18806.189453125,881.904541015625,1004.3860473632812
|
||||||
|
0.5,2.942,-18928.91796875,881.9044799804688,1004.3858032226562
|
||||||
|
0.5,2.994,-18965.677734375,881.9044799804688,1004.3857421875
|
||||||
|
0.5,3.075,-19027.04296875,881.9044799804688,1004.3856201171875
|
||||||
|
0.5,3.125,-19125.166015625,881.9044189453125,1004.3854370117188
|
||||||
|
0.5,3.175,-19149.625,881.9043579101562,1004.3853759765625
|
||||||
|
0.5,3.226,-19149.625,881.9043579101562,1004.3853759765625
|
||||||
|
0.5,3.277,-19149.625,881.9043579101562,1004.3853759765625
|
||||||
|
0.5,3.327,-19149.625,881.9043579101562,1004.3853759765625
|
||||||
|
0.5,3.38,-19272.353515625,881.904296875,1004.3851318359375
|
||||||
|
0.5,3.43,-19358.248046875,881.904296875,1004.3849487304688
|
||||||
|
0.5,3.48,-19407.310546875,881.9042358398438,1004.3848266601562
|
||||||
|
0.5,3.53,-19480.90234375,881.9042358398438,1004.3847045898438
|
||||||
|
0.5,3.58,-19505.361328125,881.9041748046875,1004.3846435546875
|
||||||
|
0.5,3.63,-19505.361328125,881.9041748046875,1004.3846435546875
|
||||||
|
0.5,3.68,-19505.361328125,881.9041748046875,1004.3846435546875
|
||||||
|
0.5,3.731,-19640.390625,881.9041137695312,1004.3843994140625
|
||||||
|
0.5,3.783,-19677.150390625,881.9041137695312,1004.38427734375
|
||||||
|
0.5,3.833,-19775.275390625,881.904052734375,1004.3840942382812
|
||||||
|
0.5,3.883,-19775.275390625,881.904052734375,1004.3840942382812
|
||||||
|
0.5,3.933,-19848.8671875,881.9039916992188,1004.3839721679688
|
||||||
|
0.5,3.983,-19861.09765625,881.9039916992188,1004.3839111328125
|
||||||
|
0.5,4.033,-19861.09765625,881.9039916992188,1004.3839111328125
|
||||||
|
0.5,4.084,-19861.09765625,881.9039916992188,1004.3839111328125
|
||||||
|
0.5,4.134,-19996.0546875,881.9039306640625,1004.3836669921875
|
||||||
|
0.5,4.184,-20020.5859375,881.9039306640625,1004.3836059570312
|
||||||
|
0.5,4.242,-20118.708984375,881.9038696289062,1004.3834228515625
|
||||||
|
0.5,4.292,-20143.240234375,881.9038696289062,1004.3833618164062
|
||||||
|
0.5,4.342,-20229.0625,881.90380859375,1004.3831787109375
|
||||||
|
0.5,4.392,-20229.0625,881.90380859375,1004.3831787109375
|
||||||
|
0.5,4.442,-20229.0625,881.90380859375,1004.3831787109375
|
||||||
|
0.5,4.496,-20229.0625,881.90380859375,1004.3831787109375
|
||||||
|
0.5,4.546,-20351.791015625,881.9037475585938,1004.3829345703125
|
||||||
|
0.5,4.596,-20400.8515625,881.9036865234375,1004.3828125
|
||||||
|
0.5,4.675,-20474.4453125,881.9036865234375,1004.3826904296875
|
||||||
|
0.5,4.725,-20572.5703125,881.9036254882812,1004.3825073242188
|
||||||
|
0.5,4.778,-20584.798828125,881.9036254882812,1004.3824462890625
|
||||||
|
0.5,4.828,-20584.798828125,881.9036254882812,1004.3824462890625
|
||||||
|
0.5,4.878,-20584.798828125,881.9036254882812,1004.3824462890625
|
||||||
|
0.5,4.929,-20719.755859375,881.903564453125,1004.3822021484375
|
||||||
|
0.5,4.98,-20744.287109375,881.9035034179688,1004.3821411132812
|
||||||
|
0.75,0.0,-23732.6171875,881.9019165039062,1004.3760986328125
|
||||||
|
0.75,0.05,-23732.6171875,881.9019165039062,1004.3760986328125
|
||||||
|
0.75,0.1,-23732.6171875,881.9019165039062,1004.3760986328125
|
||||||
|
0.75,0.15,-23732.6171875,881.9019165039062,1004.3760986328125
|
||||||
|
0.75,0.201,-23957.267578125,881.9017944335938,1004.3756103515625
|
||||||
|
0.75,0.251,-24021.42578125,881.9017944335938,1004.37548828125
|
||||||
|
0.75,0.301,-24101.669921875,881.9017333984375,1004.3753051757812
|
||||||
|
0.75,0.365,-24165.828125,881.9016723632812,1004.3751831054688
|
||||||
|
0.75,0.415,-24213.8984375,881.9016723632812,1004.3751220703125
|
||||||
|
0.75,0.465,-24213.8984375,881.9016723632812,1004.3751220703125
|
||||||
|
0.75,0.516,-24213.8984375,881.9016723632812,1004.3751220703125
|
||||||
|
0.75,0.566,-24213.8984375,881.9016723632812,1004.3751220703125
|
||||||
|
0.75,0.616,-24406.46875,881.9015502929688,1004.3746948242188
|
||||||
|
0.75,0.666,-24438.548828125,881.9015502929688,1004.3746337890625
|
||||||
|
0.75,0.717,-24582.951171875,881.9014892578125,1004.3743286132812
|
||||||
|
0.75,0.767,-24615.03125,881.9014282226562,1004.374267578125
|
||||||
|
0.75,0.817,-24727.35546875,881.9013671875,1004.3740844726562
|
||||||
|
0.75,0.868,-24727.35546875,881.9013671875,1004.3740844726562
|
||||||
|
0.75,0.918,-24727.35546875,881.9013671875,1004.3740844726562
|
||||||
|
0.75,0.968,-24727.35546875,881.9013671875,1004.3740844726562
|
||||||
|
0.75,1.021,-24887.84765625,881.9013061523438,1004.3737182617188
|
||||||
|
0.75,1.071,-24919.92578125,881.9013061523438,1004.3736572265625
|
||||||
|
0.75,1.121,-25032.25,881.9012451171875,1004.3734130859375
|
||||||
|
0.75,1.171,-25064.330078125,881.9011840820312,1004.3733520507812
|
||||||
|
0.75,1.221,-25144.478515625,881.9011840820312,1004.3732299804688
|
||||||
|
0.75,1.274,-25160.470703125,881.9011840820312,1004.3731689453125
|
||||||
|
0.75,1.324,-25160.470703125,881.9011840820312,1004.3731689453125
|
||||||
|
0.75,1.374,-25160.470703125,881.9011840820312,1004.3731689453125
|
||||||
|
0.75,1.424,-25304.970703125,881.9010620117188,1004.3728637695312
|
||||||
|
0.75,1.476,-25353.041015625,881.9010620117188,1004.372802734375
|
||||||
|
0.75,1.565,-25449.27734375,881.9010009765625,1004.3726196289062
|
||||||
|
0.75,1.615,-25609.671875,881.9009399414062,1004.3722534179688
|
||||||
|
0.75,1.665,-25657.7421875,881.90087890625,1004.3721923828125
|
||||||
|
0.75,1.715,-25657.7421875,881.90087890625,1004.3721923828125
|
||||||
|
0.75,1.765,-25657.7421875,881.90087890625,1004.3721923828125
|
||||||
|
0.75,1.816,-25657.7421875,881.90087890625,1004.3721923828125
|
||||||
|
0.75,1.866,-25786.154296875,881.9008178710938,1004.3718872070312
|
||||||
|
0.75,1.916,-25882.392578125,881.9007568359375,1004.3717041015625
|
||||||
|
0.75,1.966,-25914.470703125,881.9007568359375,1004.3716430664062
|
||||||
|
0.75,2.016,-26010.708984375,881.9006958007812,1004.3714599609375
|
||||||
|
0.75,2.067,-26058.779296875,881.9006958007812,1004.371337890625
|
||||||
|
0.75,2.117,-26058.779296875,881.9006958007812,1004.371337890625
|
||||||
|
0.75,2.168,-26058.779296875,881.9006958007812,1004.371337890625
|
||||||
|
0.75,2.218,-26058.779296875,881.9006958007812,1004.371337890625
|
||||||
|
0.75,2.27,-26203.181640625,881.9005737304688,1004.37109375
|
||||||
|
0.75,2.32,-26299.419921875,881.9005737304688,1004.370849609375
|
||||||
|
0.75,2.37,-26299.419921875,881.9005737304688,1004.370849609375
|
||||||
|
0.75,2.42,-26459.814453125,881.9004516601562,1004.3705444335938
|
||||||
|
0.75,2.473,-26475.8046875,881.9004516601562,1004.3704833984375
|
||||||
|
0.75,2.523,-26475.8046875,881.9004516601562,1004.3704833984375
|
||||||
|
0.75,2.573,-26475.8046875,881.9004516601562,1004.3704833984375
|
||||||
|
0.75,2.623,-26604.21875,881.900390625,1004.3702392578125
|
||||||
|
0.75,2.677,-26620.208984375,881.900390625,1004.3702392578125
|
||||||
|
0.75,2.727,-26732.533203125,881.9003295898438,1004.3699951171875
|
||||||
|
0.75,2.777,-26764.61328125,881.9003295898438,1004.3699340820312
|
||||||
|
0.75,2.827,-26892.9296875,881.9002075195312,1004.3696899414062
|
||||||
|
0.75,2.88,-26908.919921875,881.9002075195312,1004.36962890625
|
||||||
|
0.75,2.935,-26908.919921875,881.9002075195312,1004.36962890625
|
||||||
|
0.75,3.015,-26908.919921875,881.9002075195312,1004.36962890625
|
||||||
|
0.75,3.065,-27053.32421875,881.900146484375,1004.3693237304688
|
||||||
|
0.75,3.117,-27165.6484375,881.9000854492188,1004.369140625
|
||||||
|
0.75,3.167,-27197.7265625,881.9000854492188,1004.3690185546875
|
||||||
|
0.75,3.217,-27342.130859375,881.8999633789062,1004.3687744140625
|
||||||
|
0.75,3.27,-27358.123046875,881.8999633789062,1004.3687133789062
|
||||||
|
0.75,3.32,-27358.123046875,881.8999633789062,1004.3687133789062
|
||||||
|
0.75,3.37,-27358.123046875,881.8999633789062,1004.3687133789062
|
||||||
|
0.75,3.42,-27502.623046875,881.89990234375,1004.368408203125
|
||||||
|
0.75,3.473,-27518.61328125,881.89990234375,1004.368408203125
|
||||||
|
0.75,3.523,-27630.9375,881.8998413085938,1004.3681640625
|
||||||
|
0.75,3.573,-27663.017578125,881.8998413085938,1004.3681030273438
|
||||||
|
0.75,3.623,-27759.25390625,881.8997802734375,1004.367919921875
|
||||||
|
0.75,3.674,-27775.24609375,881.8997802734375,1004.3678588867188
|
||||||
|
0.75,3.724,-27775.24609375,881.8997802734375,1004.3678588867188
|
||||||
|
0.75,3.774,-27775.24609375,881.8997802734375,1004.3678588867188
|
||||||
|
0.75,3.824,-27935.736328125,881.899658203125,1004.3675537109375
|
||||||
|
0.75,3.876,-27951.728515625,881.899658203125,1004.3674926757812
|
||||||
|
0.75,3.926,-28080.044921875,881.8995971679688,1004.3672485351562
|
||||||
|
0.75,3.978,-28144.203125,881.8995361328125,1004.3671264648438
|
||||||
|
0.75,4.028,-28256.52734375,881.8994750976562,1004.3668823242188
|
||||||
|
0.75,4.078,-28272.517578125,881.8994750976562,1004.3668823242188
|
||||||
|
0.75,4.165,-28272.517578125,881.8994750976562,1004.3668823242188
|
||||||
|
0.75,4.215,-28272.517578125,881.8994750976562,1004.3668823242188
|
||||||
|
0.75,4.265,-28433.009765625,881.8994140625,1004.3665771484375
|
||||||
|
0.75,4.321,-28545.333984375,881.8993530273438,1004.3663330078125
|
||||||
|
0.75,4.371,-28577.4140625,881.8993530273438,1004.3662719726562
|
||||||
|
0.75,4.421,-28721.81640625,881.8992309570312,1004.365966796875
|
||||||
|
0.75,4.473,-28737.80859375,881.8992309570312,1004.365966796875
|
||||||
|
0.75,4.523,-28737.80859375,881.8992309570312,1004.365966796875
|
||||||
|
0.75,4.573,-28737.80859375,881.8992309570312,1004.365966796875
|
||||||
|
0.75,4.623,-28737.80859375,881.8992309570312,1004.365966796875
|
||||||
|
0.75,4.673,-28898.298828125,881.899169921875,1004.3656005859375
|
||||||
|
0.75,4.723,-29010.625,881.8991088867188,1004.3653564453125
|
||||||
|
0.75,4.773,-29042.703125,881.8991088867188,1004.3652954101562
|
||||||
|
0.75,4.824,-29171.01953125,881.8989868164062,1004.3650512695312
|
||||||
|
0.75,4.874,-29187.009765625,881.8989868164062,1004.3650512695312
|
||||||
|
0.75,4.924,-29187.009765625,881.8989868164062,1004.3650512695312
|
||||||
|
0.75,4.974,-29187.009765625,881.8989868164062,1004.3650512695312
|
||||||
|
1.0,0.0,-33019.671875,881.89697265625,1004.3572998046875
|
||||||
|
1.0,0.05,-33019.671875,881.89697265625,1004.3572998046875
|
||||||
|
1.0,0.1,-33019.671875,881.89697265625,1004.3572998046875
|
||||||
|
1.0,0.152,-33238.29296875,881.8968505859375,1004.3568115234375
|
||||||
|
1.0,0.202,-33278.03125,881.8967895507812,1004.3567504882812
|
||||||
|
1.0,0.252,-33417.171875,881.896728515625,1004.3564453125
|
||||||
|
1.0,0.302,-33516.578125,881.8966674804688,1004.3562622070312
|
||||||
|
1.0,0.352,-33615.86328125,881.8966064453125,1004.3560791015625
|
||||||
|
1.0,0.402,-33615.86328125,881.8966064453125,1004.3560791015625
|
||||||
|
1.0,0.476,-33615.86328125,881.8966064453125,1004.3560791015625
|
||||||
|
1.0,0.526,-33794.7421875,881.8965454101562,1004.355712890625
|
||||||
|
1.0,0.579,-33834.48046875,881.896484375,1004.3555908203125
|
||||||
|
1.0,0.629,-34013.36328125,881.8964233398438,1004.355224609375
|
||||||
|
1.0,0.679,-34053.09765625,881.8963623046875,1004.3551635742188
|
||||||
|
1.0,0.729,-34152.3828125,881.8963623046875,1004.35498046875
|
||||||
|
1.0,0.779,-34152.3828125,881.8963623046875,1004.35498046875
|
||||||
|
1.0,0.83,-34152.3828125,881.8963623046875,1004.35498046875
|
||||||
|
1.0,0.88,-34152.3828125,881.8963623046875,1004.35498046875
|
||||||
|
1.0,0.93,-34311.3359375,881.896240234375,1004.3546752929688
|
||||||
|
1.0,0.98,-34351.07421875,881.896240234375,1004.3545532226562
|
||||||
|
1.0,1.03,-34529.95703125,881.8961181640625,1004.3541870117188
|
||||||
|
1.0,1.08,-34569.6953125,881.8961181640625,1004.3541259765625
|
||||||
|
1.0,1.131,-34688.90625,881.8960571289062,1004.3538818359375
|
||||||
|
1.0,1.181,-34688.90625,881.8960571289062,1004.3538818359375
|
||||||
|
1.0,1.231,-34688.90625,881.8960571289062,1004.3538818359375
|
||||||
|
1.0,1.281,-34688.90625,881.8960571289062,1004.3538818359375
|
||||||
|
1.0,1.331,-34887.71484375,881.8959350585938,1004.3534545898438
|
||||||
|
1.0,1.381,-34967.19140625,881.8958740234375,1004.3533325195312
|
||||||
|
1.0,1.431,-35106.3359375,881.8958129882812,1004.35302734375
|
||||||
|
1.0,1.482,-35185.8125,881.8958129882812,1004.3529052734375
|
||||||
|
1.0,1.533,-35225.55078125,881.895751953125,1004.352783203125
|
||||||
|
1.0,1.583,-35225.55078125,881.895751953125,1004.352783203125
|
||||||
|
1.0,1.633,-35225.55078125,881.895751953125,1004.352783203125
|
||||||
|
1.0,1.684,-35404.55078125,881.8956909179688,1004.3524169921875
|
||||||
|
1.0,1.734,-35464.09765625,881.8956298828125,1004.352294921875
|
||||||
|
1.0,1.784,-35583.3125,881.8955688476562,1004.35205078125
|
||||||
|
1.0,1.834,-35702.5234375,881.8955078125,1004.351806640625
|
||||||
|
1.0,1.884,-35742.26171875,881.8955078125,1004.3517456054688
|
||||||
|
1.0,1.936,-35782.0,881.8954467773438,1004.3516845703125
|
||||||
|
1.0,1.989,-35782.0,881.8954467773438,1004.3516845703125
|
||||||
|
1.0,2.039,-35782.0,881.8954467773438,1004.3516845703125
|
||||||
|
1.0,2.09,-35980.80859375,881.8953857421875,1004.3512573242188
|
||||||
|
1.0,2.178,-36060.28515625,881.8953247070312,1004.3511352539062
|
||||||
|
1.0,2.228,-36219.23828125,881.8952026367188,1004.3507690429688
|
||||||
|
1.0,2.278,-36278.78515625,881.8952026367188,1004.3506469726562
|
||||||
|
1.0,2.328,-36278.78515625,881.8952026367188,1004.3506469726562
|
||||||
|
1.0,2.378,-36278.78515625,881.8952026367188,1004.3506469726562
|
||||||
|
1.0,2.428,-36278.78515625,881.8952026367188,1004.3506469726562
|
||||||
|
1.0,2.479,-36457.6640625,881.8950805664062,1004.3502807617188
|
||||||
|
1.0,2.529,-36576.87890625,881.89501953125,1004.3500366210938
|
||||||
|
1.0,2.579,-36616.6171875,881.89501953125,1004.3499755859375
|
||||||
|
1.0,2.629,-36775.5703125,881.8949584960938,1004.3496704101562
|
||||||
|
1.0,2.681,-36795.37890625,881.8948974609375,1004.349609375
|
||||||
|
1.0,2.731,-36795.37890625,881.8948974609375,1004.349609375
|
||||||
|
1.0,2.782,-36795.37890625,881.8948974609375,1004.349609375
|
||||||
|
1.0,2.832,-36994.1875,881.8948364257812,1004.3491821289062
|
||||||
|
1.0,2.882,-37013.99609375,881.894775390625,1004.3491821289062
|
||||||
|
1.0,2.932,-37172.94921875,881.8947143554688,1004.348876953125
|
||||||
|
1.0,2.982,-37212.6875,881.8947143554688,1004.3487548828125
|
||||||
|
1.0,3.033,-37311.97265625,881.8946533203125,1004.3485717773438
|
||||||
|
1.0,3.083,-37331.78125,881.8946533203125,1004.3485107421875
|
||||||
|
1.0,3.133,-37331.78125,881.8946533203125,1004.3485107421875
|
||||||
|
1.0,3.183,-37331.78125,881.8946533203125,1004.3485107421875
|
||||||
|
1.0,3.233,-37550.40234375,881.89453125,1004.3480834960938
|
||||||
|
1.0,3.283,-37590.140625,881.8944702148438,1004.3480224609375
|
||||||
|
1.0,3.335,-37709.3515625,881.8944091796875,1004.3477783203125
|
||||||
|
1.0,3.385,-37788.828125,881.8944091796875,1004.3475952148438
|
||||||
|
1.0,3.435,-37907.92578125,881.8943481445312,1004.3473510742188
|
||||||
|
1.0,3.485,-37907.92578125,881.8943481445312,1004.3473510742188
|
||||||
|
1.0,3.536,-37907.92578125,881.8943481445312,1004.3473510742188
|
||||||
|
1.0,3.587,-37907.92578125,881.8943481445312,1004.3473510742188
|
||||||
|
1.0,3.637,-38126.54296875,881.8942260742188,1004.346923828125
|
||||||
|
1.0,3.687,-38206.01953125,881.8941650390625,1004.3467407226562
|
||||||
|
1.0,3.737,-38384.8984375,881.89404296875,1004.3463745117188
|
||||||
|
1.0,3.787,-38424.63671875,881.89404296875,1004.3463134765625
|
||||||
|
1.0,3.838,-38444.4453125,881.89404296875,1004.3462524414062
|
||||||
|
1.0,3.888,-38444.4453125,881.89404296875,1004.3462524414062
|
||||||
|
1.0,3.938,-38444.4453125,881.89404296875,1004.3462524414062
|
||||||
|
1.0,3.988,-38444.4453125,881.89404296875,1004.3462524414062
|
||||||
|
1.0,4.038,-38682.9921875,881.8939208984375,1004.3457641601562
|
||||||
|
1.0,4.088,-38762.46875,881.8938598632812,1004.3456420898438
|
||||||
|
1.0,4.138,-38881.68359375,881.893798828125,1004.3453979492188
|
||||||
|
1.0,4.188,-38981.08984375,881.8937377929688,1004.34521484375
|
||||||
|
1.0,4.239,-39040.63671875,881.8937377929688,1004.3450927734375
|
||||||
|
1.0,4.289,-39040.63671875,881.8937377929688,1004.3450927734375
|
||||||
|
1.0,4.339,-39040.63671875,881.8937377929688,1004.3450927734375
|
||||||
|
1.0,4.389,-39040.63671875,881.8937377929688,1004.3450927734375
|
||||||
|
1.0,4.439,-39239.32421875,881.8936157226562,1004.3446655273438
|
||||||
|
1.0,4.489,-39358.5390625,881.8935546875,1004.3444213867188
|
||||||
|
1.0,4.539,-39477.75390625,881.8934936523438,1004.3441772460938
|
||||||
|
1.0,4.589,-39517.4921875,881.8934326171875,1004.3441162109375
|
||||||
|
1.0,4.641,-39577.16015625,881.8934326171875,1004.343994140625
|
||||||
|
1.0,4.691,-39577.16015625,881.8934326171875,1004.343994140625
|
||||||
|
1.0,4.744,-39577.16015625,881.8934326171875,1004.343994140625
|
||||||
|
1.0,4.794,-39775.96875,881.893310546875,1004.3435668945312
|
||||||
|
1.0,4.876,-39875.37109375,881.8932495117188,1004.3433837890625
|
||||||
|
1.0,4.926,-39994.5859375,881.8931884765625,1004.3431396484375
|
||||||
|
1.0,4.976,-40054.1328125,881.8931884765625,1004.343017578125
|
||||||
|
473
docs/re/captures/turn-law-pitch-phases.csv
Normal file
473
docs/re/captures/turn-law-pitch-phases.csv
Normal file
@@ -0,0 +1,473 @@
|
|||||||
|
phase,t,fx,fy,fz
|
||||||
|
slow_down,0.0,-0.9999999999979217,-5.364418989006872e-07,-1.9669536293025197e-06
|
||||||
|
slow_down,0.055,-0.9999931441638505,-0.003270491953406279,0.0017365217186252632
|
||||||
|
slow_down,0.106,-0.9998075678152163,-0.01732181066707776,0.00920772581236021
|
||||||
|
slow_down,0.156,-0.9984570236826587,-0.04903096590809946,0.026067915929080705
|
||||||
|
slow_down,0.206,-0.9959234059606977,-0.07964543509725727,0.04234588678740652
|
||||||
|
slow_down,0.256,-0.9949974062198822,-0.0882080473352674,0.046898848610662965
|
||||||
|
slow_down,0.308,-0.9949974062198822,-0.0882080473352674,0.046898848610662965
|
||||||
|
slow_down,0.358,-0.9949974062198822,-0.0882080473352674,0.046898848610662965
|
||||||
|
slow_down,0.408,-0.9742287842225655,-0.19916037362801364,0.10589344440791315
|
||||||
|
slow_down,0.48,-0.9465655723613469,-0.2847614479418032,0.15140850367903233
|
||||||
|
slow_down,0.53,-0.8914624347306995,-0.4000593644081642,0.2127139685430863
|
||||||
|
slow_down,0.58,-0.8716372552912262,-0.4327785818328047,0.23011126503316684
|
||||||
|
slow_down,0.63,-0.8154459106136834,-0.5110798322402205,0.27174504952386647
|
||||||
|
slow_down,0.68,-0.8154459106136834,-0.5110798322402205,0.27174504952386647
|
||||||
|
slow_down,0.73,-0.8154459106136834,-0.5110798322402205,0.27174504952386647
|
||||||
|
slow_down,0.782,-0.8154459106136834,-0.5110798322402205,0.27174504952386647
|
||||||
|
slow_down,0.832,-0.6283422527343198,-0.6868777132566759,0.3652191403254217
|
||||||
|
slow_down,0.882,-0.5946716694847226,-0.7098621875663405,0.3774404326192183
|
||||||
|
slow_down,0.932,-0.4876749892181813,-0.7708354120554387,0.40986079638380735
|
||||||
|
slow_down,0.982,-0.41202774678544607,-0.8045162551187721,0.427769483634089
|
||||||
|
slow_down,1.034,-0.33356518582907857,-0.8323782939339731,0.44258405144150914
|
||||||
|
slow_down,1.084,-0.33356518582907857,-0.8323782939339731,0.44258405144150914
|
||||||
|
slow_down,1.134,-0.33356518582907857,-0.8323782939339731,0.44258405144150914
|
||||||
|
slow_down,1.184,-0.33356518582907857,-0.8323782939339731,0.44258405144150914
|
||||||
|
slow_down,1.234,-0.12829325207912554,-0.875650566375165,0.4655930917419358
|
||||||
|
slow_down,1.284,0.01999288837244423,-0.8827703771186131,0.4693791065827161
|
||||||
|
slow_down,1.334,0.14647633503077626,-0.8734233776363055,0.46440961087636784
|
||||||
|
slow_down,1.384,0.2294525395929343,-0.8593894358220113,0.4569478413034447
|
||||||
|
slow_down,1.437,0.24987913985400062,-0.8549368999870867,0.454580369688678
|
||||||
|
slow_down,1.487,0.24987913985400062,-0.8549368999870867,0.454580369688678
|
||||||
|
slow_down,1.537,0.24987913985400062,-0.8549368999870867,0.454580369688678
|
||||||
|
slow_down,1.587,0.46631421415396884,-0.7810712750954569,0.41530557051251255
|
||||||
|
slow_down,1.637,0.5748418033213702,-0.7224835385509736,0.38415418477103586
|
||||||
|
slow_down,1.687,0.6089893568992764,-0.700333722219096,0.3723770142022088
|
||||||
|
slow_down,1.737,0.704521028047038,-0.6266117341975116,0.33317841407499954
|
||||||
|
slow_down,1.788,0.7193167990693469,-0.6133666704535744,0.3261359688125875
|
||||||
|
slow_down,1.838,0.7193167990693469,-0.6133666704535744,0.3261359688125875
|
||||||
|
slow_down,1.89,0.7193167990693469,-0.6133666704535744,0.3261359688125875
|
||||||
|
slow_down,1.94,0.849066896281655,-0.46644693570280316,0.2480174627160401
|
||||||
|
slow_down,1.99,0.8810436144109307,-0.41766387138482547,0.222078904999019
|
||||||
|
slow_down,2.04,0.9484328657603022,-0.2798737472266781,0.1488145986084635
|
||||||
|
slow_down,2.09,0.9610413097510078,-0.24404963350980377,0.12976662643298606
|
||||||
|
slow_down,2.141,0.9939216935112383,-0.09720198191703029,0.051685993065371263
|
||||||
|
slow_down,2.191,0.9976931470309339,-0.05993776893335393,0.031872373975016126
|
||||||
|
slow_down,2.241,0.9976931470309339,-0.05993776893335393,0.031872373975016126
|
||||||
|
slow_down,2.292,0.9976931470309339,-0.05993776893335393,0.031872373975016126
|
||||||
|
slow_down,2.342,0.9896563458191195,0.12666726325652128,-0.06734776610289538
|
||||||
|
slow_down,2.392,0.9688328898337262,0.21872041518359675,-0.11629364367129405
|
||||||
|
slow_down,2.443,0.9442856108918024,0.29060279698667507,-0.1545143988313609
|
||||||
|
slow_down,2.493,0.8947993986761507,0.3942088393731278,-0.20960302261391808
|
||||||
|
slow_down,2.543,0.8309037105646212,0.49128695070578754,-0.26122051189780854
|
||||||
|
slow_down,2.593,0.8065858741842986,0.5219257641234278,-0.2775116651791901
|
||||||
|
slow_down,2.643,0.7536882578227702,0.5803018854525123,-0.308551019703933
|
||||||
|
slow_down,2.693,0.7536882578227702,0.5803018854525123,-0.308551019703933
|
||||||
|
slow_down,2.743,0.7536882578227702,0.5803018854525123,-0.308551019703933
|
||||||
|
slow_down,2.793,0.7536882578227702,0.5803018854525123,-0.308551019703933
|
||||||
|
slow_down,2.844,0.5464292801028885,0.7394732111173732,-0.3931849588755906
|
||||||
|
slow_down,2.894,0.4542920662458938,0.7865761484815041,-0.4182304163807783
|
||||||
|
slow_down,2.944,0.33724237713970884,0.8312222802162891,-0.4419695690126091
|
||||||
|
slow_down,2.995,0.2969454116172929,0.8431213928515923,-0.4482964860841846
|
||||||
|
slow_down,3.045,0.19416339979478872,0.8661439018126901,-0.46053807175174793
|
||||||
|
slow_down,3.095,0.19416339979478872,0.8661439018126901,-0.46053807175174793
|
||||||
|
slow_down,3.145,0.19416339979478872,0.8661439018126901,-0.46053807175174793
|
||||||
|
slow_down,3.195,0.19416339979478872,0.8661439018126901,-0.46053807175174793
|
||||||
|
slow_down,3.245,-0.08056448227304423,0.8800766715066983,-0.4679470231401919
|
||||||
|
slow_down,3.295,-0.20674220671814517,0.8638708932840495,-0.4593307519619497
|
||||||
|
slow_down,3.345,-0.36917998882389613,0.8205732127784867,-0.4363092232836481
|
||||||
|
slow_down,3.395,-0.40826537853398315,0.8060092833540977,-0.4285655327222631
|
||||||
|
slow_down,3.446,-0.4274712950772437,0.7982089720099239,-0.4244181062205577
|
||||||
|
slow_down,3.496,-0.4274712950772437,0.7982089720099239,-0.4244181062205577
|
||||||
|
slow_down,3.546,-0.4274712950772437,0.7982089720099239,-0.4244181062205577
|
||||||
|
slow_down,3.596,-0.6082231710880547,0.7008524983325218,-0.3726531225317367
|
||||||
|
slow_down,3.647,-0.6890657017287396,0.6398696963671466,-0.34022820337546267
|
||||||
|
slow_down,3.698,-0.762143003366288,0.5716265197273306,-0.3039426991461283
|
||||||
|
slow_down,3.748,-0.8382680494161782,0.4814331278329663,-0.2559859776490942
|
||||||
|
slow_down,3.798,-0.8713041042377916,0.43329936687430565,-0.23039274425360168
|
||||||
|
slow_down,3.849,-0.8913381334740916,0.4002732381357301,-0.21283248494358056
|
||||||
|
slow_down,3.899,-0.8913381334740916,0.4002732381357301,-0.21283248494358056
|
||||||
|
slow_down,3.954,-0.8913381334740916,0.4002732381357301,-0.21283248494358056
|
||||||
|
slow_down,4.004,-0.9668278549473198,0.2255289063838423,-0.11991918646852343
|
||||||
|
slow_down,4.054,-0.988482045003392,0.1336223546024849,-0.07105148173261426
|
||||||
|
slow_down,4.104,-0.9989645669952419,0.04016845004198468,-0.021360934184474142
|
||||||
|
slow_down,4.154,-0.9966424267396048,-0.0722944195265059,0.038436832958986006
|
||||||
|
slow_down,4.204,-0.9861088546477905,-0.1466589830214944,0.07797736520506265
|
||||||
|
slow_down,4.254,-0.9823755362869574,-0.16503976362875877,0.08775068162855647
|
||||||
|
slow_down,4.304,-0.9823755362869574,-0.16503976362875877,0.08775068162855647
|
||||||
|
slow_down,4.354,-0.9823755362869574,-0.16503976362875877,0.08775068162855647
|
||||||
|
slow_down,4.405,-0.9209647726441181,-0.34403770228142444,0.18292606964969713
|
||||||
|
slow_down,4.455,-0.8743898972057189,-0.42842805892694735,0.22779751093605147
|
||||||
|
slow_down,4.505,-0.8299912670076615,-0.4924878804154499,0.26185909251907646
|
||||||
|
slow_down,4.555,-0.7523228900523915,-0.5816815188929995,0.3092844640158157
|
||||||
|
slow_down,4.605,-0.6625352693826098,-0.6613550972756903,0.3516481936987236
|
||||||
|
slow_down,4.659,-0.6302746771466385,-0.6854961772366975,0.36448432386259716
|
||||||
|
slow_down,4.709,-0.6302746771466385,-0.6854961772366975,0.36448432386259716
|
||||||
|
slow_down,4.78,-0.6302746771466385,-0.6854961772366975,0.36448432386259716
|
||||||
|
slow_down,4.831,-0.4525978574008272,-0.7873373046911097,0.4186348625209313
|
||||||
|
slow_down,4.881,-0.41426647045914855,-0.8036195683143964,0.4272925003735763
|
||||||
|
slow_down,4.931,-0.274715147969851,-0.8489764429252736,0.45140955554114326
|
||||||
|
slow_down,4.981,-0.23364090031412207,-0.8585099251579216,0.4564785187779883
|
||||||
|
slow_down,5.031,-0.04480010659454584,-0.8820604850600307,0.4690013338411531
|
||||||
|
slow_down,5.083,-0.023683103154920795,-0.8826993337726754,0.46934102397108685
|
||||||
|
slow_down,5.133,-0.023683103154920795,-0.8826993337726754,0.46934102397108685
|
||||||
|
slow_down,5.183,-0.023683103154920795,-0.8826993337726754,0.46934102397108685
|
||||||
|
slow_down,5.233,0.1453592269195889,-0.8735689453585949,0.46448680589916846
|
||||||
|
slow_down,5.286,0.22874062128632777,-0.8595374327749778,0.4570263994914793
|
||||||
|
slow_down,5.336,0.35043482719640695,-0.8269562640048762,0.43970304673827526
|
||||||
|
slow_down,5.386,0.4284669431857837,-0.7977927831777877,0.42419659794306436
|
||||||
|
slow_down,5.437,0.521489921000824,-0.7533803887235785,0.40058239125211675
|
||||||
|
slow_down,5.488,0.521489921000824,-0.7533803887235785,0.40058239125211675
|
||||||
|
slow_down,5.538,0.521489921000824,-0.7533803887235785,0.40058239125211675
|
||||||
|
slow_down,5.588,0.521489921000824,-0.7533803887235785,0.40058239125211675
|
||||||
|
slow_down,5.64,0.7340500600490995,-0.5996042690723751,0.3188184904488701
|
||||||
|
slow_down,5.69,0.7890549608342304,-0.5424133153670134,0.28840954230998667
|
||||||
|
slow_down,5.74,0.8607130204977756,-0.4494988131338322,0.23900609476930043
|
||||||
|
slow_down,5.79,0.8815363856269739,-0.41685239315276573,0.2216476553869751
|
||||||
|
slow_down,5.84,0.918368956231027,-0.34940329267058484,0.185784281633532
|
||||||
|
slow_down,5.89,0.918368956231027,-0.34940329267058484,0.185784281633532
|
||||||
|
slow_down,5.941,0.918368956231027,-0.34940329267058484,0.185784281633532
|
||||||
|
slow_down,5.991,0.918368956231027,-0.34940329267058484,0.185784281633532
|
||||||
|
fast_down,0.0,0.9443584250101847,0.2904182906726782,-0.15441626065619846
|
||||||
|
fast_down,0.051,0.9436765232896925,0.2921411966275288,-0.15533235537039236
|
||||||
|
fast_down,0.101,0.9413498555259846,0.2979356698970741,-0.15841333941366673
|
||||||
|
fast_down,0.151,0.9359648416782657,0.3108808857007239,-0.16529637034161546
|
||||||
|
fast_down,0.201,0.9359648416782657,0.3108808857007239,-0.16529637034161546
|
||||||
|
fast_down,0.251,0.9359648416782657,0.3108808857007239,-0.16529637034161546
|
||||||
|
fast_down,0.302,0.9359648416782657,0.3108808857007239,-0.16529637034161546
|
||||||
|
fast_down,0.352,0.9069682473230593,0.37189736355510283,-0.19773959979857733
|
||||||
|
fast_down,0.402,0.8846064485621233,0.41175300754402716,-0.21893124934726846
|
||||||
|
fast_down,0.452,0.8540047786366772,0.45936747444995185,-0.24424856495626104
|
||||||
|
fast_down,0.502,0.8282129470457974,0.49481636271239404,-0.2630970952667319
|
||||||
|
fast_down,0.553,0.7845202085163289,0.5475191291668909,-0.2911199849303122
|
||||||
|
fast_down,0.605,0.7845202085163289,0.5475191291668909,-0.2911199849303122
|
||||||
|
fast_down,0.655,0.7845202085163289,0.5475191291668909,-0.2911199849303122
|
||||||
|
fast_down,0.705,0.7845202085163289,0.5475191291668909,-0.2911199849303122
|
||||||
|
fast_down,0.755,0.6764926071616988,0.6502464180323504,-0.34574173640401795
|
||||||
|
fast_down,0.805,0.658050205681294,0.6648368510249885,-0.3534994884324219
|
||||||
|
fast_down,0.855,0.6002218773366298,0.7062112257134413,-0.37549887169312585
|
||||||
|
fast_down,0.905,0.549340559411765,0.7377897883828349,-0.3922896607650788
|
||||||
|
fast_down,0.955,0.49584529498589064,0.766761273134124,-0.407694240163008
|
||||||
|
fast_down,1.005,0.48512337186675963,0.7720896571445868,-0.410527557417258
|
||||||
|
fast_down,1.056,0.48512337186675963,0.7720896571445868,-0.410527557417258
|
||||||
|
fast_down,1.106,0.48512337186675963,0.7720896571445868,-0.410527557417258
|
||||||
|
fast_down,1.159,0.3622432608277545,0.8229807007440995,-0.4375872326606736
|
||||||
|
fast_down,1.209,0.32689929716992755,0.8344373883855656,-0.4436790443260581
|
||||||
|
fast_down,1.259,0.25427817274032954,0.853925751514516,-0.45404121153063653
|
||||||
|
fast_down,1.309,0.2298587258053575,0.8593053722677841,-0.456901787436712
|
||||||
|
fast_down,1.359,0.16760580400920777,0.8704570196341962,-0.462831363924248
|
||||||
|
fast_down,1.409,0.16760580400920777,0.8704570196341962,-0.462831363924248
|
||||||
|
fast_down,1.46,0.16760580400920777,0.8704570196341962,-0.462831363924248
|
||||||
|
fast_down,1.51,0.16760580400920777,0.8704570196341962,-0.462831363924248
|
||||||
|
fast_down,1.56,0.002540052170349648,0.8829440689248292,-0.46947131891675575
|
||||||
|
fast_down,1.612,-0.060902995462806364,0.8813078425991426,-0.4686014422906764
|
||||||
|
fast_down,1.662,-0.13719170887921703,0.8745981313071235,-0.4650339167511203
|
||||||
|
fast_down,1.712,-0.17489675318047473,0.8693377382286037,-0.4622369766889098
|
||||||
|
fast_down,1.763,-0.20036620128936147,0.8650415136381839,-0.45995278568939074
|
||||||
|
fast_down,1.813,-0.20036620128936147,0.8650415136381839,-0.45995278568939074
|
||||||
|
fast_down,1.863,-0.20036620128936147,0.8650415136381839,-0.45995278568939074
|
||||||
|
fast_down,1.913,-0.3251335273823679,0.8349744124881198,-0.4439661246784693
|
||||||
|
fast_down,1.964,-0.3973065881096412,0.8102676243119484,-0.4308292608871257
|
||||||
|
fast_down,2.014,-0.4206417783991093,0.8010327730400488,-0.4259189955625415
|
||||||
|
fast_down,2.064,-0.4777331010732428,0.775672931494927,-0.412434949398095
|
||||||
|
fast_down,2.114,-0.488795575431501,0.7702810463478054,-0.4095680591500243
|
||||||
|
fast_down,2.2,-0.488795575431501,0.7702810463478054,-0.4095680591500243
|
||||||
|
fast_down,2.25,-0.5739522440973305,0.723034797529328,-0.3844470094269976
|
||||||
|
fast_down,2.301,-0.5844536749020949,0.7164465126356567,-0.3809439544416504
|
||||||
|
fast_down,2.351,-0.6655292434246848,0.6590060504026063,-0.35040241391766147
|
||||||
|
fast_down,2.401,-0.6844791420847829,0.6436963242533531,-0.3422621016028532
|
||||||
|
fast_down,2.451,-0.7643784717763241,0.5692950061586564,-0.30270240806393794
|
||||||
|
fast_down,2.502,-0.7725813754143398,0.560596161839983,-0.2980771069592003
|
||||||
|
fast_down,2.552,-0.7725813754143398,0.560596161839983,-0.2980771069592003
|
||||||
|
fast_down,2.602,-0.7725813754143398,0.560596161839983,-0.2980771069592003
|
||||||
|
fast_down,2.654,-0.8262843180314257,0.4973219093770416,-0.264433629156572
|
||||||
|
fast_down,2.704,-0.8262843180314257,0.4973219093770416,-0.264433629156572
|
||||||
|
fast_down,2.757,-0.8746773850824483,0.4279683944410753,-0.22755774077112537
|
||||||
|
fast_down,2.807,-0.8984966762022762,0.38759540618962496,-0.20609105743375078
|
||||||
|
fast_down,2.857,-0.9198514942946016,0.3463497804526146,-0.18416041383645462
|
||||||
|
fast_down,2.907,-0.9198514942946016,0.3463497804526146,-0.18416041383645462
|
||||||
|
fast_down,2.959,-0.9198514942946016,0.3463497804526146,-0.18416041383645462
|
||||||
|
fast_down,3.009,-0.9198514942946016,0.3463497804526146,-0.18416041383645462
|
||||||
|
fast_down,3.059,-0.965513097061632,0.229878182640904,-0.12223125847413475
|
||||||
|
fast_down,3.109,-0.9807575239828921,0.17237651768286696,-0.09165705266085657
|
||||||
|
fast_down,3.159,-0.9929977466389756,0.10430437127883818,-0.055462359326332346
|
||||||
|
fast_down,3.209,-0.9977780037787286,0.05882634956765883,-0.03128123673832199
|
||||||
|
fast_down,3.259,-0.9998855681302515,0.013355956398558844,-0.007104158889265936
|
||||||
|
fast_down,3.31,-0.9998855681302515,0.013355956398558844,-0.007104158889265936
|
||||||
|
fast_down,3.36,-0.9998855681302515,0.013355956398558844,-0.007104158889265936
|
||||||
|
fast_down,3.41,-0.9998855681302515,0.013355956398558844,-0.007104158889265936
|
||||||
|
fast_down,3.46,-0.9864097173511808,-0.14507296850283008,0.07713432001995296
|
||||||
|
fast_down,3.51,-0.9816537064216652,-0.1683547235000568,0.0895136176446171
|
||||||
|
fast_down,3.562,-0.9637402505323968,-0.23560849343709017,0.12527317080707187
|
||||||
|
fast_down,3.612,-0.9564950177231987,-0.2575996165326645,0.13696612220882184
|
||||||
|
fast_down,3.662,-0.9307476539483766,-0.3228612242140167,0.1716666379021257
|
||||||
|
fast_down,3.712,-0.9307476539483766,-0.3228612242140167,0.1716666379021257
|
||||||
|
fast_down,3.763,-0.9307476539483766,-0.3228612242140167,0.1716666379021257
|
||||||
|
fast_down,3.813,-0.9307476539483766,-0.3228612242140167,0.1716666379021257
|
||||||
|
fast_down,3.865,-0.8688054358698426,-0.4371952554269202,0.23245950880788432
|
||||||
|
fast_down,3.915,-0.855129825769737,-0.45773293913947277,0.2433794106036063
|
||||||
|
fast_down,3.965,-0.7963049513123122,-0.5340913405869819,0.28398039443858913
|
||||||
|
fast_down,4.015,-0.7803317574044676,-0.5521655692420058,0.2935907568873839
|
||||||
|
fast_down,4.065,-0.7469460207485172,-0.5870586975863323,0.3121437612322162
|
||||||
|
fast_down,4.116,-0.7469460207485172,-0.5870586975863323,0.3121437612322162
|
||||||
|
fast_down,4.166,-0.7469460207485172,-0.5870586975863323,0.3121437612322162
|
||||||
|
fast_down,4.216,-0.7469460207485172,-0.5870586975863323,0.3121437612322162
|
||||||
|
fast_down,4.266,-0.6559126974803943,-0.6664814960318208,0.3543740237816236
|
||||||
|
fast_down,4.316,-0.6350795565364296,-0.682030139179491,0.36264148427930326
|
||||||
|
fast_down,4.366,-0.5503710891724398,-0.737190715165822,0.3919713174155045
|
||||||
|
fast_down,4.416,-0.4949668020490733,-0.7672035380458677,0.40792964599207093
|
||||||
|
fast_down,4.467,-0.4371063450622004,-0.7941315787105723,0.42224765103078876
|
||||||
|
fast_down,4.518,-0.4371063450622004,-0.7941315787105723,0.42224765103078876
|
||||||
|
fast_down,4.568,-0.4371063450622004,-0.7941315787105723,0.42224765103078876
|
||||||
|
fast_down,4.618,-0.4371063450622004,-0.7941315787105723,0.42224765103078876
|
||||||
|
fast_down,4.668,-0.30410075514103085,-0.8411307425186387,0.4472379732454506
|
||||||
|
fast_down,4.72,-0.265045812905107,-0.8513693528072396,0.45268194371109266
|
||||||
|
fast_down,4.77,-0.2003329822946081,-0.8650478680243607,0.45995530460193246
|
||||||
|
fast_down,4.821,-0.12328116655487778,-0.8762116341647558,0.4658915390165362
|
||||||
|
fast_down,4.872,-0.057139366364265136,-0.8815044087383488,0.4687057394425038
|
||||||
|
fast_down,4.922,-0.04426235386956533,-0.8820815936116289,0.4690126930494469
|
||||||
|
fast_down,4.973,-0.04426235386956533,-0.8820815936116289,0.4690126930494469
|
||||||
|
fast_down,5.023,-0.04426235386956533,-0.8820815936116289,0.4690126930494469
|
||||||
|
fast_down,5.073,0.09704906741017645,-0.8787789051539171,0.46725701104563183
|
||||||
|
fast_down,5.124,0.12437400586434713,-0.8760911483104105,0.4658276575273324
|
||||||
|
fast_down,5.202,0.21618720601044192,-0.8620667339021633,0.45837107048400827
|
||||||
|
fast_down,5.252,0.291742848342586,-0.8445356380649158,0.4490497371998343
|
||||||
|
fast_down,5.302,0.32882509356397704,-0.8338467065508258,0.443366358463272
|
||||||
|
fast_down,5.352,0.32882509356397704,-0.8338467065508258,0.443366358463272
|
||||||
|
fast_down,5.403,0.32882509356397704,-0.8338467065508258,0.443366358463272
|
||||||
|
fast_down,5.453,0.32882509356397704,-0.8338467065508258,0.443366358463272
|
||||||
|
fast_down,5.503,0.45952482584513876,-0.7842020657461503,0.41697008826948917
|
||||||
|
fast_down,5.554,0.5305290068915852,-0.7484442024246722,0.3979575966149214
|
||||||
|
fast_down,5.604,0.5742746008802159,-0.722835081025216,0.38434116149995984
|
||||||
|
fast_down,5.655,0.6364506879255921,-0.6810316271325519,0.36211385596829787
|
||||||
|
fast_down,5.705,0.6757433888807985,-0.6508520702427965,0.34606712505605
|
||||||
|
fast_down,5.755,0.6945720610670142,-0.6352116685048377,0.3377510742846278
|
||||||
|
fast_down,5.807,0.6945720610670142,-0.6352116685048377,0.3377510742846278
|
||||||
|
fast_down,5.857,0.6945720610670142,-0.6352116685048377,0.3377510742846278
|
||||||
|
fast_down,5.907,0.6945720610670142,-0.6352116685048377,0.3377510742846278
|
||||||
|
fast_down,5.957,0.805526153300102,-0.5231983974143916,0.2781924752622779
|
||||||
|
slow_up,0.0,0.9460594585111224,-0.28606766878165435,0.15210782307123943
|
||||||
|
slow_up,0.05,0.9455190535326738,-0.2874571518654766,0.15284667234868138
|
||||||
|
slow_up,0.103,0.9436479027598054,-0.2922112658093419,0.15537442437905588
|
||||||
|
slow_up,0.153,0.9281349974776371,-0.32867052977816213,0.17476014795292694
|
||||||
|
slow_up,0.203,0.9138692565342911,-0.3584831868409579,0.19061161222185014
|
||||||
|
slow_up,0.253,0.9138692565342911,-0.3584831868409579,0.19061161222185014
|
||||||
|
slow_up,0.305,0.9138692565342911,-0.3584831868409579,0.19061161222185014
|
||||||
|
slow_up,0.355,0.9138692565342911,-0.3584831868409579,0.19061161222185014
|
||||||
|
slow_up,0.405,0.7239423526708754,-0.6091094630016742,0.32387209217709695
|
||||||
|
slow_up,0.455,0.6293332508032875,-0.6861687877540366,0.3648452468451829
|
||||||
|
slow_up,0.506,0.5088001344152956,-0.7601149159245445,0.40416300895554474
|
||||||
|
slow_up,0.556,0.2006744641318691,-0.8649857893145051,0.4599231932935648
|
||||||
|
slow_up,0.606,0.11787401800375455,-0.8767915347130336,0.4661998718738709
|
||||||
|
slow_up,0.656,0.11787401800375455,-0.8767915347130336,0.4661998718738709
|
||||||
|
slow_up,0.709,0.11787401800375455,-0.8767915347130336,0.4661998718738709
|
||||||
|
slow_up,0.759,-0.2574125705516465,-0.8531933418076191,0.45365172766907963
|
||||||
|
slow_up,0.809,-0.4176502870922448,-0.8022529549718921,0.4265658611874992
|
||||||
|
slow_up,0.86,-0.6336358186718246,-0.683076147606698,0.3631977778936416
|
||||||
|
slow_up,0.91,-0.6970562053773977,-0.6330881401226467,0.33661855768942883
|
||||||
|
slow_up,0.96,-0.8082954591867698,-0.519859669896834,0.27641341189024043
|
||||||
|
slow_up,1.01,-0.8082954591867698,-0.519859669896834,0.27641341189024043
|
||||||
|
slow_up,1.06,-0.8082954591867698,-0.519859669896834,0.27641341189024043
|
||||||
|
slow_up,1.11,-0.9453328096216951,-0.2879361825972544,0.15309681186776067
|
||||||
|
slow_up,1.16,-0.9993838042771488,-0.03099239233204635,0.016476752291336164
|
||||||
|
slow_up,1.21,-0.9843571845612721,0.15556049447275458,-0.08271557146026204
|
||||||
|
slow_up,1.261,-0.9082569628582936,0.3694354300610396,-0.19643510998556962
|
||||||
|
slow_up,1.311,-0.889740162873185,0.4030356323142681,-0.21430054049263708
|
||||||
|
slow_up,1.361,-0.889740162873185,0.4030356323142681,-0.21430054049263708
|
||||||
|
slow_up,1.412,-0.889740162873185,0.4030356323142681,-0.21430054049263708
|
||||||
|
slow_up,1.462,-0.6223888813459727,0.6910891995086466,-0.3674612887086295
|
||||||
|
slow_up,1.512,-0.480532290011011,0.7743237638152762,-0.411717654525183
|
||||||
|
slow_up,1.562,-0.24261548960731635,0.856566634122575,-0.45544629267403736
|
||||||
|
slow_up,1.612,-0.0738911400080343,0.8805333010618643,-0.4681892834627991
|
||||||
|
slow_up,1.662,-0.03125769323670315,0.8825156096955135,-0.4692431728403476
|
||||||
|
slow_up,1.712,-0.03125769323670315,0.8825156096955135,-0.4692431728403476
|
||||||
|
slow_up,1.768,0.2241277713578036,0.8604849053373076,-0.45752865461392567
|
||||||
|
slow_up,1.818,0.3473353775299449,0.8279759987262889,-0.44024297955712494
|
||||||
|
slow_up,1.9,0.5751840484866985,0.7222726069742372,-0.38403852877164607
|
||||||
|
slow_up,1.95,0.8180024556066614,0.5078850346428319,-0.27004587426458004
|
||||||
|
slow_up,2.0,0.8180024556066614,0.5078850346428319,-0.27004587426458004
|
||||||
|
slow_up,2.053,0.8180024556066614,0.5078850346428319,-0.27004587426458004
|
||||||
|
slow_up,2.103,0.9645428546616037,0.233034025921976,-0.12390409308751824
|
||||||
|
slow_up,2.159,0.9968894319322942,-0.06958644228403679,0.03700253439912434
|
||||||
|
slow_up,2.209,0.9863654677307515,-0.1453051191165562,0.07726309873943166
|
||||||
|
slow_up,2.259,0.8928133915845599,-0.3977019785730571,0.21146485298117748
|
||||||
|
slow_up,2.31,0.8726503468714266,-0.4311822752385455,0.22926669541232975
|
||||||
|
slow_up,2.362,0.8726503468714266,-0.4311822752385455,0.22926669541232975
|
||||||
|
slow_up,2.412,0.8726503468714266,-0.4311822752385455,0.22926669541232975
|
||||||
|
slow_up,2.462,0.5173848369823976,-0.7555838645467454,0.40175359873597066
|
||||||
|
slow_up,2.512,0.3638628419775382,-0.8224229286365694,0.4372920747977001
|
||||||
|
slow_up,2.563,0.030276956173901977,-0.8825423704391177,0.46925714731322626
|
||||||
|
slow_up,2.613,-0.1400363320223416,-0.8742470628997733,0.46484610219388584
|
||||||
|
slow_up,2.663,-0.3462867098718835,-0.8283184186962228,0.44042492188191973
|
||||||
|
slow_up,2.713,-0.3462867098718835,-0.8283184186962228,0.44042492188191973
|
||||||
|
slow_up,2.763,-0.3462867098718835,-0.8283184186962228,0.44042492188191973
|
||||||
|
slow_up,2.813,-0.3462867098718835,-0.8283184186962228,0.44042492188191973
|
||||||
|
slow_up,2.865,-0.7880047141406812,-0.5436041292865107,0.2890382692909674
|
||||||
|
slow_up,2.915,-0.8808957926333647,-0.41790878582056723,0.22220452122946407
|
||||||
|
slow_up,2.965,-0.9718759547947202,-0.20792912990918935,0.11055589277400987
|
||||||
|
slow_up,3.015,-0.9883794204725632,-0.13421507201771118,0.07136130344662131
|
||||||
|
slow_up,3.068,-0.9939391147607629,-0.09706507750782017,0.05160820551997346
|
||||||
|
slow_up,3.118,-0.9939391147607629,-0.09706507750782017,0.05160820551997346
|
||||||
|
slow_up,3.168,-0.9939391147607629,-0.09706507750782017,0.05160820551997346
|
||||||
|
slow_up,3.221,-0.9031886181841449,0.3789988448497372,-0.20151971512777545
|
||||||
|
slow_up,3.271,-0.7650423133942607,0.568599632262469,-0.3023321301273535
|
||||||
|
slow_up,3.321,-0.6443448039857576,0.6752201347722225,-0.3590230398940119
|
||||||
|
slow_up,3.372,-0.5046723416544423,0.7622574756233951,-0.4053015771314876
|
||||||
|
slow_up,3.422,-0.35003973199079835,0.8270871530148888,-0.43977156268400996
|
||||||
|
slow_up,3.472,-0.35003973199079835,0.8270871530148888,-0.43977156268400996
|
||||||
|
slow_up,3.522,-0.35003973199079835,0.8270871530148888,-0.43977156268400996
|
||||||
|
slow_up,3.572,0.028648741414159226,0.8825848569956232,-0.46927946877889304
|
||||||
|
slow_up,3.623,0.11439877296310579,0.8771507294215819,-0.4663898783418468
|
||||||
|
slow_up,3.7,0.36444888629399075,0.8222214906436482,-0.43718283315199696
|
||||||
|
slow_up,3.75,0.6581699845647005,0.6647445562902361,-0.35345006196151546
|
||||||
|
slow_up,3.8,0.7499137882773798,0.5841017515611069,-0.3105711737665239
|
||||||
|
slow_up,3.85,0.7499137882773798,0.5841017515611069,-0.3105711737665239
|
||||||
|
slow_up,3.901,0.7499137882773798,0.5841017515611069,-0.3105711737665239
|
||||||
|
slow_up,3.951,0.944853713737145,0.28915970744475394,-0.15374694542523298
|
||||||
|
slow_up,4.001,0.987073460765884,0.1415095385608459,-0.07523984016435208
|
||||||
|
slow_up,4.051,0.9952287934257223,-0.0861470572830881,0.04580756769186928
|
||||||
|
slow_up,4.101,0.9831485410797727,-0.1614092230539248,0.08582545593145892
|
||||||
|
slow_up,4.151,0.9514851776842375,-0.2716770827188241,0.14445594266967454
|
||||||
|
slow_up,4.202,0.9514851776842375,-0.2716770827188241,0.14445594266967454
|
||||||
|
slow_up,4.252,0.9514851776842375,-0.2716770827188241,0.14445594266967454
|
||||||
|
slow_up,4.302,0.817478280706118,-0.5085408943702865,0.2703986304085845
|
||||||
|
slow_up,4.352,0.6109722822106246,-0.6989862373662259,0.37165993911497514
|
||||||
|
slow_up,4.404,0.4672943504185334,-0.7806146992377567,0.4150622620774715
|
||||||
|
slow_up,4.454,0.22797412062338523,-0.859696462259006,0.45711026361846624
|
||||||
|
slow_up,4.504,0.1019805158473573,-0.8783436551347776,0.4670250505829271
|
||||||
|
slow_up,4.556,0.1019805158473573,-0.8783436551347776,0.4670250505829271
|
||||||
|
slow_up,4.606,0.1019805158473573,-0.8783436551347776,0.4670250505829271
|
||||||
|
slow_up,4.656,-0.3183559817455473,-0.8370088449547444,0.4450456856934504
|
||||||
|
slow_up,4.706,-0.47435305110652926,-0.7772894490363829,0.41329202184731645
|
||||||
|
slow_up,4.757,-0.6812740324869003,-0.6463430266112673,0.34366609464715075
|
||||||
|
slow_up,4.807,-0.7410175281701447,-0.5928870382326016,0.3152427363800513
|
||||||
|
slow_up,4.857,-0.7954006377318663,-0.5351408051556996,0.28453847569889373
|
||||||
|
slow_up,4.907,-0.7954006377318663,-0.5351408051556996,0.28453847569889373
|
||||||
|
slow_up,4.957,-0.9382737590874874,-0.3054064703788552,0.16238608579113264
|
||||||
|
slow_up,5.01,-0.9746451076223235,-0.19756585392545004,0.10504593067119374
|
||||||
|
slow_up,5.06,-0.9995555377864727,0.026321162775145374,-0.01399725939459622
|
||||||
|
slow_up,5.11,-0.9933899075837224,0.10135166986621261,-0.05389184099781622
|
||||||
|
slow_up,5.16,-0.9595584087348238,0.24855720515081176,-0.13216268760096483
|
||||||
|
slow_up,5.21,-0.9595584087348238,0.24855720515081176,-0.13216268760096483
|
||||||
|
slow_up,5.26,-0.9595584087348238,0.24855720515081176,-0.13216268760096483
|
||||||
|
slow_up,5.31,-0.9595584087348238,0.24855720515081176,-0.13216268760096483
|
||||||
|
slow_up,5.361,-0.6344321026557155,0.682498725142766,-0.3628930934839445
|
||||||
|
slow_up,5.411,-0.4933419890705726,0.7680182893224405,-0.4083645296620692
|
||||||
|
slow_up,5.461,-0.17152978632357008,0.8698608835422476,-0.4625144059236326
|
||||||
|
slow_up,5.514,-0.1291155327559682,0.8755564233177349,-0.46554283238838295
|
||||||
|
slow_up,5.6,-0.1291155327559682,0.8755564233177349,-0.46554283238838295
|
||||||
|
slow_up,5.65,0.21338902235490834,0.8626108712472731,-0.4586584894498703
|
||||||
|
slow_up,5.7,0.2968244767769392,0.8431549337904639,-0.44831349255949776
|
||||||
|
slow_up,5.75,0.5679548809958221,0.7267188547019362,-0.38640258717266307
|
||||||
|
slow_up,5.801,0.7011935122846394,0.629516423465519,-0.33471888341877687
|
||||||
|
slow_up,5.851,0.7601848090823583,0.5736576506187725,-0.30501796000722453
|
||||||
|
slow_up,5.901,0.7601848090823583,0.5736576506187725,-0.30501796000722453
|
||||||
|
slow_up,5.952,0.919381823157543,0.34732255587449573,-0.18467296886204015
|
||||||
|
fast_up,0.0,0.7436855448063273,-0.5902756462634178,0.3138574069134272
|
||||||
|
fast_up,0.05,0.7436855448063273,-0.5902756462634178,0.3138574069134272
|
||||||
|
fast_up,0.1,0.7436855448063273,-0.5902756462634178,0.3138574069134272
|
||||||
|
fast_up,0.151,0.7415339496885803,-0.5923820730917216,0.3149775879944604
|
||||||
|
fast_up,0.201,0.7251426517885042,-0.6079954954680392,0.32327946431487065
|
||||||
|
fast_up,0.251,0.6911707438303796,-0.6380976912929389,0.3392850412847302
|
||||||
|
fast_up,0.301,0.6755171522407909,-0.6510353167218098,0.34616411340493514
|
||||||
|
fast_up,0.352,0.657506379493412,-0.6652549837006473,0.353724705932335
|
||||||
|
fast_up,0.402,0.657506379493412,-0.6652549837006473,0.353724705932335
|
||||||
|
fast_up,0.452,0.657506379493412,-0.6652549837006473,0.353724705932335
|
||||||
|
fast_up,0.502,0.5133602385345539,-0.7577210603341615,0.40288963776426395
|
||||||
|
fast_up,0.552,0.43935111799574095,-0.7931645569110259,0.42173520220160454
|
||||||
|
fast_up,0.602,0.3981844308412644,-0.8099317212166465,0.43065039881864586
|
||||||
|
fast_up,0.652,0.2686492856912895,-0.8504879652558426,0.4522143100926115
|
||||||
|
fast_up,0.702,0.24641792365539766,-0.8557199718773686,0.4549961940846956
|
||||||
|
fast_up,0.752,0.24641792365539766,-0.8557199718773686,0.4549961940846956
|
||||||
|
fast_up,0.803,0.24641792365539766,-0.8557199718773686,0.4549961940846956
|
||||||
|
fast_up,0.853,0.02057293045563342,-0.8827601620250191,0.4693732532580332
|
||||||
|
fast_up,0.903,-0.07422876549978216,-0.8805113066433957,0.468177241272489
|
||||||
|
fast_up,0.953,-0.21516179433137206,-0.8622672317493021,0.4584764152183838
|
||||||
|
fast_up,1.003,-0.2615988381204001,-0.8522001917503188,0.4531234722178677
|
||||||
|
fast_up,1.053,-0.3303372482550225,-0.8333813503635584,0.4431171710524334
|
||||||
|
fast_up,1.104,-0.3303372482550225,-0.8333813503635584,0.4431171710524334
|
||||||
|
fast_up,1.154,-0.3303372482550225,-0.8333813503635584,0.4431171710524334
|
||||||
|
fast_up,1.204,-0.5438623258853152,-0.7409471258505598,0.39396843423859473
|
||||||
|
fast_up,1.254,-0.6459092452751304,-0.6740549185668148,0.3584009118626741
|
||||||
|
fast_up,1.305,-0.7188503244392938,-0.6137944456673244,0.32635960154630667
|
||||||
|
fast_up,1.355,-0.8147838758289627,-0.5119023505212549,0.2721823271631494
|
||||||
|
fast_up,1.405,-0.8290800352983082,-0.4936828909103429,0.26249475859940974
|
||||||
|
fast_up,1.455,-0.8290800352983082,-0.4936828909103429,0.26249475859940974
|
||||||
|
fast_up,1.505,-0.8290800352983082,-0.4936828909103429,0.26249475859940974
|
||||||
|
fast_up,1.555,-0.9420068922851647,-0.2963122038659241,0.15755028634491672
|
||||||
|
fast_up,1.606,-0.9590164600201834,-0.2501842140742355,0.1330236386452166
|
||||||
|
fast_up,1.656,-0.9924115082243777,-0.10856893811461031,0.05772507271958899
|
||||||
|
fast_up,1.706,-0.9999445866713543,0.009294093939699495,-0.004944027153488152
|
||||||
|
fast_up,1.757,-0.9958913420586946,0.079955429596009,-0.04251545707915836
|
||||||
|
fast_up,1.807,-0.9958913420586946,0.079955429596009,-0.04251545707915836
|
||||||
|
fast_up,1.858,-0.9958913420586946,0.079955429596009,-0.04251545707915836
|
||||||
|
fast_up,1.908,-0.9958913420586946,0.079955429596009,-0.04251545707915836
|
||||||
|
fast_up,1.959,-0.9150231402146553,0.35618113505987486,-0.1893875706036974
|
||||||
|
fast_up,2.009,-0.8604916235298544,0.4498294242203849,-0.23918121778373866
|
||||||
|
fast_up,2.059,-0.7569777758441463,0.5769527254909279,-0.3067738571434005
|
||||||
|
fast_up,2.11,-0.6531020844533343,0.6686284965867637,-0.35551877704958706
|
||||||
|
fast_up,2.16,-0.5843458023963333,0.7165152052928653,-0.38098024070272796
|
||||||
|
fast_up,2.21,-0.5843458023963333,0.7165152052928653,-0.38098024070272796
|
||||||
|
fast_up,2.287,-0.5843458023963333,0.7165152052928653,-0.38098024070272796
|
||||||
|
fast_up,2.337,-0.29759691186014037,0.8429418991475414,-0.44820199989830933
|
||||||
|
fast_up,2.387,-0.17288959048961605,0.8696507226880431,-0.46240329802943353
|
||||||
|
fast_up,2.439,0.0528426867196658,0.8817134989386609,-0.46881654860893207
|
||||||
|
fast_up,2.489,0.11750941653421512,0.8768299049337306,-0.4662197495169991
|
||||||
|
fast_up,2.54,0.3387106575899876,0.8307569097795758,-0.4417216853273653
|
||||||
|
fast_up,2.59,0.3387106575899876,0.8307569097795758,-0.4417216853273653
|
||||||
|
fast_up,2.641,0.3387106575899876,0.8307569097795758,-0.4417216853273653
|
||||||
|
fast_up,2.692,0.3387106575899876,0.8307569097795758,-0.4417216853273653
|
||||||
|
fast_up,2.742,0.6725788995836892,0.6534039040384242,-0.3474204398450665
|
||||||
|
fast_up,2.792,0.7637787136075531,0.569923763588385,-0.30303296905987287
|
||||||
|
fast_up,2.842,0.8420851195741881,0.4762135465397938,-0.25320606130919715
|
||||||
|
fast_up,2.892,0.9059572778692444,0.3738133295921229,-0.19875866093078726
|
||||||
|
fast_up,2.944,0.9320625853533521,0.319890207637745,-0.1700870131488755
|
||||||
|
fast_up,2.994,0.9320625853533521,0.319890207637745,-0.1700870131488755
|
||||||
|
fast_up,3.044,0.9320625853533521,0.319890207637745,-0.1700870131488755
|
||||||
|
fast_up,3.094,0.9995868168775316,-0.025378198850278165,0.013496019700636873
|
||||||
|
fast_up,3.145,0.9737572335070697,-0.2009484251765163,0.1068484001365312
|
||||||
|
fast_up,3.195,0.9343593809559442,-0.3146215313212742,0.16728968661779853
|
||||||
|
fast_up,3.246,0.8432265639718923,-0.47463486271897926,0.2523701822797059
|
||||||
|
fast_up,3.296,0.8245274704190423,-0.4995901221141962,0.2656391545128427
|
||||||
|
fast_up,3.346,0.8245274704190423,-0.4995901221141962,0.2656391545128427
|
||||||
|
fast_up,3.396,0.8245274704190423,-0.4995901221141962,0.2656391545128427
|
||||||
|
fast_up,3.446,0.8245274704190423,-0.4995901221141962,0.2656391545128427
|
||||||
|
fast_up,3.496,0.560559310620797,-0.7311805980446815,0.38877781870801065
|
||||||
|
fast_up,3.546,0.3167082774612079,-0.8374953553597589,0.44530595857049304
|
||||||
|
fast_up,3.598,0.18394843471814523,-0.8678802595262894,0.46146162190297557
|
||||||
|
fast_up,3.648,-0.0905296924928885,-0.8793215748514271,0.46754458907996027
|
||||||
|
fast_up,3.698,-0.15903691458437788,-0.8717096400615488,0.46349710163413776
|
||||||
|
fast_up,3.749,-0.2604128505118988,-0.8524833003013681,0.45327405616862193
|
||||||
|
fast_up,3.799,-0.2604128505118988,-0.8524833003013681,0.45327405616862193
|
||||||
|
fast_up,3.849,-0.484042556809481,-0.7726183440706232,0.4108085899818897
|
||||||
|
fast_up,3.9,-0.6263636201595283,-0.6882851615010694,0.3659674190390409
|
||||||
|
fast_up,3.95,-0.7271348616896539,-0.6061389762113589,0.32228936444290796
|
||||||
|
fast_up,4.0,-0.8335559354602529,-0.48777154516490967,0.25935192728495254
|
||||||
|
fast_up,4.05,-0.9152025193193423,-0.3558231540800539,0.18919363533705685
|
||||||
|
fast_up,4.101,-0.9152025193193423,-0.3558231540800539,0.18919363533705685
|
||||||
|
fast_up,4.151,-0.9152025193193423,-0.3558231540800539,0.18919363533705685
|
||||||
|
fast_up,4.201,-0.9152025193193423,-0.3558231540800539,0.18919363533705685
|
||||||
|
fast_up,4.251,-0.9999653794523607,-0.007347658786176997,0.0039053562011961474
|
||||||
|
fast_up,4.301,-0.9982722741623554,0.05187931833534815,-0.02758628223916066
|
||||||
|
fast_up,4.357,-0.9473362244513863,0.28275503128264595,-0.1503451699474996
|
||||||
|
fast_up,4.407,-0.8965970539364008,0.39101017281360906,-0.20790567002570753
|
||||||
|
fast_up,4.457,-0.8965970539364008,0.39101017281360906,-0.20790567002570753
|
||||||
|
fast_up,4.507,-0.8965970539364008,0.39101017281360906,-0.20790567002570753
|
||||||
|
fast_up,4.557,-0.7494544996760373,0.5845598923018723,-0.31081776851937554
|
||||||
|
fast_up,4.608,-0.6811810712116455,0.6464184443030486,-0.3437085147152765
|
||||||
|
fast_up,4.69,-0.5260437628224534,0.750908769275774,-0.39926680280275867
|
||||||
|
fast_up,4.74,-0.3515317530989304,0.8265937289313039,-0.4395090827896901
|
||||||
|
fast_up,4.79,-0.25921047650601087,0.8527686685878513,-0.45342642925223303
|
||||||
|
fast_up,4.841,-0.25921047650601087,0.8527686685878513,-0.45342642925223303
|
||||||
|
fast_up,4.891,-0.25921047650601087,0.8527686685878513,-0.45342642925223303
|
||||||
|
fast_up,4.941,0.029032410272141315,0.8825750679575304,-0.4692742999286777
|
||||||
|
fast_up,4.991,0.12468465513391183,0.87605725215134,-0.4658083594432166
|
||||||
|
fast_up,5.042,0.312103840700244,0.8388425601545466,-0.4460205733971502
|
||||||
|
fast_up,5.092,0.4601026048132257,0.7839390238700766,-0.41682754215348583
|
||||||
|
fast_up,5.142,0.5962937494197067,0.7088008659157505,-0.3768754394757906
|
||||||
|
fast_up,5.192,0.5962937494197067,0.7088008659157505,-0.3768754394757906
|
||||||
|
fast_up,5.242,0.5962937494197067,0.7088008659157505,-0.3768754394757906
|
||||||
|
fast_up,5.293,0.5962937494197067,0.7088008659157505,-0.3768754394757906
|
||||||
|
fast_up,5.343,0.8713288736836602,0.43326257799090145,-0.2303682538846054
|
||||||
|
fast_up,5.395,0.9274080640937924,0.33026837460772646,-0.17560490707202564
|
||||||
|
fast_up,5.445,0.9924918410489542,0.1079949995732303,-0.05741973108989097
|
||||||
|
fast_up,5.495,0.9983717965936116,0.050365731961324836,-0.026777767092200574
|
||||||
|
fast_up,5.546,0.9999629087894729,-0.007603720153555103,0.004045304082834395
|
||||||
|
fast_up,5.596,0.9999629087894729,-0.007603720153555103,0.004045304082834395
|
||||||
|
fast_up,5.649,0.9999629087894729,-0.007603720153555103,0.004045304082834395
|
||||||
|
fast_up,5.699,0.9319867371924816,-0.3200607761380319,0.17018173014525656
|
||||||
|
fast_up,5.749,0.8597874640302131,-0.4508780240427165,0.2397384494231805
|
||||||
|
fast_up,5.8,0.7409676384604902,-0.5929343161341589,0.3152710825699075
|
||||||
|
fast_up,5.85,0.534386630982945,-0.7463020032608736,0.39681765151704723
|
||||||
|
fast_up,5.9,0.4450856110633426,-0.7906682356171415,0.42040758795536404
|
||||||
|
fast_up,5.954,0.35082136337402364,-0.8268289378421346,0.4396342554297136
|
||||||
|
158
docs/re/captures/turn-law-roll.csv
Normal file
158
docs/re/captures/turn-law-roll.csv
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
phase,t,ux,uy,uz
|
||||||
|
slow_roll,0.0,5.364417883966259e-07,0.8829469440778077,-0.4694727829633716
|
||||||
|
slow_roll,0.05,5.364417883966259e-07,0.8829469440778077,-0.4694727829633716
|
||||||
|
slow_roll,0.128,0.0003251433520745835,0.907077055804204,-0.4209644986401793
|
||||||
|
slow_roll,0.178,0.0034536272684164153,0.9557110180986144,-0.2942864630654985
|
||||||
|
slow_roll,0.229,0.004462063366683055,0.9639291880290134,-0.2661214205137173
|
||||||
|
slow_roll,0.279,0.004462063366683055,0.9639291880290134,-0.2661214205137173
|
||||||
|
slow_roll,0.329,0.004462063366683055,0.9639291880290134,-0.2661214205137173
|
||||||
|
slow_roll,0.38,0.03156978751811861,0.9865808845796968,0.16019209311949129
|
||||||
|
slow_roll,0.43,0.04618248291021098,0.9261940016468521,0.37420829705611663
|
||||||
|
slow_roll,0.48,0.07209846660150727,0.7068731466017404,0.7036562837970437
|
||||||
|
slow_roll,0.531,0.07884267175871004,0.6220030945016755,0.7790352903048027
|
||||||
|
slow_roll,0.581,0.09389665181370353,0.3775338908873316,0.9212228720617223
|
||||||
|
slow_roll,0.631,0.09389665181370353,0.3775338908873316,0.9212228720617223
|
||||||
|
slow_roll,0.681,0.09389665181370353,0.3775338908873316,0.9212228720617223
|
||||||
|
slow_roll,0.731,0.09389665181370353,0.3775338908873316,0.9212228720617223
|
||||||
|
slow_roll,0.782,0.11626024739570803,-0.2910297934919785,0.94962372241615
|
||||||
|
slow_roll,0.832,0.11331737850132788,-0.5957757659732928,0.7951166005112225
|
||||||
|
slow_roll,0.882,0.10258919760138681,-0.8301250953132597,0.5480581927739564
|
||||||
|
slow_roll,0.932,0.09172466968431676,-0.9336924862997908,0.3461284819234293
|
||||||
|
slow_roll,0.982,0.08855641690308262,-0.9521140126478002,0.2926374342851443
|
||||||
|
slow_roll,1.032,0.08855641690308262,-0.9521140126478002,0.2926374342851443
|
||||||
|
slow_roll,1.083,0.08855641690308262,-0.9521140126478002,0.2926374342851443
|
||||||
|
slow_roll,1.133,0.06314271520385657,-0.9856858587151895,-0.15632141710458003
|
||||||
|
slow_roll,1.183,0.03871241049647199,-0.8771323194061645,-0.4786859550130072
|
||||||
|
slow_roll,1.233,0.02278590617030732,-0.7469560671312695,-0.6644828336802873
|
||||||
|
slow_roll,1.283,0.0014766457114187138,-0.48236413746616297,-0.8759695533544346
|
||||||
|
slow_roll,1.333,-0.009957047288894565,-0.2732769792151122,-0.9618838546520833
|
||||||
|
slow_roll,1.383,-0.014615090702282351,-0.16289975489324235,-0.986534372933597
|
||||||
|
slow_roll,1.434,-0.014615090702282351,-0.16289975489324235,-0.986534372933597
|
||||||
|
slow_roll,1.484,-0.014615090702282351,-0.16289975489324235,-0.986534372933597
|
||||||
|
slow_roll,1.534,-0.021590294173402004,0.28521754629199986,-0.958219604519067
|
||||||
|
slow_roll,1.585,-0.018226593529973842,0.6796250267681222,-0.733333221856696
|
||||||
|
slow_roll,1.638,-0.015215515922222613,0.7588021671351416,-0.6511434244667093
|
||||||
|
slow_roll,1.688,0.007627889727199663,0.9806664264156518,-0.19553816865119905
|
||||||
|
slow_roll,1.738,0.02129921910039987,0.999324814604695,0.02993757139457134
|
||||||
|
slow_roll,1.791,0.024856976638209058,0.9959630755215296,0.0862535965053266
|
||||||
|
slow_roll,1.841,0.024856976638209058,0.9959630755215296,0.0862535965053266
|
||||||
|
slow_roll,1.891,0.024856976638209058,0.9959630755215296,0.0862535965053266
|
||||||
|
slow_roll,1.942,0.07458550391003292,0.7172507675680203,0.6928119073959196
|
||||||
|
slow_roll,1.992,0.09368970595946137,0.44068963461450666,0.8927569013682068
|
||||||
|
slow_roll,2.042,0.09891259247091141,0.3354630624781779,0.9368462161760838
|
||||||
|
slow_roll,2.092,0.11022117626527345,-7.212161947528295e-06,0.9939070843145672
|
||||||
|
slow_roll,2.142,0.1130640269505834,-0.16963542419702776,0.9789996673478557
|
||||||
|
slow_roll,2.192,0.1130640269505834,-0.16963542419702776,0.9789996673478557
|
||||||
|
slow_roll,2.242,0.1130640269505834,-0.16963542419702776,0.9789996673478557
|
||||||
|
slow_roll,2.293,0.11471063275557963,-0.5849230213172406,0.8029361928982436
|
||||||
|
slow_roll,2.343,0.11019948262240672,-0.7142827003817095,0.6911268320396532
|
||||||
|
slow_roll,2.426,0.10141341251295233,-0.8534859365604823,0.5111526932883697
|
||||||
|
slow_roll,2.477,0.07595491159352484,-0.9936428121723654,0.08309520577634615
|
||||||
|
slow_roll,2.527,0.06448994421768593,-0.9941772535855863,-0.08632864847674089
|
||||||
|
slow_roll,2.577,0.06448994421768593,-0.9941772535855863,-0.08632864847674089
|
||||||
|
slow_roll,2.627,0.06448994421768593,-0.9941772535855863,-0.08632864847674089
|
||||||
|
slow_roll,2.678,0.06448994421768593,-0.9941772535855863,-0.08632864847674089
|
||||||
|
slow_roll,2.728,0.028817026488532304,-0.7934000725072533,-0.6080180128333736
|
||||||
|
slow_roll,2.779,0.0032352514477921655,-0.4937015107403189,-0.8696254086908893
|
||||||
|
slow_roll,2.829,-0.0030165019643082686,-0.39140603848225103,-0.9202131349614229
|
||||||
|
slow_roll,2.879,-0.02194342210848925,0.11072398209318217,-0.9936089200563758
|
||||||
|
slow_roll,2.929,-0.024032596122042907,0.22242838263297865,-0.9746527837763107
|
||||||
|
slow_roll,2.979,-0.024032596122042907,0.22242838263297865,-0.9746527837763107
|
||||||
|
slow_roll,3.03,-0.024032596122042907,0.22242838263297865,-0.9746527837763107
|
||||||
|
slow_roll,3.08,-0.016998113363041106,0.6714604955713218,-0.7408453732252177
|
||||||
|
slow_roll,3.132,-0.01247060336728103,0.7881419301563627,-0.6153671928052867
|
||||||
|
slow_roll,3.182,0.0017347782937767963,0.9491205263327873,-0.31490826765590657
|
||||||
|
slow_roll,3.232,0.007717609638179204,0.97873380750562,-0.20498920104977397
|
||||||
|
slow_roll,3.282,0.03587973910508903,0.9687888154822927,0.24527713981977012
|
||||||
|
slow_roll,3.334,0.03587973910508903,0.9687888154822927,0.24527713981977012
|
||||||
|
slow_roll,3.384,0.03587973910508903,0.9687888154822927,0.24527713981977012
|
||||||
|
slow_roll,3.434,0.03587973910508903,0.9687888154822927,0.24527713981977012
|
||||||
|
slow_roll,3.486,0.0773596494901135,0.6831469198642757,0.726171997883917
|
||||||
|
slow_roll,3.536,0.08396325243571906,0.5951635161658628,0.7992062069738338
|
||||||
|
slow_roll,3.586,0.10665408569280613,0.12264052944652912,0.9867037075749268
|
||||||
|
slow_roll,3.637,0.10964775782794625,0.008981705283138778,0.9939299261887182
|
||||||
|
slow_roll,3.687,0.11339630501426597,-0.27174721513415995,0.955664548403853
|
||||||
|
slow_roll,3.737,0.11339630501426597,-0.27174721513415995,0.955664548403853
|
||||||
|
slow_roll,3.787,0.11339630501426597,-0.27174721513415995,0.955664548403853
|
||||||
|
slow_roll,3.837,0.11339630501426597,-0.27174721513415995,0.955664548403853
|
||||||
|
slow_roll,3.888,0.10609239313921122,-0.7832115089350282,0.6126370347846358
|
||||||
|
slow_roll,3.938,0.08995628366017921,-0.9453017089776493,0.3135483153103919
|
||||||
|
slow_roll,3.988,0.06882244451400554,-0.9974002650242589,-0.021358428328288378
|
||||||
|
fast_roll,0.0,-0.008855284367132087,-0.1892332671169339,-0.9818922316400249
|
||||||
|
fast_roll,0.07,-0.009079338778959034,-0.18350878730578224,-0.9829761393792313
|
||||||
|
fast_roll,0.12,-0.010844887563568405,-0.13094766470039781,-0.9913299639994979
|
||||||
|
fast_roll,0.171,-0.011626663266558038,-0.1013832901335635,-0.9947794977697217
|
||||||
|
fast_roll,0.221,-0.013588458181442458,0.11000248694105531,-0.9938384208064378
|
||||||
|
fast_roll,0.271,-0.013553649516693318,0.13987046820323737,-0.9900770428150457
|
||||||
|
fast_roll,0.321,-0.013553649516693318,0.13987046820323737,-0.9900770428150457
|
||||||
|
fast_roll,0.371,-0.013553649516693318,0.13987046820323737,-0.9900770428150457
|
||||||
|
fast_roll,0.421,-0.006220758125301114,0.49530507440045424,-0.8686968317206567
|
||||||
|
fast_roll,0.472,-0.003314405697850606,0.5920532974235793,-0.8058919950742387
|
||||||
|
fast_roll,0.522,0.00441828382207292,0.7619502753296359,-0.647620457284326
|
||||||
|
fast_roll,0.574,0.007511079032515748,0.810291021781891,-0.5859795591242294
|
||||||
|
fast_roll,0.624,0.024014725961227404,0.9631712904402981,-0.2678140366160408
|
||||||
|
fast_roll,0.675,0.02597855007862328,0.9728863746848865,-0.22981996625252366
|
||||||
|
fast_roll,0.725,0.02597855007862328,0.9728863746848865,-0.22981996625252366
|
||||||
|
fast_roll,0.776,0.02597855007862328,0.9728863746848865,-0.22981996625252366
|
||||||
|
fast_roll,0.826,0.04868464141203835,0.9861706433133424,0.15842117269332898
|
||||||
|
fast_roll,0.876,0.05286310421905672,0.9703418261427044,0.2358860586180681
|
||||||
|
fast_roll,0.926,0.06484538276965729,0.8874555771771414,0.456308749500427
|
||||||
|
fast_roll,0.977,0.07218322140163734,0.8043338636706839,0.589776752933406
|
||||||
|
fast_roll,1.027,0.08026447949825838,0.6727395105986717,0.7355128579503784
|
||||||
|
fast_roll,1.079,0.08167273377955657,0.6434443447451975,0.761123472093981
|
||||||
|
fast_roll,1.129,0.08167273377955657,0.6434443447451975,0.761123472093981
|
||||||
|
fast_roll,1.179,0.08167273377955657,0.6434443447451975,0.761123472093981
|
||||||
|
fast_roll,1.229,0.09611703670528068,0.26936935196850487,0.9582284004740538
|
||||||
|
fast_roll,1.28,0.09757823976817694,0.15352635522555744,0.9833148760061042
|
||||||
|
fast_roll,1.33,0.09823604865691905,-0.08212983146319404,0.9917683043574758
|
||||||
|
fast_roll,1.38,0.09694679551098685,-0.23748907927294635,0.9665403540805936
|
||||||
|
fast_roll,1.43,0.09341384952042775,-0.4228500863358093,0.9013720969741483
|
||||||
|
fast_roll,1.481,0.0924495732731865,-0.4577981398954497,0.8842363595271753
|
||||||
|
fast_roll,1.567,0.0924495732731865,-0.4577981398954497,0.8842363595271753
|
||||||
|
fast_roll,1.617,0.0924495732731865,-0.4577981398954497,0.8842363595271753
|
||||||
|
fast_roll,1.671,0.07640115459065343,-0.8308754661661121,0.5511885551247062
|
||||||
|
fast_roll,1.721,0.06860250673497353,-0.9076870847962724,0.4140022369066653
|
||||||
|
fast_roll,1.771,0.06444845651060765,-0.9377356503677196,0.3413183945860967
|
||||||
|
fast_roll,1.821,0.04452538840952553,-0.9989901855288692,-0.0060082446668173126
|
||||||
|
fast_roll,1.872,0.03992449458605998,-0.9956634626810288,-0.08402561403566944
|
||||||
|
fast_roll,1.923,0.03992449458605998,-0.9956634626810288,-0.08402561403566944
|
||||||
|
fast_roll,1.973,0.03992449458605998,-0.9956634626810288,-0.08402561403566944
|
||||||
|
fast_roll,2.024,0.022197751797496647,-0.9075294163332098,-0.41940150012254407
|
||||||
|
fast_roll,2.075,0.015937330627194494,-0.8519898088332791,-0.52331574325326
|
||||||
|
fast_roll,2.125,0.004667849544530708,-0.7060150524798743,-0.7081814434539146
|
||||||
|
fast_roll,2.175,0.0013530555546399704,-0.648155304131301,-0.761506973682531
|
||||||
|
fast_roll,2.226,-0.010055305667179194,-0.34305984964047753,-0.9392597246728897
|
||||||
|
fast_roll,2.278,-0.010975597965093486,-0.3059300411291784,-0.9519907279926669
|
||||||
|
fast_roll,2.328,-0.010975597965093486,-0.3059300411291784,-0.9519907279926669
|
||||||
|
fast_roll,2.379,-0.010975597965093486,-0.3059300411291784,-0.9519907279926669
|
||||||
|
fast_roll,2.429,-0.013147653645135052,0.04085678327034154,-0.9990785066572235
|
||||||
|
fast_roll,2.479,-0.013055267066359103,0.15918016034161872,-0.9871632269059877
|
||||||
|
fast_roll,2.568,-0.010483057404651826,0.38589633572112736,-0.922482587144309
|
||||||
|
fast_roll,2.618,-0.0025064649020058844,0.652755248321719,-0.7575647189660735
|
||||||
|
fast_roll,2.669,0.0016507506674964703,0.7373859422292015,-0.6754696493736685
|
||||||
|
fast_roll,2.719,0.0016507506674964703,0.7373859422292015,-0.6754696493736685
|
||||||
|
fast_roll,2.769,0.0016507506674964703,0.7373859422292015,-0.6754696493736685
|
||||||
|
fast_roll,2.82,0.0016507506674964703,0.7373859422292015,-0.6754696493736685
|
||||||
|
fast_roll,2.87,0.023670912467358265,0.9516266261089918,-0.30634368343966173
|
||||||
|
fast_roll,2.92,0.03612722161345726,0.9965580319340878,-0.07461174737365275
|
||||||
|
fast_roll,2.97,0.040383366447819695,0.9991763265386772,0.00398148201251869
|
||||||
|
fast_roll,3.02,0.05312824253858915,0.9699096092023001,0.23759785315065957
|
||||||
|
fast_roll,3.071,0.059284390015703244,0.9348424830246419,0.3500784098352654
|
||||||
|
fast_roll,3.121,0.059284390015703244,0.9348424830246419,0.3500784098352654
|
||||||
|
fast_roll,3.171,0.059284390015703244,0.9348424830246419,0.3500784098352654
|
||||||
|
fast_roll,3.221,0.059284390015703244,0.9348424830246419,0.3500784098352654
|
||||||
|
fast_roll,3.272,0.08072510807136501,0.70137248333348,0.708209076861836
|
||||||
|
fast_roll,3.322,0.08779502096077971,0.5478328579420104,0.8319682650519702
|
||||||
|
fast_roll,3.373,0.08779502096077971,0.5478328579420104,0.8319682650519702
|
||||||
|
fast_roll,3.423,0.09648741582489807,0.18419646700908573,0.9781420347417874
|
||||||
|
fast_roll,3.475,0.09712661424334584,0.10679261118594469,0.9895260274503708
|
||||||
|
fast_roll,3.525,0.09712661424334584,0.10679261118594469,0.9895260274503708
|
||||||
|
fast_roll,3.576,0.09712661424334584,0.10679261118594469,0.9895260274503708
|
||||||
|
fast_roll,3.626,0.09808125521867511,-0.276992602937651,0.9558531086378043
|
||||||
|
fast_roll,3.678,0.09588170136722707,-0.3885191729020873,0.9164385149208886
|
||||||
|
fast_roll,3.728,0.09071503326084339,-0.5619048646134545,0.822212688946248
|
||||||
|
fast_roll,3.78,0.08808219791306586,-0.6251522557051209,0.7755167203855778
|
||||||
|
fast_roll,3.83,0.07489843104312643,-0.8360677205153536,0.5434896427159753
|
||||||
|
fast_roll,3.881,0.0729683550057793,-0.8569144732195361,0.5102677774998492
|
||||||
|
fast_roll,3.931,0.0729683550057793,-0.8569144732195361,0.5102677774998492
|
||||||
|
fast_roll,3.982,0.0729683550057793,-0.8569144732195361,0.5102677774998492
|
||||||
|
397
docs/re/captures/turn-law-settled.csv
Normal file
397
docs/re/captures/turn-law-settled.csv
Normal file
@@ -0,0 +1,397 @@
|
|||||||
|
phase,t,ax,ay,az
|
||||||
|
pitch_slow,0.0,-0.9999999999979217,-5.364418989006872e-07,-1.9669536293025197e-06
|
||||||
|
pitch_slow,0.05,-0.9999999999976801,-5.364418029772711e-07,-2.0861625671338324e-06
|
||||||
|
pitch_slow,0.101,-0.9999946097522772,-0.002899959954216824,0.0015397073276159146
|
||||||
|
pitch_slow,0.151,-0.9996914710730174,-0.02193220056967232,0.011659384290695667
|
||||||
|
pitch_slow,0.201,-0.9990433177471238,-0.03861357394968149,0.02052903240905178
|
||||||
|
pitch_slow,0.251,-0.9955393575780669,-0.08330440446892036,0.04429180182752193
|
||||||
|
pitch_slow,0.301,-0.9945412469804451,-0.09213126987556873,0.048985070845069034
|
||||||
|
pitch_slow,0.352,-0.9945412469804451,-0.09213126987556873,0.048985070845069034
|
||||||
|
pitch_slow,0.402,-0.9945412469804451,-0.09213126987556873,0.048985070845069034
|
||||||
|
pitch_slow,0.452,-0.9665289434485363,-0.2265277037558541,0.120445011965445
|
||||||
|
pitch_slow,0.503,-0.9524349663446977,-0.2690718666714829,0.14306629739354546
|
||||||
|
pitch_slow,0.553,-0.9108739498774162,-0.3643795134075017,0.19374265829606738
|
||||||
|
pitch_slow,0.604,-0.8927282973927168,-0.39785273467789245,0.21154051277148683
|
||||||
|
pitch_slow,0.654,-0.8045973153675007,-0.5243130904039117,0.27878117464152785
|
||||||
|
pitch_slow,0.707,-0.7919632518359564,-0.539100668887106,0.2866438147717345
|
||||||
|
pitch_slow,0.757,-0.7919632518359564,-0.539100668887106,0.2866438147717345
|
||||||
|
pitch_slow,0.807,-0.7919632518359564,-0.539100668887106,0.2866438147717345
|
||||||
|
pitch_slow,0.858,-0.6306143663605143,-0.6852525159721327,0.36435492352044474
|
||||||
|
pitch_slow,0.909,-0.5969978086641158,-0.7083385123283029,0.3766300152706506
|
||||||
|
pitch_slow,0.989,-0.4901269140966694,-0.7696220973259926,0.40921563433673497
|
||||||
|
pitch_slow,1.039,-0.2959745212014831,-0.8433875991219522,0.4484377776758578
|
||||||
|
pitch_slow,1.089,-0.27580244899421963,-0.8487015247581735,0.45126348290321716
|
||||||
|
pitch_slow,1.139,-0.27580244899421963,-0.8487015247581735,0.45126348290321716
|
||||||
|
pitch_slow,1.189,-0.27580244899421963,-0.8487015247581735,0.45126348290321716
|
||||||
|
pitch_slow,1.24,-0.06819632577165725,-0.8808914329655914,0.4683797011817154
|
||||||
|
pitch_slow,1.291,-0.04700410626905134,-0.8819710505695748,0.46895381430482924
|
||||||
|
pitch_slow,1.341,0.0804919641427089,-0.8800818771721879,0.46794971223575604
|
||||||
|
pitch_slow,1.392,0.12273622707003892,-0.8762710913963212,0.465923591319126
|
||||||
|
pitch_slow,1.443,0.24764949379728085,-0.8554426534039724,0.454848980387031
|
||||||
|
pitch_slow,1.493,0.2680409389698348,-0.850637454777343,0.45229412506254507
|
||||||
|
pitch_slow,1.543,0.2680409389698348,-0.850637454777343,0.45229412506254507
|
||||||
|
pitch_slow,1.593,0.2680409389698348,-0.850637454777343,0.45229412506254507
|
||||||
|
pitch_slow,1.646,0.44568378731971126,-0.790405284398606,0.42026830491379813
|
||||||
|
pitch_slow,1.696,0.5199457201418952,-0.7542121380720035,0.40102431209464473
|
||||||
|
pitch_slow,1.746,0.6404468011624063,-0.6781048415424452,0.36055751102637784
|
||||||
|
pitch_slow,1.796,0.7030142148952,-0.6279298245105502,0.33387894384856803
|
||||||
|
pitch_slow,1.848,0.7323232029501937,-0.6012483512095225,0.3196922685780814
|
||||||
|
pitch_slow,1.898,0.7323232029501937,-0.6012483512095225,0.3196922685780814
|
||||||
|
pitch_slow,1.948,0.7323232029501937,-0.6012483512095225,0.3196922685780814
|
||||||
|
pitch_slow,1.998,0.7323232029501937,-0.6012483512095225,0.3196922685780814
|
||||||
|
pitch_slow,2.048,0.8897380340111771,-0.4030392516581421,0.21430257221221208
|
||||||
|
pitch_slow,2.099,0.933233802564986,-0.31721510699436495,0.1686690417493688
|
||||||
|
pitch_slow,2.149,0.9603861359896795,-0.24605226051444695,0.1308310165616077
|
||||||
|
pitch_slow,2.199,0.980573947813806,-0.17318882586052553,0.09208888893835017
|
||||||
|
pitch_slow,2.249,0.9958260680318584,-0.08058666195316148,0.042851279367782436
|
||||||
|
pitch_slow,2.299,0.9958260680318584,-0.08058666195316148,0.042851279367782436
|
||||||
|
pitch_slow,2.349,0.9958260680318584,-0.08058666195316148,0.042851279367782436
|
||||||
|
pitch_slow,2.399,0.9958260680318584,-0.08058666195316148,0.042851279367782436
|
||||||
|
pitch_slow,2.449,0.9867075939747381,0.14348496871944313,-0.07629015496224935
|
||||||
|
pitch_slow,2.502,0.9788907200689967,0.18046150766335733,-0.09595104175916487
|
||||||
|
pitch_slow,2.552,0.9376915842954128,0.30679733050810604,-0.16312538347743036
|
||||||
|
pitch_slow,2.602,0.8955218717201378,0.3929277552667634,-0.208921890695742
|
||||||
|
pitch_slow,2.652,0.8074786582920991,0.5208483459556673,-0.2769390129939024
|
||||||
|
pitch_slow,2.705,0.7948361291190185,0.5357942751067662,-0.2848859817714975
|
||||||
|
pitch_slow,2.755,0.7948361291190185,0.5357942751067662,-0.2848859817714975
|
||||||
|
pitch_slow,2.805,0.7948361291190185,0.5357942751067662,-0.2848859817714975
|
||||||
|
pitch_slow,2.855,0.7948361291190185,0.5357942751067662,-0.2848859817714975
|
||||||
|
pitch_slow,2.907,0.5994415250023212,0.706727700968031,-0.3757736217290043
|
||||||
|
pitch_slow,2.957,0.49283526451379894,0.7682725100239381,-0.408498166939745
|
||||||
|
pitch_slow,3.007,0.39786304462993477,0.810055404003031,-0.430714801421178
|
||||||
|
pitch_slow,3.089,0.318739170854854,0.8368948941205249,-0.4449857044420142
|
||||||
|
pitch_slow,3.139,0.17535239247571457,0.8692665281025396,-0.46219827084661375
|
||||||
|
pitch_slow,3.189,0.17535239247571457,0.8692665281025396,-0.46219827084661375
|
||||||
|
pitch_slow,3.24,0.17535239247571457,0.8692665281025396,-0.46219827084661375
|
||||||
|
pitch_slow,3.29,0.17535239247571457,0.8692665281025396,-0.46219827084661375
|
||||||
|
pitch_slow,3.341,-0.09908743529417109,0.8786016525498629,-0.4671625159443696
|
||||||
|
pitch_slow,3.391,-0.14138414029685945,0.8740774161778089,-0.464757135932783
|
||||||
|
pitch_slow,3.441,-0.26633940859742644,0.8510540435243772,-0.45251556263711057
|
||||||
|
pitch_slow,3.491,-0.30709438990594357,0.8402818955853142,-0.44678783739023986
|
||||||
|
pitch_slow,3.541,-0.46368621578966956,0.7822901813508235,-0.41595332123779405
|
||||||
|
pitch_slow,3.591,-0.46368621578966956,0.7822901813508235,-0.41595332123779405
|
||||||
|
pitch_slow,3.642,-0.46368621578966956,0.7822901813508235,-0.41595332123779405
|
||||||
|
pitch_slow,3.695,-0.46368621578966956,0.7822901813508235,-0.41595332123779405
|
||||||
|
pitch_slow,3.745,-0.6562113189584854,0.6662510666680376,-0.3542544580304771
|
||||||
|
pitch_slow,3.796,-0.7469125955220236,0.5870904643133257,-0.31216399754442814
|
||||||
|
pitch_slow,3.846,-0.8253836786665388,0.49848665361931915,-0.2650525215015027
|
||||||
|
pitch_slow,3.899,-0.8702852029309188,0.43489315599579026,-0.23123928824382511
|
||||||
|
pitch_slow,3.949,-0.9257474045462728,0.3338789511759494,-0.17752912137868407
|
||||||
|
pitch_slow,3.999,-0.9257474045462728,0.3338789511759494,-0.17752912137868407
|
||||||
|
pitch_mid,0.0,-0.9816648888232054,-0.16830355359423707,0.08948720522664506
|
||||||
|
pitch_mid,0.05,-0.9810975290596479,-0.17086321869736415,0.09084821940704273
|
||||||
|
pitch_mid,0.1,-0.9789055744250569,-0.18039841850141844,0.09591812634604903
|
||||||
|
pitch_mid,0.151,-0.9720546521805088,-0.2072765936920349,0.11020964967577598
|
||||||
|
pitch_mid,0.201,-0.9685934206365122,-0.21954537835213525,0.11673308161733022
|
||||||
|
pitch_mid,0.251,-0.9621063375474502,-0.24075780571714026,0.12801200817618447
|
||||||
|
pitch_mid,0.301,-0.9621063375474502,-0.24075780571714026,0.12801200817618447
|
||||||
|
pitch_mid,0.352,-0.9621063375474502,-0.24075780571714026,0.12801200817618447
|
||||||
|
pitch_mid,0.403,-0.9299022445524333,-0.3247544249367914,0.17267419917382107
|
||||||
|
pitch_mid,0.453,-0.8941007235504668,-0.39544242183534284,0.21025980871181893
|
||||||
|
pitch_mid,0.503,-0.878818394880348,-0.42130434615048,0.22401088530391827
|
||||||
|
pitch_mid,0.553,-0.8210382535878776,-0.5040511900472064,0.26800855202280954
|
||||||
|
pitch_mid,0.603,-0.7987442841989482,-0.531243736804092,0.2824670964306011
|
||||||
|
pitch_mid,0.653,-0.7987442841989482,-0.531243736804092,0.2824670964306011
|
||||||
|
pitch_mid,0.704,-0.7987442841989482,-0.531243736804092,0.2824670964306011
|
||||||
|
pitch_mid,0.754,-0.7987442841989482,-0.531243736804092,0.2824670964306011
|
||||||
|
pitch_mid,0.804,-0.6703148659769064,-0.6552147427406548,0.3483843012330774
|
||||||
|
pitch_mid,0.855,-0.5483367797483034,-0.7383712411310113,0.3925999060696661
|
||||||
|
pitch_mid,0.905,-0.5483367797483034,-0.7383712411310113,0.3925999060696661
|
||||||
|
pitch_mid,0.955,-0.4487495579282873,-0.7890522755928274,0.4195477811178932
|
||||||
|
pitch_mid,1.007,-0.3966576493503013,-0.8105158880387838,0.43096021214097596
|
||||||
|
pitch_mid,1.058,-0.3966576493503013,-0.8105158880387838,0.43096021214097596
|
||||||
|
pitch_mid,1.108,-0.3966576493503013,-0.8105158880387838,0.43096021214097596
|
||||||
|
pitch_mid,1.158,-0.2145711905918272,-0.8623815090531974,0.45853826122924113
|
||||||
|
pitch_mid,1.208,-0.19538810247600916,-0.8659288745293109,0.46042444946725575
|
||||||
|
pitch_mid,1.258,-0.020561785443441487,-0.8827600285609496,0.46937399262682766
|
||||||
|
pitch_mid,1.309,-0.020561785443441487,-0.8827600285609496,0.46937399262682766
|
||||||
|
pitch_mid,1.359,0.15293449802923037,-0.8725598819330923,0.4639507428094662
|
||||||
|
pitch_mid,1.409,0.17190451458064285,-0.869802646207114,0.4624848046345908
|
||||||
|
pitch_mid,1.459,0.17190451458064285,-0.869802646207114,0.4624848046345908
|
||||||
|
pitch_mid,1.509,0.17190451458064285,-0.869802646207114,0.4624848046345908
|
||||||
|
pitch_mid,1.559,0.32147374512483523,-0.8360783992242294,0.4445531931569748
|
||||||
|
pitch_mid,1.61,0.39499557938420454,-0.8111479471335701,0.43129746130476065
|
||||||
|
pitch_mid,1.66,0.5495718115709906,-0.7376542883593693,0.3922205690572743
|
||||||
|
pitch_mid,1.711,0.5815293845209076,-0.7182991118346882,0.38192926161297525
|
||||||
|
pitch_mid,1.761,0.6124392459964019,-0.6979845517377493,0.37112765391279023
|
||||||
|
pitch_mid,1.811,0.6124392459964019,-0.6979845517377493,0.37112765391279023
|
||||||
|
pitch_mid,1.861,0.6124392459964019,-0.6979845517377493,0.37112765391279023
|
||||||
|
pitch_mid,1.911,0.6124392459964019,-0.6979845517377493,0.37112765391279023
|
||||||
|
pitch_mid,1.961,0.7785765031694168,-0.5540923970909359,0.294618811684698
|
||||||
|
pitch_mid,2.013,0.8368345419742745,-0.4833737565967571,0.257017043777733
|
||||||
|
pitch_mid,2.063,0.8954853668773045,-0.3929909578852798,0.20895948106996629
|
||||||
|
pitch_mid,2.113,0.9122278787664543,-0.3617276762612271,0.19233664608677187
|
||||||
|
pitch_mid,2.165,0.9346839297400513,-0.3138690827235641,0.1668896353760875
|
||||||
|
pitch_mid,2.216,0.9346839297400513,-0.3138690827235641,0.1668896353760875
|
||||||
|
pitch_mid,2.266,0.9346839297400513,-0.3138690827235641,0.1668896353760875
|
||||||
|
pitch_mid,2.316,0.9858281374907293,-0.1481209242722237,0.078759603378267
|
||||||
|
pitch_mid,2.366,0.9941186237329943,-0.09561938551914852,0.050843830109049304
|
||||||
|
pitch_mid,2.416,0.9995934657948521,-0.025173307197407468,0.01338684970338031
|
||||||
|
pitch_mid,2.466,0.9887113359982596,0.13229521133882916,-0.07034110551698297
|
||||||
|
pitch_mid,2.516,0.9780864001457492,0.18382969276719566,-0.09774271280790084
|
||||||
|
pitch_mid,2.566,0.958687336730862,0.25116550323250036,-0.133545798802701
|
||||||
|
pitch_mid,2.618,0.958687336730862,0.25116550323250036,-0.133545798802701
|
||||||
|
pitch_mid,2.7,0.958687336730862,0.25116550323250036,-0.133545798802701
|
||||||
|
pitch_mid,2.75,0.958687336730862,0.25116550323250036,-0.133545798802701
|
||||||
|
pitch_mid,2.8,0.8655891820395757,0.44214057059579587,-0.23508952288284238
|
||||||
|
pitch_mid,2.85,0.774505313261317,0.5585239764741124,-0.29697219976545675
|
||||||
|
pitch_mid,2.901,0.7486457582891431,0.5853679923169459,-0.3112456299556701
|
||||||
|
pitch_mid,2.951,0.649419187957182,0.6714202776236611,-0.35700074104797064
|
||||||
|
pitch_mid,3.001,0.5873275292440099,0.71461285445045,-0.3799668954610477
|
||||||
|
pitch_mid,3.051,0.4708037762291508,0.7789694709287421,-0.4141863924000489
|
||||||
|
pitch_mid,3.101,0.4708037762291508,0.7789694709287421,-0.4141863924000489
|
||||||
|
pitch_mid,3.151,0.4708037762291508,0.7789694709287421,-0.4141863924000489
|
||||||
|
pitch_mid,3.201,0.4708037762291508,0.7789694709287421,-0.4141863924000489
|
||||||
|
pitch_mid,3.251,0.2519525835347419,0.8544627076303289,-0.4543273895763011
|
||||||
|
pitch_mid,3.302,0.2128006333502304,0.8627235754094408,-0.4587198740827476
|
||||||
|
pitch_mid,3.352,0.05407075118963116,0.8816552045589018,-0.468786149688736
|
||||||
|
pitch_mid,3.402,0.01418978409318777,0.8828579500186226,-0.46942570244534326
|
||||||
|
pitch_mid,3.453,-0.14418506374713955,0.8737205730756915,-0.46456757051748526
|
||||||
|
pitch_mid,3.503,-0.16365548928393295,0.8710424080824322,-0.4631436107183107
|
||||||
|
pitch_mid,3.553,-0.16365548928393295,0.8710424080824322,-0.4631436107183107
|
||||||
|
pitch_mid,3.604,-0.16365548928393295,0.8710424080824322,-0.4631436107183107
|
||||||
|
pitch_mid,3.654,-0.35427595284385854,0.8256794667561332,-0.4390238802319113
|
||||||
|
pitch_mid,3.704,-0.3912019273537199,0.8125800850081012,-0.43205862736781675
|
||||||
|
pitch_mid,3.754,-0.5482164422060858,0.7384403493165538,-0.3926379795640603
|
||||||
|
pitch_mid,3.804,-0.5807364030212269,0.7187993267341519,-0.38219465994764656
|
||||||
|
pitch_mid,3.856,-0.6427510623155457,0.6764032530991501,-0.35965220851417645
|
||||||
|
pitch_mid,3.907,-0.6427510623155457,0.6764032530991501,-0.35965220851417645
|
||||||
|
pitch_mid,3.957,-0.6427510623155457,0.6764032530991501,-0.35965220851417645
|
||||||
|
pitch_fast,0.0,-0.9658675830256226,0.2287146756684362,-0.1216117148720633
|
||||||
|
pitch_fast,0.052,-0.9658676051980126,0.2287146636567734,-0.12161156136414396
|
||||||
|
pitch_fast,0.102,-0.9658676051980126,0.2287146636567734,-0.12161156136414396
|
||||||
|
pitch_fast,0.152,-0.9658676051980126,0.2287146636567734,-0.12161156136414396
|
||||||
|
pitch_fast,0.202,-0.9664701307517564,0.22672168832295678,-0.1205519075281309
|
||||||
|
pitch_fast,0.252,-0.9672076235909816,0.22425644292630353,-0.11924118698473131
|
||||||
|
pitch_fast,0.302,-0.9708059463052539,0.21178855073766029,-0.11261183061651185
|
||||||
|
pitch_fast,0.352,-0.9767019499389217,0.18948015575759153,-0.10075004496071996
|
||||||
|
pitch_fast,0.402,-0.9828596538946014,0.16277540934979576,-0.0865509494875172
|
||||||
|
pitch_fast,0.453,-0.9840999852715604,0.15682439933205652,-0.08338661021203694
|
||||||
|
pitch_fast,0.503,-0.9840999852715604,0.15682439933205652,-0.08338661021203694
|
||||||
|
pitch_fast,0.553,-0.9840999852715604,0.15682439933205652,-0.08338661021203694
|
||||||
|
pitch_fast,0.604,-0.9969658526909927,0.06872814001554328,-0.03654492219345491
|
||||||
|
pitch_fast,0.654,-0.9997555993589555,0.01951919570264511,-0.010379910863662752
|
||||||
|
pitch_fast,0.704,-0.999639503820263,-0.023706604137760323,0.01260394074223997
|
||||||
|
pitch_fast,0.754,-0.9949411990718958,-0.08870043606639172,0.047161881122471744
|
||||||
|
pitch_fast,0.804,-0.9868629348189862,-0.14264913437357063,0.07584703252552663
|
||||||
|
pitch_fast,0.855,-0.9847624772088613,-0.15354912716138713,0.08164269121876744
|
||||||
|
pitch_fast,0.905,-0.9847624772088613,-0.15354912716138713,0.08164269121876744
|
||||||
|
pitch_fast,0.955,-0.9847624772088613,-0.15354912716138713,0.08164269121876744
|
||||||
|
pitch_fast,1.005,-0.9556544968116132,-0.2600196152203893,0.13825441195268626
|
||||||
|
pitch_fast,1.055,-0.9350970976005369,-0.3129094240539954,0.16637641178138443
|
||||||
|
pitch_fast,1.106,-0.9163015999238947,-0.35361089987496885,0.18801784347908457
|
||||||
|
pitch_fast,1.186,-0.8838134201281153,-0.41307791101375835,0.21963715039572226
|
||||||
|
pitch_fast,1.236,-0.8324192085803622,-0.4892822509035454,0.26015599193023287
|
||||||
|
pitch_fast,1.287,-0.8324192085803622,-0.4892822509035454,0.26015599193023287
|
||||||
|
pitch_fast,1.338,-0.8324192085803622,-0.4892822509035454,0.26015599193023287
|
||||||
|
pitch_fast,1.388,-0.8324192085803622,-0.4892822509035454,0.26015599193023287
|
||||||
|
pitch_fast,1.438,-0.7493450951253482,-0.5846697798695479,0.3108748573282781
|
||||||
|
pitch_fast,1.488,-0.7319942059929913,-0.6015615906409889,0.31985642882107823
|
||||||
|
pitch_fast,1.54,-0.6685767864516847,-0.6565976821256674,0.34911969930833103
|
||||||
|
pitch_fast,1.59,-0.6495652494628392,-0.6713099785415564,0.35694243149395194
|
||||||
|
pitch_fast,1.64,-0.600269177220929,-0.7061793659967437,0.3754831792756447
|
||||||
|
pitch_fast,1.692,-0.5902399761670327,-0.7127394615556399,0.378971279222736
|
||||||
|
pitch_fast,1.742,-0.5902399761670327,-0.7127394615556399,0.378971279222736
|
||||||
|
pitch_fast,1.792,-0.5902399761670327,-0.7127394615556399,0.378971279222736
|
||||||
|
pitch_fast,1.842,-0.4744737419514673,-0.7772313800698689,0.413262688895646
|
||||||
|
pitch_fast,1.894,-0.41659370360552633,-0.8026806747323841,0.426794353907588
|
||||||
|
pitch_fast,1.944,-0.36930494798762,-0.8205298691575033,0.43628498623288875
|
||||||
|
pitch_fast,1.994,-0.3214551905466611,-0.8360842723890491,0.4445555645071649
|
||||||
|
pitch_fast,2.044,-0.2729415791863457,-0.8494219198880473,0.45164731413456627
|
||||||
|
pitch_fast,2.094,-0.2729415791863457,-0.8494219198880473,0.45164731413456627
|
||||||
|
pitch_fast,2.145,-0.2729415791863457,-0.8494219198880473,0.45164731413456627
|
||||||
|
pitch_fast,2.195,-0.2729415791863457,-0.8494219198880473,0.45164731413456627
|
||||||
|
pitch_fast,2.246,-0.15018401469533893,-0.8729324279310241,0.4641484008336534
|
||||||
|
pitch_fast,2.296,-0.085167143910571,-0.8797387312536471,0.46776738057536615
|
||||||
|
pitch_fast,2.347,-0.00785863441309952,-0.8829194777000005,0.46945866459478597
|
||||||
|
pitch_fast,2.397,0.017787069774809663,-0.882807050745268,0.4693989042416567
|
||||||
|
pitch_fast,2.447,0.06928193596374152,-0.880825046181548,0.46834522669542594
|
||||||
|
pitch_fast,2.497,0.06928193596374152,-0.880825046181548,0.46834522669542594
|
||||||
|
pitch_fast,2.55,0.06928193596374152,-0.880825046181548,0.46834522669542594
|
||||||
|
pitch_fast,2.6,0.06928193596374152,-0.880825046181548,0.46834522669542594
|
||||||
|
pitch_fast,2.651,0.21198297365514238,-0.8628802036656676,0.4588038502478148
|
||||||
|
pitch_fast,2.702,0.2764694675691825,-0.8485316906739566,0.4511746928009255
|
||||||
|
pitch_fast,2.786,0.37429753186942033,-0.8187640417930946,0.4353467600695977
|
||||||
|
pitch_fast,2.836,0.40981689666516385,-0.8053954345525633,0.4282386077989958
|
||||||
|
pitch_fast,2.886,0.40981689666516385,-0.8053954345525633,0.4282386077989958
|
||||||
|
pitch_fast,2.936,0.40981689666516385,-0.8053954345525633,0.4282386077989958
|
||||||
|
pitch_fast,2.986,0.40981689666516385,-0.8053954345525633,0.4282386077989958
|
||||||
|
pitch_fast,3.036,0.5566205022404467,-0.733522684693819,0.39002318844546285
|
||||||
|
pitch_fast,3.087,0.5998982910452404,-0.7064244402176132,0.37561489675495024
|
||||||
|
pitch_fast,3.137,0.6701810944739728,-0.6553205823511672,0.34844258487819035
|
||||||
|
pitch_fast,3.187,0.6891597392050487,-0.639791239336044,0.34018527882270017
|
||||||
|
pitch_fast,3.243,0.725701824041233,-0.6074752934115958,0.3230025239494625
|
||||||
|
pitch_fast,3.293,0.725701824041233,-0.6074752934115958,0.3230025239494625
|
||||||
|
pitch_fast,3.343,0.725701824041233,-0.6074752934115958,0.3230025239494625
|
||||||
|
pitch_fast,3.393,0.725701824041233,-0.6074752934115958,0.3230025239494625
|
||||||
|
pitch_fast,3.445,0.8389337242743994,-0.4805288759274782,0.25550382712390113
|
||||||
|
pitch_fast,3.495,0.8799044064239339,-0.4195323653889136,0.22307135617763135
|
||||||
|
pitch_fast,3.545,0.9141904204223267,-0.35784452205993644,0.19027131481057563
|
||||||
|
pitch_fast,3.596,0.9243948817285977,-0.33678800362072325,0.17907524466307298
|
||||||
|
pitch_fast,3.646,0.9473286584095463,-0.2827747557609607,0.1503557463494435
|
||||||
|
pitch_fast,3.696,0.9473286584095463,-0.2827747557609607,0.1503557463494435
|
||||||
|
pitch_fast,3.746,0.9473286584095463,-0.2827747557609607,0.1503557463494435
|
||||||
|
pitch_fast,3.796,0.9473286584095463,-0.2827747557609607,0.1503557463494435
|
||||||
|
pitch_fast,3.846,0.9877392592272928,-0.13783858151526024,0.07329175415406497
|
||||||
|
pitch_fast,3.899,0.9948580115516917,-0.08942388935224614,0.04754897332783676
|
||||||
|
pitch_fast,3.949,0.999765524196005,-0.019118849051913748,0.010166918904840748
|
||||||
|
pitch_fast,3.999,0.9990569989225466,0.03833614305138446,-0.020382665179474877
|
||||||
|
roll_slow,0.0,0.49464193227975,-0.7673659362109184,0.4080182333838721
|
||||||
|
roll_slow,0.051,0.4945496776180339,-0.7598559960158229,0.4219472498864052
|
||||||
|
roll_slow,0.101,0.490520535370487,-0.7112149514342452,0.5035502926582757
|
||||||
|
roll_slow,0.151,0.47881435208968187,-0.6485736215805378,0.5916832544722247
|
||||||
|
roll_slow,0.201,0.45245216893643586,-0.5542244875816128,0.6986574641336151
|
||||||
|
roll_slow,0.252,0.4323161301272065,-0.4947074292801451,0.7539014014092735
|
||||||
|
roll_slow,0.302,0.4323161301272065,-0.4947074292801451,0.7539014014092735
|
||||||
|
roll_slow,0.352,0.4323161301272065,-0.4947074292801451,0.7539014014092735
|
||||||
|
roll_slow,0.402,0.24096377557112272,-0.08105081943187036,0.967143848417562
|
||||||
|
roll_slow,0.452,0.10030562620891256,0.16679538851627507,0.9808761796070606
|
||||||
|
roll_slow,0.502,-0.08212564081597067,0.4415128599898792,0.8934885413837849
|
||||||
|
roll_slow,0.552,-0.20200007527010713,0.595981384950017,0.7771757577176032
|
||||||
|
roll_slow,0.602,-0.38780473662709397,0.7847876353439257,0.4834416755523667
|
||||||
|
roll_slow,0.652,-0.4102647584203325,0.8018482887633847,0.4344216267700514
|
||||||
|
roll_slow,0.703,-0.4102647584203325,0.8018482887633847,0.4344216267700514
|
||||||
|
roll_slow,0.77,-0.4102647584203325,0.8018482887633847,0.4344216267700514
|
||||||
|
roll_slow,0.82,-0.5758197542243373,0.789110513896689,-0.21386025227406602
|
||||||
|
roll_slow,0.87,-0.5718945362478904,0.6698446984239761,-0.4735448441310526
|
||||||
|
roll_slow,0.921,-0.5101713830730059,0.453525450011233,-0.7307802857805381
|
||||||
|
roll_slow,0.971,-0.476863939310634,0.36772720461622704,-0.7983592464362641
|
||||||
|
roll_slow,1.021,-0.2648817218028197,-0.0631100664684199,-0.9622134861688052
|
||||||
|
roll_slow,1.071,-0.2077269214538732,-0.16080378491037264,-0.9648790954631544
|
||||||
|
roll_slow,1.121,-0.2077269214538732,-0.16080378491037264,-0.9648790954631544
|
||||||
|
roll_slow,1.171,-0.2077269214538732,-0.16080378491037264,-0.9648790954631544
|
||||||
|
roll_slow,1.222,-0.2077269214538732,-0.16080378491037264,-0.9648790954631544
|
||||||
|
roll_slow,1.272,0.17893611908814816,-0.7049346351677062,-0.6863301140316116
|
||||||
|
roll_slow,1.322,0.3333006981050639,-0.8462206472685584,-0.4157177657727163
|
||||||
|
roll_slow,1.372,0.41270347148109937,-0.8873011969134804,-0.20584564747245515
|
||||||
|
roll_slow,1.422,0.4865576824524262,-0.8645598977193693,0.12568931896544588
|
||||||
|
roll_slow,1.472,0.4978190954600369,-0.8348605144988362,0.23491289774316146
|
||||||
|
roll_slow,1.522,0.5014421756195666,-0.7708306670667784,0.3929068938302064
|
||||||
|
roll_slow,1.573,0.5014421756195666,-0.7708306670667784,0.3929068938302064
|
||||||
|
roll_slow,1.623,0.5014421756195666,-0.7708306670667784,0.3929068938302064
|
||||||
|
roll_slow,1.673,0.4166169613758028,-0.46082806205764126,0.7836247856686206
|
||||||
|
roll_slow,1.724,0.3173553910906107,-0.2302952385040919,0.9199182892344672
|
||||||
|
roll_slow,1.774,0.16147651620343692,0.06606448650839164,0.9846627942281478
|
||||||
|
roll_slow,1.825,-0.0783437241000817,0.4380676421854982,0.8955216366811963
|
||||||
|
roll_slow,1.875,-0.13886219900504984,0.5188239454963641,0.8435277133959901
|
||||||
|
roll_slow,1.926,-0.19803797831806363,0.5925181248079477,0.7808349575408157
|
||||||
|
roll_slow,1.976,-0.19803797831806363,0.5925181248079477,0.7808349575408157
|
||||||
|
roll_slow,2.026,-0.19803797831806363,0.5925181248079477,0.7808349575408157
|
||||||
|
roll_slow,2.076,-0.19803797831806363,0.5925181248079477,0.7808349575408157
|
||||||
|
roll_slow,2.126,-0.5222051882739432,0.8439920179771123,0.12238960303349734
|
||||||
|
roll_slow,2.176,-0.5753348981855904,0.7898716215308815,-0.21235012698360206
|
||||||
|
roll_slow,2.226,-0.5652936143706975,0.6403510022902671,-0.5199939647895575
|
||||||
|
roll_slow,2.277,-0.5240535417867741,0.49631946930012355,-0.6921234497792873
|
||||||
|
roll_slow,2.327,-0.4937895498524031,0.41409211552018416,-0.7646565244085605
|
||||||
|
roll_slow,2.377,-0.4937895498524031,0.41409211552018416,-0.7646565244085605
|
||||||
|
roll_slow,2.428,-0.4937895498524031,0.41409211552018416,-0.7646565244085605
|
||||||
|
roll_slow,2.479,-0.3215006227186099,0.03693793982139597,-0.9461886377426528
|
||||||
|
roll_slow,2.529,-0.08885249584475184,-0.3498540853722495,-0.9325810168186488
|
||||||
|
roll_slow,2.579,-0.027265554342407936,-0.4388170553388613,-0.8981626698377816
|
||||||
|
roll_slow,2.629,0.2091778463424695,-0.7300533910213715,-0.6505894825907677
|
||||||
|
roll_slow,2.679,0.2360296376178349,-0.7571521572053442,-0.6091064118898168
|
||||||
|
roll_slow,2.729,0.2360296376178349,-0.7571521572053442,-0.6091064118898168
|
||||||
|
roll_slow,2.78,0.2360296376178349,-0.7571521572053442,-0.6091064118898168
|
||||||
|
roll_slow,2.83,0.2360296376178349,-0.7571521572053442,-0.6091064118898168
|
||||||
|
roll_slow,2.88,0.4820781498777898,-0.8684021265489136,0.1160965288702979
|
||||||
|
roll_slow,2.93,0.49670236634390524,-0.7496290263282555,0.4374278022194253
|
||||||
|
roll_slow,2.98,0.47126382569148145,-0.6219313535323155,0.6253893172161569
|
||||||
|
roll_slow,3.03,0.3840408409877701,-0.3747603670690986,0.8438408023600428
|
||||||
|
roll_slow,3.08,0.34339375730743976,-0.28183413723003453,0.8959074988714412
|
||||||
|
roll_slow,3.131,0.29780950842709214,-0.1856293249325127,0.9364033588232761
|
||||||
|
roll_slow,3.181,0.29780950842709214,-0.1856293249325127,0.9364033588232761
|
||||||
|
roll_slow,3.231,0.29780950842709214,-0.1856293249325127,0.9364033588232761
|
||||||
|
roll_slow,3.283,0.014967353835082657,0.29998979365854544,0.9538249850050473
|
||||||
|
roll_slow,3.333,-0.16737993925757846,0.5523554967923565,0.8166317169308319
|
||||||
|
roll_slow,3.383,-0.22576571916360996,0.6227711415790569,0.7491234512861391
|
||||||
|
roll_slow,3.433,-0.44830963594391343,0.8253296124209226,0.3432921513535746
|
||||||
|
roll_slow,3.483,-0.4849676037351503,0.8416531335127756,0.2375424723612857
|
||||||
|
roll_slow,3.534,-0.4849676037351503,0.8416531335127756,0.2375424723612857
|
||||||
|
roll_slow,3.584,-0.4849676037351503,0.8416531335127756,0.2375424723612857
|
||||||
|
roll_slow,3.634,-0.4849676037351503,0.8416531335127756,0.2375424723612857
|
||||||
|
roll_slow,3.684,-0.5802453680987208,0.7549564144331459,-0.305542345847884
|
||||||
|
roll_slow,3.734,-0.5611914651497782,0.6147249024521652,-0.5542359008113974
|
||||||
|
roll_slow,3.784,-0.482471837248575,0.3791959988327134,-0.7895766718509644
|
||||||
|
roll_slow,3.834,-0.35219315832064674,0.09734608547423916,-0.9308510723391632
|
||||||
|
roll_slow,3.884,-0.24419845097576873,-0.10001761109088095,-0.9645535723912427
|
||||||
|
roll_slow,3.935,-0.15607902585337452,-0.24554580947801147,-0.9567374734672253
|
||||||
|
roll_slow,3.985,-0.15607902585337452,-0.24554580947801147,-0.9567374734672253
|
||||||
|
roll_fast,0.0,0.4274921031039902,-0.892995645067824,-0.14074544281655502
|
||||||
|
roll_fast,0.055,0.4274921031039902,-0.892995645067824,-0.14074544281655502
|
||||||
|
roll_fast,0.106,0.4274921031039902,-0.892995645067824,-0.14074544281655502
|
||||||
|
roll_fast,0.156,0.4274921031039902,-0.892995645067824,-0.14074544281655502
|
||||||
|
roll_fast,0.206,0.4290243150695981,-0.8931294880771208,-0.13512162893542323
|
||||||
|
roll_fast,0.256,0.4364763111133057,-0.8933822372001555,-0.10656738756376555
|
||||||
|
roll_fast,0.309,0.45598085615143524,-0.8897766198339296,-0.019468580336297992
|
||||||
|
roll_fast,0.359,0.4710183775560644,-0.8794502007709485,0.0686223897018397
|
||||||
|
roll_fast,0.409,0.48614999379346735,-0.8481296101097635,0.21055723210014018
|
||||||
|
roll_fast,0.459,0.48614999379346735,-0.8481296101097635,0.21055723210014018
|
||||||
|
roll_fast,0.509,0.48614999379346735,-0.8481296101097635,0.21055723210014018
|
||||||
|
roll_fast,0.56,0.48614999379346735,-0.8481296101097635,0.21055723210014018
|
||||||
|
roll_fast,0.611,0.4522165107922734,-0.6191590493907155,0.6419830986283418
|
||||||
|
roll_fast,0.661,0.3948458905804791,-0.45576815372939883,0.7977293480484489
|
||||||
|
roll_fast,0.711,0.31297543284889107,-0.26644512261413045,0.911621289279814
|
||||||
|
roll_fast,0.761,0.24722211208448244,-0.13184762873360015,0.9599465766873772
|
||||||
|
roll_fast,0.811,0.17443191144629244,0.005508304311644434,0.9846538309745223
|
||||||
|
roll_fast,0.862,0.17443191144629244,0.005508304311644434,0.9846538309745223
|
||||||
|
roll_fast,0.912,0.17443191144629244,0.005508304311644434,0.9846538309745223
|
||||||
|
roll_fast,0.962,0.17443191144629244,0.005508304311644434,0.9846538309745223
|
||||||
|
roll_fast,1.015,-0.07028931952835214,0.4009372621088909,0.9134050160869863
|
||||||
|
roll_fast,1.065,-0.19181828427149575,0.5682368786979131,0.8001953483411366
|
||||||
|
roll_fast,1.115,-0.3047168205187675,0.7027745223635194,0.6428496169475878
|
||||||
|
roll_fast,1.165,-0.3877485638908776,0.7843408476187816,0.48421119974367904
|
||||||
|
roll_fast,1.216,-0.4028277976127009,0.797062751252426,0.4499119203093136
|
||||||
|
roll_fast,1.266,-0.4028277976127009,0.797062751252426,0.4499119203093136
|
||||||
|
roll_fast,1.316,-0.4028277976127009,0.797062751252426,0.4499119203093136
|
||||||
|
roll_fast,1.366,-0.5117094565052331,0.8509062608923823,0.11879380159445974
|
||||||
|
roll_fast,1.416,-0.5463802858802032,0.8341169424957295,-0.07561421455680888
|
||||||
|
roll_fast,1.467,-0.5614516425968921,0.7703677587767183,-0.30216811423872614
|
||||||
|
roll_fast,1.517,-0.5361264604361383,0.617802887890881,-0.5752286589991021
|
||||||
|
roll_fast,1.567,-0.5218812351566515,0.5690784589905927,-0.6354444774362747
|
||||||
|
roll_fast,1.617,-0.49494010214581236,0.4890850190322566,-0.7182131573886056
|
||||||
|
roll_fast,1.667,-0.49494010214581236,0.4890850190322566,-0.7182131573886056
|
||||||
|
roll_fast,1.717,-0.49494010214581236,0.4890850190322566,-0.7182131573886056
|
||||||
|
roll_fast,1.767,-0.3440174302857372,0.1396931047835701,-0.9285137824154925
|
||||||
|
roll_fast,1.82,-0.23525805420746415,-0.06570749303078906,-0.9697093241225057
|
||||||
|
roll_fast,1.87,-0.19625879783423691,-0.13411075867198055,-0.9713376285726225
|
||||||
|
roll_fast,1.92,-0.0949890023289495,-0.30100858394679586,-0.9488787708800822
|
||||||
|
roll_fast,1.971,-0.07453710913781955,-0.3329263212727339,-0.9400022787021216
|
||||||
|
roll_fast,2.021,-0.07453710913781955,-0.3329263212727339,-0.9400022787021216
|
||||||
|
roll_fast,2.071,-0.07453710913781955,-0.3329263212727339,-0.9400022787021216
|
||||||
|
roll_fast,2.121,0.14448794249717334,-0.6431590637002322,-0.7519771627205005
|
||||||
|
roll_fast,2.171,0.18283601243163217,-0.6892883761074453,-0.7010367516195289
|
||||||
|
roll_fast,2.221,0.3204922974597805,-0.8299477804497861,-0.4565866500407401
|
||||||
|
roll_fast,2.272,0.3498674652034662,-0.8530130176217724,-0.38724869084336405
|
||||||
|
roll_fast,2.322,0.4124430332010092,-0.8877915231565959,-0.20424729074149947
|
||||||
|
roll_fast,2.372,0.4124430332010092,-0.8877915231565959,-0.20424729074149947
|
||||||
|
roll_fast,2.454,0.4124430332010092,-0.8877915231565959,-0.20424729074149947
|
||||||
|
roll_fast,2.504,0.4745114350931557,-0.8744296665576758,0.10105273974349113
|
||||||
|
roll_fast,2.554,0.48267297224869277,-0.8576071884180729,0.17758578837919575
|
||||||
|
roll_fast,2.604,0.4790699338423226,-0.7195469224608153,0.5027367351462215
|
||||||
|
roll_fast,2.654,0.46937636788590276,-0.6762101067234576,0.56782542813376
|
||||||
|
roll_fast,2.704,0.41135253131562505,-0.49459186357414753,0.7656160809873834
|
||||||
|
roll_fast,2.756,0.4003164340439995,-0.46567532370481146,0.7892358617844955
|
||||||
|
roll_fast,2.806,0.4003164340439995,-0.46567532370481146,0.7892358617844955
|
||||||
|
roll_fast,2.856,0.4003164340439995,-0.46567532370481146,0.7892358617844955
|
||||||
|
roll_fast,2.909,0.23776990821948535,-0.11571873999513957,0.9644037764127819
|
||||||
|
roll_fast,2.959,0.16427200734952954,0.021719340056452676,0.9861759365695698
|
||||||
|
roll_fast,3.009,0.045283382036564734,0.22486689122887976,0.9733366820069969
|
||||||
|
roll_fast,3.06,-0.036992167616838594,0.3533761993353274,0.9347496142167305
|
||||||
|
roll_fast,3.11,-0.11945927877262154,0.4727802269146366,0.8730454385389513
|
||||||
|
roll_fast,3.16,-0.11945927877262154,0.4727802269146366,0.8730454385389513
|
||||||
|
roll_fast,3.21,-0.11945927877262154,0.4727802269146366,0.8730454385389513
|
||||||
|
roll_fast,3.26,-0.11945927877262154,0.4727802269146366,0.8730454385389513
|
||||||
|
roll_fast,3.31,-0.34832219782009477,0.7463942489988824,0.5670690183453625
|
||||||
|
roll_fast,3.36,-0.41060542302987857,0.8020551652797916,0.43371730242919837
|
||||||
|
roll_fast,3.412,-0.5060192508828523,0.8512722526760851,0.1388526901422534
|
||||||
|
roll_fast,3.462,-0.5367672669096389,0.8435913083033272,-0.015316844630572738
|
||||||
|
roll_fast,3.514,-0.5424930121603433,0.838335256896307,-0.05380825960575971
|
||||||
|
roll_fast,3.564,-0.5424930121603433,0.838335256896307,-0.05380825960575971
|
||||||
|
roll_fast,3.614,-0.5424930121603433,0.838335256896307,-0.05380825960575971
|
||||||
|
roll_fast,3.664,-0.5596773753080179,0.7324962784354845,-0.3875699132369452
|
||||||
|
roll_fast,3.715,-0.5187323267754228,0.5571689196924458,-0.6484439590950855
|
||||||
|
roll_fast,3.765,-0.5007518821327692,0.5038887555605733,-0.7038065604696406
|
||||||
|
roll_fast,3.815,-0.4301120965633418,0.32618176435100704,-0.8417891903527572
|
||||||
|
roll_fast,3.865,-0.41609751831590275,0.29451533035891825,-0.8603043504684399
|
||||||
|
roll_fast,3.915,-0.41609751831590275,0.29451533035891825,-0.8603043504684399
|
||||||
|
roll_fast,3.965,-0.41609751831590275,0.29451533035891825,-0.8603043504684399
|
||||||
|
File diff suppressed because it is too large
Load Diff
422
docs/re/flight-speed-law.md
Normal file
422
docs/re/flight-speed-law.md
Normal file
@@ -0,0 +1,422 @@
|
|||||||
|
# The throttle is a TARGET-SPEED selector — measured against the definition (2026-08-13)
|
||||||
|
|
||||||
|
**Status: ✅ for the shape of the law, 🟡 for the unit scale.**
|
||||||
|
|
||||||
|
The unit definition gives `MinimumVelocity 100`, `CruisingVelocity 350`,
|
||||||
|
`MaximumVelocity 1200`, `Acceleration 600` and `Deceleration 500` for
|
||||||
|
`UN_f001_TCAF_DeltaSaber_T_Player` ([values](captures/unit-runtime-fields.csv)),
|
||||||
|
but not **how** the game applies them. This measures it.
|
||||||
|
|
||||||
|
Method — [`tools/re-capture/speed_law.py`](../../tools/re-capture/speed_law.py):
|
||||||
|
lock onto the player entity once, then sample its own position triple in guest RAM
|
||||||
|
while holding each throttle input in turn (8 s per phase, 20 Hz). Speed is
|
||||||
|
differentiated over **1-second windows**, never per sample.
|
||||||
|
|
||||||
|
## Result
|
||||||
|
|
||||||
|
| phase | measured speed (1 s windows) | settles to | definition field |
|
||||||
|
|---|---|---|---|
|
||||||
|
| no throttle | 367 403 471 365 463 463 365 | **~420** | `CruisingVelocity` 350 |
|
||||||
|
| `RT` held | 1041 1376 1551 1379 1596 1510 1620 | **~1 530** | `MaximumVelocity` 1200 |
|
||||||
|
| release | 1314 672 432 452 432 450 408 | back to **~440** | — |
|
||||||
|
| `LT` held | 203 121 135 121 115 146 122 | **~125** | `MinimumVelocity` 100 |
|
||||||
|
| release | 369 451 427 425 445 390 465 | back to **~430** | — |
|
||||||
|
|
||||||
|
So the throttle **selects a target speed** and the craft converges to it; releasing
|
||||||
|
either trigger returns it to cruise. (**Refined below**: the trigger is analogue, so
|
||||||
|
the target is a continuous interpolation and these three are its endpoints.) It is not a
|
||||||
|
force model with the throttle adding thrust, which is what a reimplementation would
|
||||||
|
most likely have assumed from `Acceleration`/`Deceleration` alone. Those two fields
|
||||||
|
govern the **convergence rate**: the release phase falls ~1 314 → ~432 in about two
|
||||||
|
seconds (~440 units/s², against `Deceleration` 500) and the `RT` phase climbs ~420 →
|
||||||
|
~1 550 in two to three seconds (~470–560 units/s², against `Acceleration` 600).
|
||||||
|
|
||||||
|
## 🟡 The unit scale
|
||||||
|
|
||||||
|
Measured world-space speeds run **≈1.2–1.3× the definition numbers** in all three
|
||||||
|
regimes (cruise 1.21, maximum 1.28, minimum 1.32). The HUD, meanwhile, reads
|
||||||
|
**350** at cruise — the definition value exactly. So the definition's velocity unit
|
||||||
|
is the HUD's, and entity world coordinates are a constant multiple of it, close to
|
||||||
|
**1.25**. The spread across regimes is larger than the constant itself is precise,
|
||||||
|
because the craft is manoeuvring under fire while sampled (straight-line
|
||||||
|
displacement per window under-reads a curving path), so this is recorded as a
|
||||||
|
measured range rather than a pinned constant.
|
||||||
|
|
||||||
|
## Traps
|
||||||
|
|
||||||
|
* **`RT`/`LT` are analogue triggers**, so `vgamepad trig RT 1.0` holds the throttle;
|
||||||
|
the button verb `hold RT` is a **silent no-op**. The first run of this probe
|
||||||
|
measured the drift of a craft nobody was flying.
|
||||||
|
* **Do not differentiate per sample.** The guest updates the position slower than
|
||||||
|
20 Hz, so per-sample differences alternate between 0 and a double step —
|
||||||
|
`0, 1519, 1985, 0, 2681…` for a craft flying smoothly.
|
||||||
|
* **Bind late, measure fast.** The player entity is not in the typed-entity scan
|
||||||
|
for the first ~15 s of a mission, and the craft dies within a few minutes if
|
||||||
|
nobody is flying it — one earlier attempt ended at `GAME OVER` mid-probe.
|
||||||
|
|
||||||
|
Raw samples: [`captures/speed-law-throttle-phases.csv`](captures/speed-law-throttle-phases.csv).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# Turn rates: `AV_*` are rate caps, and `_Min`/`_Max` mean *at minimum/maximum speed*
|
||||||
|
|
||||||
|
`tools/re-capture/turn_law.py` pins the speed regime with a throttle, holds a stick
|
||||||
|
axis, and differentiates the craft's **own forward vector** over 1-second windows.
|
||||||
|
|
||||||
|
**Control mapping, measured** — `LX` is **roll** (the forward vector barely moves
|
||||||
|
under it: 3–5 °/s residual), `LY` is **pitch** (`vgamepad` documents `LY: -1 = up`,
|
||||||
|
so `+1` is nose down = the `PitchMinus` family), and the **right stick does not
|
||||||
|
steer at all** (0 °/s).
|
||||||
|
|
||||||
|
| phase | measured (1 s windows) | definition |
|
||||||
|
|---|---|---|
|
||||||
|
| slow + nose down | 85 · 96 · 82 → **~87** | `AV_PitchMinus_Min` **75** |
|
||||||
|
| fast + nose down | 55 · 45 · 63 → **~54** | `AV_PitchMinus_Max` **40** |
|
||||||
|
| slow + nose up | 181 · 164 · 181 → **~175** | `AV_PitchPlus_Min` **150** |
|
||||||
|
| fast + nose up | 103 · 130 · 175 → **~136** | `AV_PitchPlus_Max` **70** |
|
||||||
|
|
||||||
|
Two claims of the field names are confirmed:
|
||||||
|
|
||||||
|
* **Agility falls with speed** — every rate drops when the throttle goes from `LT`
|
||||||
|
to `RT`, so `_Min`/`_Max` are *at minimum / maximum speed*, not floor/ceiling of
|
||||||
|
the rate.
|
||||||
|
* **Pitching up is about twice as fast as pitching down**, exactly as the pair
|
||||||
|
150/75 (slow) and 70/40 (fast) says.
|
||||||
|
|
||||||
|
## The ~1.2× factor — ⚠️ WITHDRAWN, see "Settled rates match exactly" below
|
||||||
|
|
||||||
|
The speed law measured 1.21 / 1.28 / 1.32 × its definition values; the pitch rates
|
||||||
|
measure 1.16 / 1.35 / 1.17 / 1.94 × theirs. A **unit scale** would have to differ
|
||||||
|
between metres-per-second and degrees-per-second — it cannot explain both. A **time
|
||||||
|
base** does: if the guest's simulated second is shorter than the wall-clock second
|
||||||
|
this probe measures against, every rate reads high by the same factor. So the
|
||||||
|
definition numbers are self-consistent and a reimplementation should take them at
|
||||||
|
face value; these measurements confirm the **shape** of the law (which field governs
|
||||||
|
what, and how the regimes switch), not a scale correction.
|
||||||
|
|
||||||
|
🟡 **No yaw input was found.** `AV_Yaw_{Min,Max}` (45 / 25 °/s) exists, but neither
|
||||||
|
stick yaws the craft. With `MaximumBank_Normal` (60) and roll on `LX`, a
|
||||||
|
**bank-to-turn** model is the obvious reading — sustained turns come from rolling and
|
||||||
|
pitching — but the yaw fields may equally belong to the AI or to an input this probe
|
||||||
|
has not driven.
|
||||||
|
|
||||||
|
Raw samples: [`captures/turn-law-pitch-phases.csv`](captures/turn-law-pitch-phases.csv).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# The afterburner is not on the obvious buttons — a bounded negative
|
||||||
|
|
||||||
|
The definition describes the burner without naming its input: `AB_ConsumeShield_Begin`
|
||||||
|
**50**, `AB_ConsumeShield` **10**, and a set of `AB_AV_*` turn caps far below the
|
||||||
|
normal ones (roll 40 vs 125–200 °/s, pitch-up 30 vs 70–150). Notably there is **no
|
||||||
|
`AB_*Velocity`**, so the burner may not raise the speed target at all.
|
||||||
|
|
||||||
|
Two independent probes, both negative for `A`, `B`, `X`, `LB` (and `LS`/`RS` on the
|
||||||
|
first):
|
||||||
|
|
||||||
|
* [`tools/re-capture/ab_probe.py`](../../tools/re-capture/ab_probe.py) — hold `RT`
|
||||||
|
for a max-speed baseline, then hold each candidate: speed stayed inside the
|
||||||
|
baseline's own noise band (1 200–1 580 units/s) for every one.
|
||||||
|
* [`tools/re-capture/ab_state_probe.py`](../../tools/re-capture/ab_state_probe.py) —
|
||||||
|
sample a window of the player object while each candidate is held and report any
|
||||||
|
float that falls during the hold: **nothing fell**.
|
||||||
|
* And the cheapest oracle of the three, needing no offsets at all: **count the green
|
||||||
|
pixels of the HUD's SHIELD bar** before and after each hold, on a freshly spawned
|
||||||
|
craft with a full shield. `AB_ConsumeShield_Begin 50` should take a visible bite;
|
||||||
|
the bar read **156, 156, 156, 157, 157** across baseline and all four buttons.
|
||||||
|
|
||||||
|
So the burner is **not a simple hold on `A`/`B`/`X`/`LB`/`LS`/`RS`**. What remains:
|
||||||
|
a chord (something plus `RT`), an input this pad cannot reach, a craft variant that
|
||||||
|
has it, or fields that belong to the AI rather than the player. Worth knowing before
|
||||||
|
anyone re-probes the obvious buttons.
|
||||||
|
|
||||||
|
(`RB` is the nose gun, `Y` the missile mount and the d-pad the tactical map — see
|
||||||
|
[flight controls](flight-controls-runtime.md) — so those were not held here.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# The throttle is ANALOGUE: the target speed interpolates cruise → maximum
|
||||||
|
|
||||||
|
`RT` is an analogue trigger, so "held" was only ever one point on a curve. Walking
|
||||||
|
it in five steps ([`tools/re-capture/throttle_curve.py`](../../tools/re-capture/throttle_curve.py),
|
||||||
|
2.5 s to converge then 5 s of sampling per step):
|
||||||
|
|
||||||
|
| `RT` | settled speed (1 s windows) | mean |
|
||||||
|
|---|---|---|
|
||||||
|
| 0.00 | 465 · 411 · 373 · 504 | **438** |
|
||||||
|
| 0.25 | 648 · 554 · 678 · 622 | **626** |
|
||||||
|
| 0.50 | 739 · 961 · 897 · 919 | **879** |
|
||||||
|
| 0.75 | 1028 · 1086 · 977 · 1283 | **1094** |
|
||||||
|
| 1.00 | 1359 · 1306 · 1517 · 1186 | **1342** |
|
||||||
|
|
||||||
|
A straight ramp. Dividing by the ~1.2 time-base factor established above, the
|
||||||
|
endpoints land on the definition's own numbers — 438/1.2 ≈ **365** against
|
||||||
|
`CruisingVelocity` **350**, and 1342/1.2 ≈ **1118** against `MaximumVelocity`
|
||||||
|
**1200** — and the midpoint follows: 879/1.2 ≈ 733 against the predicted
|
||||||
|
350 + 0.5·(1200−350) = 775. So
|
||||||
|
|
||||||
|
```
|
||||||
|
target speed = CruisingVelocity + RT · (MaximumVelocity − CruisingVelocity)
|
||||||
|
```
|
||||||
|
|
||||||
|
and `LT` mirrors it down to `MinimumVelocity` — **measured**, see below.
|
||||||
|
|
||||||
|
**This also refutes a live hypothesis about the afterburner.** Full `RT` producing
|
||||||
|
more than `MaximumVelocity` looked like it might *be* the burner; it is not — the
|
||||||
|
curve is smooth through full deflection, with no step, and the shield does not move.
|
||||||
|
Full throttle is simply full throttle.
|
||||||
|
|
||||||
|
Raw samples: [`captures/throttle-curve-rt.csv`](captures/throttle-curve-rt.csv).
|
||||||
|
|
||||||
|
(The entity scan that locks onto the player searches *changing* position triples, so
|
||||||
|
it only sees the craft while it still has speed — bind early, or a mission left
|
||||||
|
idling drops out of the scan entirely and every tool reports "player entity not
|
||||||
|
found" while the game is visibly flying.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# `LT` mirrors `RT`, and roll does NOT depend on speed
|
||||||
|
|
||||||
|
One flight, both measurements
|
||||||
|
([`tools/re-capture/flight_law2.py`](../../tools/re-capture/flight_law2.py)).
|
||||||
|
|
||||||
|
## The braking half of the curve
|
||||||
|
|
||||||
|
| `LT` | 0.00 | 0.25 | 0.50 | 0.75 | 1.00 |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| speed | 436 | 379 | 289 | 209 | **126** |
|
||||||
|
|
||||||
|
A straight ramp down from cruise to ~126, and dividing by the ~1.2 time-base factor
|
||||||
|
the endpoints are the definition's own numbers again — 363 against
|
||||||
|
`CruisingVelocity` **350** and 105 against `MinimumVelocity` **100**. So the throttle
|
||||||
|
law is symmetric:
|
||||||
|
|
||||||
|
```
|
||||||
|
RT held: target = Cruising + RT · (Maximum − Cruising)
|
||||||
|
LT held: target = Cruising − LT · (Cruising − Minimum)
|
||||||
|
```
|
||||||
|
|
||||||
|
## Roll
|
||||||
|
|
||||||
|
Roll turns the craft about its own forward axis, so it has to be measured on a
|
||||||
|
different row of the rotation matrix than pitch was:
|
||||||
|
|
||||||
|
| phase | rate per 1 s window | mean |
|
||||||
|
|---|---|---|
|
||||||
|
| minimum speed + full roll | 171 · 103 · 157 | **~144 °/s** |
|
||||||
|
| maximum speed + full roll | 140 · 145 · 164 | **~150 °/s** |
|
||||||
|
|
||||||
|
**Roll shows no speed dependence** — the two regimes agree inside the noise, where
|
||||||
|
pitch dropped by a third to a half between them. Against the definition
|
||||||
|
(`AV_Roll_Min` 200, `AV_Roll_Max` 125) the measured ~145 °/s is ~121 after the
|
||||||
|
time-base factor, i.e. **the `Max` value in both regimes**.
|
||||||
|
|
||||||
|
So the `_Min`/`_Max` pair does *not* mean the same thing for every axis: pitch
|
||||||
|
interpolates between them with speed, roll appears pinned at `Max`. A
|
||||||
|
reimplementation that applies one rule to all axes would get roll wrong at low
|
||||||
|
speed by ~60 %.
|
||||||
|
|
||||||
|
🟡 Caveat kept: the roll phases were 2 s of settling apart, which is marginal for a
|
||||||
|
full 126 → 1 342 speed change, so "no dependence" is a measurement over a real but
|
||||||
|
not perfectly separated pair of regimes.
|
||||||
|
|
||||||
|
Raw samples: [`captures/throttle-curve-lt.csv`](captures/throttle-curve-lt.csv) ·
|
||||||
|
[`captures/turn-law-roll.csv`](captures/turn-law-roll.csv).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# ⚠️ Settled rates match the definition EXACTLY — the "time base" reading is withdrawn
|
||||||
|
|
||||||
|
The earlier turn measurements settled each phase for 1.5 s and then differentiated
|
||||||
|
from the first second. Re-running with **5 s of settle** and the craft's speed
|
||||||
|
recorded *at the moment the turn starts*
|
||||||
|
([`tools/re-capture/flight_law3.py`](../../tools/re-capture/flight_law3.py)):
|
||||||
|
|
||||||
|
| phase | speed at turn | measured rate | definition |
|
||||||
|
|---|---|---|---|
|
||||||
|
| pitch, minimum speed | 130 /s | **74.9 °/s** | `AV_PitchMinus_Min` **75** |
|
||||||
|
| pitch, half throttle | 388 /s | 73.7 °/s | (between, see below) |
|
||||||
|
| pitch, maximum speed | 1 821 /s | **41.1 °/s** | `AV_PitchMinus_Max` **40** |
|
||||||
|
| roll, minimum speed | 110 /s | 129.5 °/s | `AV_Roll_Min` 200 |
|
||||||
|
| roll, maximum speed | 1 722 /s | 149.3 °/s | `AV_Roll_Max` 125 |
|
||||||
|
|
||||||
|
**Pitch lands on 75 and 40 — the definition's own numbers, with no scale factor.**
|
||||||
|
So the ~1.2× I attributed to the emulated time base was an artefact of measuring
|
||||||
|
during the `AA_*` acceleration ramp with too little settle, and that explanation is
|
||||||
|
**withdrawn**: angular rates need no correction, and a reimplementation should use
|
||||||
|
`AV_*` verbatim.
|
||||||
|
|
||||||
|
What remains unexplained is only on the **linear** side: settled speeds still read
|
||||||
|
high and vary between runs (`RT` full measured 1 342 in one flight and 1 821 in
|
||||||
|
another, against `MaximumVelocity` 1 200), which is what a craft being shoved around
|
||||||
|
in a firefight looks like. The HUD, meanwhile, reads exactly `CruisingVelocity` at
|
||||||
|
neutral throttle. A clean linear measurement wants a quiet corner of a map, not this
|
||||||
|
one — until then, no cause is claimed.
|
||||||
|
|
||||||
|
**Roll, re-measured with proper settles, confirms the axis difference**: 129.5 at
|
||||||
|
110 /s and 149.3 at 1 722 /s — no speed dependence, both near `AV_Roll_Max` **125**,
|
||||||
|
where pitch moved 75 → 40 across the same range. The mid-throttle pitch point does
|
||||||
|
not discriminate lerp-versus-switch, because at half throttle the craft only reached
|
||||||
|
388 /s, where an interpolation would predict ~66 °/s against a measured 73.7 — inside
|
||||||
|
this probe's noise.
|
||||||
|
|
||||||
|
Raw samples: [`captures/turn-law-settled.csv`](captures/turn-law-settled.csv).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# The linear discrepancy is real, and it is between WORLD units and DISPLAYED speed
|
||||||
|
|
||||||
|
Last section removed the "time base" explanation by showing settled *angular* rates
|
||||||
|
match the definition exactly. That leaves the linear side, and the HUD settles it:
|
||||||
|
screenshotting the speed readout at each throttle step, next to the position-derived
|
||||||
|
measurement of the same moment
|
||||||
|
([`captures/throttle-curve-hud.csv`](captures/throttle-curve-hud.csv)):
|
||||||
|
|
||||||
|
| `RT` | HUD readout | position-derived | ratio |
|
||||||
|
|---|---|---|---|
|
||||||
|
| 0.00 | **350** (= `CruisingVelocity`) | ~447 | 1.28 |
|
||||||
|
| 0.25 | **507** | ~652 | 1.29 |
|
||||||
|
| 0.75 | **963** | ~1 141 | 1.19 |
|
||||||
|
|
||||||
|
Two things follow.
|
||||||
|
|
||||||
|
* **The HUD speaks the definition's language.** It reads exactly `CruisingVelocity`
|
||||||
|
at neutral and climbs toward `MaximumVelocity` as the trigger is pressed — 963 at
|
||||||
|
three-quarters, against the 987 the interpolation predicts. So the throttle law
|
||||||
|
stated above is confirmed in the game's *own* units, independent of any position
|
||||||
|
sampling.
|
||||||
|
* **World displacement runs ~1.2× the displayed speed.** Since the angular rates
|
||||||
|
need no such factor, this is not a clock effect: it is a **unit difference between
|
||||||
|
the position triple and the velocity fields**. A reimplementation that places
|
||||||
|
entities in world coordinates and moves them at `MaximumVelocity` will be ~20 %
|
||||||
|
slow.
|
||||||
|
|
||||||
|
🟡 The ratio is 1.19–1.29 across the three points rather than a clean constant, and
|
||||||
|
every sample was taken in a firefight where the craft is also being pushed. Pinning
|
||||||
|
it exactly wants a quiet map or a scripted straight run; the *existence and rough
|
||||||
|
size* of the factor is what these measurements support.
|
||||||
|
|
||||||
|
**A methodological note worth keeping.** This line of work went: hold a trigger →
|
||||||
|
"three target speeds" → analogue interpolation → an unexplained 1.2× → "time base"
|
||||||
|
→ withdrawn → a *unit* difference confined to the linear side. Every step came from
|
||||||
|
one of two moves: **let a held input vary** (the trigger's analogue range), or
|
||||||
|
**bring in an independent oracle** (the HUD, the definitions, a longer settle). The
|
||||||
|
wrong turn — the time base — came from explaining a number instead of first
|
||||||
|
measuring the same quantity a second, cleaner way.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# ✅ The linear factor IS the clock — measured against the game's own mission timer
|
||||||
|
|
||||||
|
The cleanest possible version of the linear measurement: neutral throttle (HUD reads
|
||||||
|
exactly `CruisingVelocity` 350), sticks centred, **20 s of perfectly straight flight**
|
||||||
|
(`straightness = displacement/path = 1.000`, so no manoeuvring contaminates it) —
|
||||||
|
[`tools/re-capture/cruise_ratio.py`](../../tools/re-capture/cruise_ratio.py):
|
||||||
|
|
||||||
|
```
|
||||||
|
displacement 8 900 world units in 20.1 s -> 443.6 /s
|
||||||
|
ratio vs the HUD's 350 -> 1.267
|
||||||
|
```
|
||||||
|
|
||||||
|
And the game's **own clock**, read off the HUD across a wall-clock interval:
|
||||||
|
|
||||||
|
```
|
||||||
|
mission TIME 00:08.79 -> 00:46.97 = 38.18 s of game time
|
||||||
|
wall clock = 30.29 s
|
||||||
|
ratio = 1.260
|
||||||
|
```
|
||||||
|
|
||||||
|
**1.260 against 1.267 — the same number.** So the linear "discrepancy" was never a
|
||||||
|
unit difference: **the mission clock runs ~1.26× faster than wall time under this
|
||||||
|
emulator**, and a speed derived by dividing world displacement by *wall* seconds is
|
||||||
|
inflated by exactly that. World units and the displayed speed share one unit, and a
|
||||||
|
reimplementation should take `CruisingVelocity`/`MaximumVelocity` at face value —
|
||||||
|
per **game** second.
|
||||||
|
|
||||||
|
This supersedes the previous section's "world-unit vs displayed-speed difference".
|
||||||
|
|
||||||
|
❔ **One thing does not fit, and is left open.** The settled turn rates measured
|
||||||
|
74.9 and 41.1 °/s *in wall time* against `AV_PitchMinus_{Min,Max}` 75/40 — but if
|
||||||
|
game time runs 1.26× fast, a 75 °/game-second cap should have read ~94 °/wall-second.
|
||||||
|
Either that agreement was luck inside a noisy sample (the per-window rates spanned
|
||||||
|
61–96), or angular integration is frame-based where linear is time-based. The check:
|
||||||
|
re-measure pitch and convert wall→game seconds with the clock ratio, expecting ~94
|
||||||
|
if the clock explanation is universal.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# ✅ The clock factor applies to the ANGULAR side too — and it varies per run
|
||||||
|
|
||||||
|
The open question was whether the ~1.26× mission-clock factor explains only the
|
||||||
|
linear measurements. Measuring **both in the same run** settles it
|
||||||
|
([`tools/re-capture/pitch_gametime.py`](../../tools/re-capture/pitch_gametime.py):
|
||||||
|
HUD screenshots bracket each turn phase, so the mission clock's own advance converts
|
||||||
|
wall seconds to game seconds):
|
||||||
|
|
||||||
|
```
|
||||||
|
this run's clock: TIME 00:33.68 -> 00:44.12 = 10.44 s game in 7.96 s wall = 1.311
|
||||||
|
```
|
||||||
|
|
||||||
|
| phase | wall-time rate | ÷ 1.311 → game-time | definition |
|
||||||
|
|---|---|---|---|
|
||||||
|
| pitch, minimum speed | 88.9 °/s | **67.8 °/s** | `AV_PitchMinus_Min` **75** (0.90×) |
|
||||||
|
| pitch, maximum speed | 53.6 °/s | **40.9 °/s** | `AV_PitchMinus_Max` **40** (1.02×) |
|
||||||
|
|
||||||
|
So with the clock correction both land on the definition (the slow phase runs 10 %
|
||||||
|
low, consistent with the `AA_*` ramp being included in an 8 s window). **The clock
|
||||||
|
explanation is universal**: every rate the game states is per **game** second, and a
|
||||||
|
probe that divides by wall seconds reads high by that run's ratio.
|
||||||
|
|
||||||
|
**And the ratio is not a constant of the machine — it varies with scene load**:
|
||||||
|
1.260 in the earlier flight, **1.311** here. It has to be measured *in the same run*
|
||||||
|
as whatever it is correcting, which is why this probe brackets its own phases with
|
||||||
|
HUD screenshots.
|
||||||
|
|
||||||
|
Bonus confirmation from the same screenshots: at full `LT` the HUD reads **102**,
|
||||||
|
against `MinimumVelocity` **100** — the throttle law's lower endpoint, in the game's
|
||||||
|
own units.
|
||||||
|
|
||||||
|
## The trap that cost three runs: a dead emulator looks alive
|
||||||
|
|
||||||
|
A killed Canary leaves **both** its `/dev/shm/xenia_memory_*` image *and* its last
|
||||||
|
frame on the X display. So the screenshot shows a mission in progress, the memory
|
||||||
|
image still parses, and the scans quietly report `0 moving triples` / "player entity
|
||||||
|
not found" — which reads like a tooling bug. `pgrep -x xenia_canary` does **not**
|
||||||
|
help: zombies match it. `speed_law.require_live_emulator()` now checks the process
|
||||||
|
*state letter* and refuses to measure a corpse, naming the stale image in its error.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# ⚠️ The roll result is WITHDRAWN — the probe was not isolating roll
|
||||||
|
|
||||||
|
Re-running the roll phases with 5 s settles and in-run clock brackets
|
||||||
|
([`tools/re-capture/roll_gametime.py`](../../tools/re-capture/roll_gametime.py)):
|
||||||
|
|
||||||
|
```
|
||||||
|
this run's clock: TIME 00:34.93 -> 00:45.97 = 11.04 s game in 7.98 s wall = 1.383
|
||||||
|
minimum speed: 90.6 °/wall-s ÷ 1.383 -> 65.5 °/game-s (AV_Roll_Min 200)
|
||||||
|
maximum speed: 59.1 °/wall-s ÷ 1.383 -> 42.7 °/game-s (AV_Roll_Max 125)
|
||||||
|
```
|
||||||
|
|
||||||
|
Two things are wrong with reading this as "roll".
|
||||||
|
|
||||||
|
* The corrected numbers — **65.5 and 42.7** — are within a few per cent of the
|
||||||
|
**pitch** run's **67.8 and 40.9**. Two different stick axes producing the same
|
||||||
|
rates is the signature of a measurement that is not separating them.
|
||||||
|
* Watching a non-forward matrix row sees **any** rotation that moves that row, and
|
||||||
|
pitch moves it as much as roll does. The forward row was the wrong thing to avoid;
|
||||||
|
what is needed is the rotation **about** the forward axis — project the row onto
|
||||||
|
the plane perpendicular to forward and track the angle of that projection.
|
||||||
|
|
||||||
|
So the earlier conclusion — *"roll shows no speed dependence, unlike pitch"* — is
|
||||||
|
**withdrawn**. It rested on 2 s settles (which this session has twice shown to
|
||||||
|
produce wrong answers) and on a row that mixes the axes. The two runs do not even
|
||||||
|
agree with each other (144/150 then, 90.6/59.1 now), which is itself the tell.
|
||||||
|
|
||||||
|
What survives: `AV_Roll_{Min,Max}` are **not** confirmed, and the axis question —
|
||||||
|
does roll follow the same speed rule as pitch? — is **open**, with the correct
|
||||||
|
measurement specified above.
|
||||||
|
|
||||||
|
**The clock ratio has now been measured three times in three flights: 1.260, 1.311,
|
||||||
|
1.383.** It is not a property of the machine but of the moment, so any rate probe
|
||||||
|
must bracket its own phases.
|
||||||
@@ -76,7 +76,7 @@ photographed against this exact save (see "Naming the fields", further down).
|
|||||||
| +0 | 0 | ❔ |
|
| +0 | 0 | ❔ |
|
||||||
| +4 | **324773** | ✅ **flight time, milliseconds** — the screen shows `Flight Time 000:05:24` and 324773 ms = 5 m 24.773 s |
|
| +4 | **324773** | ✅ **flight time, milliseconds** — the screen shows `Flight Time 000:05:24` and 324773 ms = 5 m 24.773 s |
|
||||||
| +8 | 5 | ✅ **clear ratio, percent** — the screen shows `Clear Ratio 5 %`. **It is not a stage counter**: developing one Arsenal weapon stepped it to 6 (see [the develop differential](#the-develop-differential-one-weapon-three-fields)) |
|
| +8 | 5 | ✅ **clear ratio, percent** — the screen shows `Clear Ratio 5 %`. **It is not a stage counter**: developing one Arsenal weapon stepped it to 6 (see [the develop differential](#the-develop-differential-one-weapon-three-fields)) |
|
||||||
| +12 | 0 | ❔ |
|
| +12 | 0 | 🟡 **Times Cleared** — mirrored to header `+0x28`, and the panel prints `Times Cleared: 0` |
|
||||||
| +16 | 1 | ❔ |
|
| +16 | 1 | ❔ |
|
||||||
| +20 | 0 | ❔ |
|
| +20 | 0 | ❔ |
|
||||||
| +24 | **4101** (`0x1005`) | ✅ **Points — the spendable balance.** Named from the Details panel, and **separated from +28** by the develop differential: spending 4000 P moved *only* this field (4101 → 101) and the panel then read `Points 101 P` |
|
| +24 | **4101** (`0x1005`) | ✅ **Points — the spendable balance.** Named from the Details panel, and **separated from +28** by the develop differential: spending 4000 P moved *only* this field (4101 → 101) and the panel then read `Points 101 P` |
|
||||||
@@ -84,8 +84,8 @@ photographed against this exact save (see "Naming the fields", further down).
|
|||||||
| +32 | 79 | ❔ |
|
| +32 | 79 | ❔ |
|
||||||
| +36 | 2 | ❌ **not** difficulty and **not** stage — refuted by probe saves (see below) |
|
| +36 | 2 | ❌ **not** difficulty and **not** stage — refuted by probe saves (see below) |
|
||||||
| +40 (u64) | 2014400 | ❔ |
|
| +40 (u64) | 2014400 | ❔ |
|
||||||
| +48 | 0 | ❔ (`Times Cleared: 0` is on screen, so it is one of the zero fields) |
|
| +48 | 0 | 🟡 **Game Status enum** — mirrored to header `+0x18`; `0` renders `At Standby`, matching the screen's own `STATE_STAND_BY / STATE_STAGE_CLEAR / STATE_GAME_CLEAR` list |
|
||||||
| +52 | 2 | ❌ see +36 — refuted |
|
| +52 | 2 | ✅ **STAGE NUMBER, 1-based** — set it to 5 (with the header mirror, below) and the game reads `STAGE 05 — Star System Escape`, loads it, and **flies Stage 05** |
|
||||||
| +56 | 2 | ❌ see +36 — refuted |
|
| +56 | 2 | ❌ see +36 — refuted |
|
||||||
| +60 | 0 | ❔ |
|
| +60 | 0 | ❔ |
|
||||||
| +64 (raw 4) | `09 15 00 00` | ❔ the trailer's u32 is the **same** value |
|
| +64 (raw 4) | `09 15 00 00` | ❔ the trailer's u32 is the **same** value |
|
||||||
@@ -466,3 +466,110 @@ strings are reached through a config lookup, not an immediate, so there is no
|
|||||||
disassembling the save-screen's populate path, not another grep.
|
disassembling the save-screen's populate path, not another grep.
|
||||||
|
|
||||||
Editing beyond a throwaway slot is still the user's call.
|
Editing beyond a throwaway slot is still the user's call.
|
||||||
|
|
||||||
|
## Stage unlock: four probes, all negative — and a method correction (2026-08-13)
|
||||||
|
|
||||||
|
The motivating question ("can stage progress be reached without winning
|
||||||
|
missions?") got its first tests **against slot 01**, the save the title-menu
|
||||||
|
screens actually read. Slot 01 was backed up, edited, and restored
|
||||||
|
byte-identically after each run (md5 `142b4f43…`, verified twice).
|
||||||
|
|
||||||
|
| probe (in slot 01) | oracle | result |
|
||||||
|
|---|---|---|
|
||||||
|
| `SHAB[1..7]` filled with record 0's shape | `EXTRAS → MISSION SELECT` | **Stage02–08 stay greyed out**; the cursor will not leave Stage01 (two d-pad steps, no movement) |
|
||||||
|
| GHAD `+36 = +52 = +56 = 5` | MISSION SELECT + LOAD GAME Details for slot 01 | **still locked**, panel **still `STAGE 02`/`EASY`** |
|
||||||
|
| GHAD `+16 = 4` (a 0-based stage index would read `STAGE 05`) | LOAD GAME Details for slot 01 | **still `STAGE 02`** |
|
||||||
|
| live-RAM writes into the loaded container header (Points, and its `+0x14`) | LOAD GAME Details, re-rendered by moving the cursor off and back | **no change** |
|
||||||
|
|
||||||
|
So the per-stage record table is **not** the unlock gate — that is now tested on
|
||||||
|
the save the screens read, where the earlier `SHAB[1]` attempt was written to a
|
||||||
|
throwaway slot and could prove nothing. And `+16` joins `+36/+52/+56` as **not**
|
||||||
|
the displayed stage; the earlier refutation of those three stands, now confirmed
|
||||||
|
against slot 01 itself.
|
||||||
|
|
||||||
|
**The method correction, which is the useful part.** Searching guest RAM at the
|
||||||
|
LOAD GAME screen finds **no payload bytes at all** — neither the `4101/4101/79`
|
||||||
|
triple nor the 54-byte develop blob is anywhere in the guest address space — but
|
||||||
|
it does find the save's **`GDHA` container header**, loaded verbatim, carrying a
|
||||||
|
summary copy:
|
||||||
|
|
||||||
|
```
|
||||||
|
+0x00 'GDHA' +0x04 136 +0x08 FILETIME (2026-07-23 20:07:23)
|
||||||
|
+0x14 2 +0x1c 4101 (Points) +0x20 324773 (flight ms) +0x24 5 (clear ratio)
|
||||||
|
```
|
||||||
|
|
||||||
|
Two consequences:
|
||||||
|
|
||||||
|
1. **The Details panel is not a payload oracle.** The numbers it shows exist in
|
||||||
|
the *header* too, and `savegame_edit.py` copies the donor header verbatim — so a
|
||||||
|
payload edit leaves a stale summary beside it, and "the panel did not change"
|
||||||
|
cannot distinguish *"that field is not the stage"* from *"the panel never reads
|
||||||
|
the payload"*. Any future stage/difficulty probe must patch the header copy as
|
||||||
|
well, or be judged by what the game **does** on load rather than by the panel.
|
||||||
|
(This does not disturb the Points/flight-time/clear-ratio namings: those values
|
||||||
|
sit at both places and the two agree.)
|
||||||
|
2. The panel is **not** live-editable either: writing the header copy in
|
||||||
|
`/dev/shm` and forcing a re-render changed nothing, so the strings are formatted
|
||||||
|
before that copy is consulted again.
|
||||||
|
|
||||||
|
**Where this leaves the question.** Field guessing is now measurably the wrong
|
||||||
|
tool: three of the four candidate fields are eliminated and the remaining ones
|
||||||
|
(`+0`, `+12`, `+20`, `+32 = 79`, `+40 = 2014400`, `+48`, `+60`, `+64 = 09 15 00 00`)
|
||||||
|
have no oracle that a probe can read. The two routes that do have one are
|
||||||
|
**static analysis of the loader** — find what the title reads when it decides the
|
||||||
|
current mission and the selectable set, the same way the serializer at
|
||||||
|
`0x822C00E8` was found — or **clearing a stage in game**, which also settles
|
||||||
|
`Times Cleared` and whether `SHAB[1]` fills.
|
||||||
|
|
||||||
|
## ✅ SOLVED: `+52` is the stage, and the save picks the mission (2026-08-13)
|
||||||
|
|
||||||
|
**One `u32` chooses which of the 16 story stages the game plays.** Set GHAD `+52`
|
||||||
|
(and its header mirror, below) to 5 and the title reads
|
||||||
|
`STAGE 05 — Star System Escape`, loads it, briefs the **Gallia Asteroid Group**,
|
||||||
|
and takes off into an asteroid field with a different objective, roster and pilot
|
||||||
|
chatter — from a save whose only edited bytes are that field and its mirror
|
||||||
|
([details panel](../captures/savegame-stage05-probe-details.png) ·
|
||||||
|
[in flight](../captures/savegame-stage05-probe-inflight.png)).
|
||||||
|
|
||||||
|
### Why the earlier probes said "not the stage"
|
||||||
|
|
||||||
|
The header builder at `0x822870b4…0x82287128` copies a **summary of the progress
|
||||||
|
block into the GDHA container header**, and the screens read *that*:
|
||||||
|
|
||||||
|
| header | ← progress block (GHAD offset) | in this save |
|
||||||
|
|---|---|---|
|
||||||
|
| `+0x10` | `+0` | 0 |
|
||||||
|
| `+0x14` | **`+52`** | 2 → the panel's `STAGE 02` |
|
||||||
|
| `+0x18` | `+48` | 0 → `Game Status: At Standby` |
|
||||||
|
| `+0x1c` | `+24` | 4101 → `Points` |
|
||||||
|
| `+0x20` | `+4` | 324773 → `Flight Time` |
|
||||||
|
| `+0x24` | *computed* (`0x822842B0`, also cached to `+8`) | 5 → `Clear Ratio` |
|
||||||
|
| `+0x28` | `+12` | 0 → `Times Cleared` |
|
||||||
|
|
||||||
|
`savegame_edit.py` copies the donor header verbatim, so a payload-only edit leaves
|
||||||
|
that summary stale and the panel keeps showing the **old** stage — which is exactly
|
||||||
|
what made `+52` look refuted. **Patch both** (`hdr[0x14] = stage` and
|
||||||
|
`ghad[+52] = stage`) and the whole chain follows. The payload writer
|
||||||
|
`0x822BF678` walks the block field-by-field from `save+8`, so payload offset ==
|
||||||
|
progress-block offset; the block itself sits at **game-state `+312`** (Points at
|
||||||
|
`+336` = `312+24`, flight at `+316`), which is how the header mapping was read off
|
||||||
|
the disassembly rather than guessed.
|
||||||
|
|
||||||
|
The content header's **display string** (`Game01 07/23/2026 21:08 STAGE02 EASY`)
|
||||||
|
is separate and was *not* patched, so the slot row still reads `STAGE02` while the
|
||||||
|
Details panel reads `STAGE 05` — harmless, and a useful reminder that the row and
|
||||||
|
the panel have different sources.
|
||||||
|
|
||||||
|
### What this unlocks
|
||||||
|
|
||||||
|
Any story stage is now reachable without playing to it: write the probe into
|
||||||
|
slot 01 (back it up first — restore verified byte-identical here) and the existing
|
||||||
|
`tools/re-capture/launch_mission.sh` route loads it and takes off. That opens
|
||||||
|
**runtime captures in containers other than `Stage_S02`** — the remaining 85 XBG7
|
||||||
|
misses, the 24-vertex box identity, ship-placement generalisation to other classes
|
||||||
|
— and **per-stage unit definitions** for the Route-B coverage that grows by
|
||||||
|
visiting missions.
|
||||||
|
|
||||||
|
Still open: `+36` and `+56` (both 2, one of which is likely `Difficulty`, since the
|
||||||
|
header carries no difficulty field and the display string does), and the
|
||||||
|
`+32 = 79` / `+40 = 2014400` / `+64 = 09 15 00 00` fields.
|
||||||
|
|||||||
@@ -377,3 +377,144 @@ which the key-string extraction did not pick up.
|
|||||||
`+0x00c` is below the first field the loader ever names (`+0x018`), and the same
|
`+0x00c` is below the first field the loader ever names (`+0x018`), and the same
|
||||||
trap produced a false `YawDragFactor → +0x0c` hit when the code-derived map was
|
trap produced a false `YawDragFactor → +0x0c` hit when the code-derived map was
|
||||||
being built. It is an int-typed word, not a ratio.
|
being built. It is an int-typed word, not a ratio.
|
||||||
|
|
||||||
|
## Stage select makes the coverage limit go away (2026-08-13)
|
||||||
|
|
||||||
|
Unit definitions are instantiated **per stage**, so this note's coverage figure
|
||||||
|
(21 units, "grows by visiting missions") was blocked on progress. It no longer is:
|
||||||
|
the save's stage field is solved ([savegame](savegame-format.md#-solved-52-is-the-stage-and-the-save-picks-the-mission-2026-08-13)),
|
||||||
|
so any story stage can be flown from a hand-edited save and snapshotted.
|
||||||
|
|
||||||
|
First harvest — a mission at the **Night Ravens** (027 objectives, a different
|
||||||
|
roster entirely):
|
||||||
|
|
||||||
|
| | before | after |
|
||||||
|
|---|---|---|
|
||||||
|
| units with runtime values | 21 | **26** |
|
||||||
|
| rows in [`unit-runtime-fields.csv`](../captures/unit-runtime-fields.csv) | 1 827 | **2 143** |
|
||||||
|
| defaulted-on-disc values | 963 | **1 059** |
|
||||||
|
|
||||||
|
New units: `UN_e004_ADAN_ElanPlus_N`, `UN_e006_ADAN_Vindicator_Margras`,
|
||||||
|
`UN_f002_TCAF_DeltaSaber_W`, `UN_f002_TCAF_DeltaSaber_W_Player` (a second player
|
||||||
|
craft!) and `UN_mn040_Asteroid_Big` (47 defaulted values, `Size_Z = 2000`).
|
||||||
|
|
||||||
|
**Two traps, both paid for in this run:**
|
||||||
|
|
||||||
|
1. **`launch_mission.sh` does not load slot 01.** The LOAD GAME list preselects the
|
||||||
|
**last-used** slot — here **03** — and the script simply presses `A` on it, so a
|
||||||
|
probe written to slot 01 is ignored and the game flies whatever that slot holds.
|
||||||
|
The first "stage 14" snapshot was therefore stage 02 again, and the solver
|
||||||
|
correctly reported **0 new units**. Fix used: **patch every slot** (01/02/03) to
|
||||||
|
the target stage, or drive the list explicitly and confirm the highlighted slot
|
||||||
|
by screenshot before pressing `A`.
|
||||||
|
2. **Back up before patching, not after.** The backup taken mid-run already
|
||||||
|
contained the probe, so "restoring" it restored the probe; the pristine copy from
|
||||||
|
the earlier session was what actually restored slot 01 (`142b4f43…`, verified).
|
||||||
|
|
||||||
|
Regenerating the solver's token file: `idxd_tokens <GP_MAIN_GAME_E.pak> Generic`
|
||||||
|
emits the `REC`/`F` records `unit_runtime.py` wants — **110** of them are `UN_*`,
|
||||||
|
which is the disc's full unit count.
|
||||||
|
|
||||||
|
### Reading the objects with the code-derived layout, not the solver (2026-08-13)
|
||||||
|
|
||||||
|
`unit_runtime.py` places a field only if the **disc** values it somewhere — that is
|
||||||
|
what lets it score `(field, offset, encoding)` triples — so it resolved 58 of 153
|
||||||
|
fields from a single-mission snapshot. The layout in
|
||||||
|
[`data/unit_definition_layout.txt`](../../../crates/sylpheed-formats/data/unit_definition_layout.txt)
|
||||||
|
came from the title's own loader instead (`sub_82341A20`, where the field *name* of
|
||||||
|
every store is a string in the image), so it places **all 159**, including the ones
|
||||||
|
no disc record ever sets — which is precisely the Route-B target.
|
||||||
|
|
||||||
|
[`tools/re-capture/unit_dump_layout.py`](../../../tools/re-capture/unit_dump_layout.py)
|
||||||
|
reads every field of every live definition object with that layout, and keeps the
|
||||||
|
project's discipline: a field the disc **does** value is a **check**, not a new
|
||||||
|
value. Over two snapshots (19 objects): **700 disc cross-checks agree, 0 disagree.**
|
||||||
|
|
||||||
|
| | solver-derived | layout-derived |
|
||||||
|
|---|---|---|
|
||||||
|
| fields placed per object | 58 of 153 | **159** |
|
||||||
|
| rows over these 19 units | 609 | **2 736** |
|
||||||
|
| defaulted-on-disc values, disc-wide file | 1 059 | **2 351** |
|
||||||
|
|
||||||
|
Two things the run pinned down, both cheap to re-learn the hard way:
|
||||||
|
|
||||||
|
* **The layout table's offsets are DECIMAL** (`48 f32 Size_X`), while the solver's
|
||||||
|
CSV prints hex. Parsing it as hex puts every field `0x18` bytes late — and the
|
||||||
|
disc cross-check then fails on *everything*, which is exactly how the mistake
|
||||||
|
announced itself.
|
||||||
|
* **Angle fields can carry a prefix.** `AB_AA_PitchPlus` (afterburner) is still an
|
||||||
|
angle, so anchoring the `AV_`/`AA_` test at the start of the name reported two
|
||||||
|
player-craft fields as contradictions when they were 15°/16° in radians. With the
|
||||||
|
token matched anywhere, the cross-check is clean.
|
||||||
|
|
||||||
|
⚠️ One unit's object is **not** byte-identical between the two missions —
|
||||||
|
`UN_f201_TCAF_Tanker`. Either a per-mission override or a field the runtime mutates;
|
||||||
|
the merged CSV holds the later reading, and separating them needs a third snapshot.
|
||||||
|
|
||||||
|
### Targeting the next mission, and the check that these really are definitions (2026-08-13)
|
||||||
|
|
||||||
|
[`examples/roster_target.rs`](../../../crates/sylpheed-formats/examples/roster_target.rs)
|
||||||
|
ranks the stages by how many of their roster units are **not yet harvested**. The
|
||||||
|
rosters are `EnumUnit_S<NN>` tables whose TOC entries store a *path hash*, so the
|
||||||
|
stage label comes from hashing the candidate paths
|
||||||
|
(`hash::TOC_NAME_SCHEMES`) rather than from `UnitRoster::stage`, which can only
|
||||||
|
infer a tag when the roster happens to carry a `UN_S<NN>_…` prop.
|
||||||
|
|
||||||
|
It picked **S09 (10 missing)**; flying it took the file to **36 units / 4 785 rows /
|
||||||
|
3 439 defaulted-on-disc values**, adding `UN_e102_ADAN_Battleship`,
|
||||||
|
`UN_e104_ADAN_Carrier`, `UN_e107_ADAN_AAFrigate`, `UN_e011_ADAN_Attacker_B`,
|
||||||
|
`UN_e008_ADAN_TurretPlus`, `UN_be001_ADAN_TerrafoamingUnit`,
|
||||||
|
`UN_e001_ADAN_Elan_GR{,_Violeta}`, `UN_f102_TCAF_LightCarrier_Inv` and
|
||||||
|
`UN_f106_TCAF_Destroyer_Inv`.
|
||||||
|
|
||||||
|
**The objects are mission-independent — measured, not assumed.** Eleven units appear
|
||||||
|
in more than one snapshot, and four of them are *not* byte-identical across missions.
|
||||||
|
Comparing them **through the layout**: **zero mapped fields differ**. The 12 differing
|
||||||
|
4-byte slots are all **unmapped** — offsets `4/8/16/20` (the object header and name
|
||||||
|
pointer) and `0x250/0x268/0x300–0x308/0x330–0x338` (sub-object pointers) — i.e. guest
|
||||||
|
addresses, not data. So a value harvested in one mission is the unit's definition, not
|
||||||
|
a per-mission tweak, and the earlier `UN_f201_TCAF_Tanker` flag resolves the same way.
|
||||||
|
|
||||||
|
Cross-checks against the disc over the three snapshots: **1 052 agree, 0 disagree.**
|
||||||
|
|
||||||
|
One more angle field turned up the same way as the last: `Through_AngleMaximum`
|
||||||
|
(object `1.0472` = 60° in radians) carries neither an `AV_`/`AA_` token nor `Bank`, so
|
||||||
|
the degrees↔radians rule covers **anything with `Angle` in the name** too.
|
||||||
|
|
||||||
|
### Harvest state: 60 of 110 units, and where the remaining 50 live (2026-08-13)
|
||||||
|
|
||||||
|
Six targeted missions (S03, S06, S09, S13, S15, S16, plus the earlier Night Ravens
|
||||||
|
run) take the file to **60 units · 8 241 rows · 6 071 defaulted-on-disc values**,
|
||||||
|
from 21 units / 963 values this morning. Cross-checks against the disc across every
|
||||||
|
snapshot: **agree, 0 disagree** — the discipline never had to be relaxed.
|
||||||
|
|
||||||
|
Two results worth calling out:
|
||||||
|
|
||||||
|
* **`UN_e901_ADAN_Boss` and `UN_e910_core_ADAN_GeneratorCore` are harvested**
|
||||||
|
(HP 10 000, `Size_X` 500, `Size_Radius` 250, `MaximumVelocity` 450) — **without the
|
||||||
|
boss ever appearing on screen**. Definitions are instantiated when the stage loads,
|
||||||
|
so a unit only has to be in the mission's roster, not in view. That is a much
|
||||||
|
weaker requirement than the capture work needs, and it is why the same stage that
|
||||||
|
could not give the `e901` geometry gave its stats immediately.
|
||||||
|
* **The extra stages are not reachable this way.** Setting the save's stage field to
|
||||||
|
**27** boots to the title and then the emulator exits during the load — likewise
|
||||||
|
the other `S24…S29` entries. Story stages 1–16 all load normally. So the field
|
||||||
|
addresses the **story campaign only**, and the EX/challenge rosters need whatever
|
||||||
|
menu path Challenge mode uses.
|
||||||
|
|
||||||
|
That bounds the rest of the work: of the units still unread, the roster ranking puts
|
||||||
|
almost all of them in `S24/S25/S27/S28/S29` (`*_EX4`, `*_EX5`, `*EX` variants,
|
||||||
|
`UN_f004_TCAF_DeltaSaber_A_Player`).
|
||||||
|
|
||||||
|
**S08 closed the story stages** — `UN_be005_ADAN_SpaceFortress` and
|
||||||
|
`UN_mn500_ADAN_FloatingMine` (plus six `UN_S08_Asteroid_cmesh_*` collision meshes),
|
||||||
|
taking the file to **68 units · 9 393 rows · 7 115 defaulted-on-disc values**. Every
|
||||||
|
unit any story mission fields is now read.
|
||||||
|
|
||||||
|
**Probe: `Game Status = GAME_CLEAR` does NOT unlock a Challenge entry.** Setting GHAD
|
||||||
|
`+48` (and its header mirror `+0x18`) to **2** — the `STATE_GAME_CLEAR` end of the
|
||||||
|
enum this doc names — leaves both menus exactly as they were: the title still offers
|
||||||
|
`NEW GAME / LOAD GAME / TUTORIAL / OPTIONS / EXTRAS`, and EXTRAS still offers only
|
||||||
|
`MISSION SELECT / MOVIE THEATER / BACK`. So the EX rosters are not gated on that
|
||||||
|
field, and `GP_CHALLENGE.pak`'s content is reached some other way (or not at all from
|
||||||
|
these screens).
|
||||||
|
|||||||
@@ -1354,3 +1354,376 @@ Not settled: `e106_brg_01_b_02` ≡ `e106_brg_01_l` (51 verts). A second 51-vert
|
|||||||
holds three near-identical 51-vertex runs, so the pair has no oracle yet.
|
holds three near-identical 51-vertex runs, so the pair has no oracle yet.
|
||||||
`n006_01A` ≡ `n006_01B` shows a single `vbase` in all three logs — consistent
|
`n006_01A` ≡ `n006_01B` shows a single `vbase` in all three logs — consistent
|
||||||
with real reuse, but equally with only one of the two being on screen.
|
with real reuse, but equally with only one of the two being on screen.
|
||||||
|
|
||||||
|
## ✅ The `[index buffer][vertex buffer]` layout is RUNTIME-VERIFIED (2026-08-13)
|
||||||
|
|
||||||
|
Every anchor decision in this decoder rests on one assumption nothing on disc
|
||||||
|
states: a block's index buffer sits **immediately before** its vertex buffer, at
|
||||||
|
`vb − idx_count*2 − pad` with `pad ≤ 3` (`anchor_pool_mesh`). It was also the
|
||||||
|
prime suspect for the residual misses — the note above recorded a capture-proven
|
||||||
|
`e106_eng_02_l` block that the decoder *rejected*, and "the index buffer is
|
||||||
|
somewhere else" would have explained it.
|
||||||
|
|
||||||
|
It is now measured, not assumed. The F10 ship capture in `xenia-canary-native`
|
||||||
|
was extended to log each draw's index buffer (`ib base=… count=… min=… max=…`,
|
||||||
|
`CaptureShipDrawForRE`), and `examples/capture_ib_truth.rs` scores it against our
|
||||||
|
decode of the same container (`Stage_S02`, load constant `0x17FE3FF4`,
|
||||||
|
[full table](../captures/stage-s02-index-buffer-truth.txt)):
|
||||||
|
|
||||||
|
| measurement, 42 drawn buffers placed in the container | result |
|
||||||
|
|---|---|
|
||||||
|
| our `idx_count` == sum of the draw's index batches | **42 / 42** |
|
||||||
|
| union of batches covers the vertex pool exactly (`max_idx == vcount−1`) | **42 / 42** |
|
||||||
|
| index data at `vb − 2*idx_count − pad`, `pad ≤ 3` (single-block path) | **30 / 30** (20 at pad 0, 10 at pad 2) |
|
||||||
|
| the remaining 12 | all **grouped pools** — one index pool for the whole group, so the per-sub-mesh distance is larger by construction (`_rou_f105_break` sub-meshes, `n301_02B`) |
|
||||||
|
|
||||||
|
So the layout assumption is **correct**, the index count we decode is **exactly**
|
||||||
|
what the engine indexes, and `eng_02_l`'s rejection was the connectivity gate
|
||||||
|
(since replaced by the winding gate), not the index location. The coverage rule
|
||||||
|
shipped earlier (`XBG7_COVER_SLACK = 1`, "a real block reaches its last vertex")
|
||||||
|
is independently confirmed: every drawn buffer's index union ends exactly at
|
||||||
|
`vcount−1`.
|
||||||
|
|
||||||
|
### The trap that hid this: the capture kept only the FIRST batch
|
||||||
|
|
||||||
|
The engine issues **several draws over one vertex buffer**, each indexing a
|
||||||
|
sub-range (2–9 batches here; the player craft's 10 891-vertex buffer takes 9).
|
||||||
|
The capture de-duped by `(vbase, WVP transform)`, so it recorded one batch per
|
||||||
|
placement — which is exactly the recorded mystery *"the capture's `indices=` field
|
||||||
|
disagrees with the descriptor index count (119-vert twin draws log `indices=21`
|
||||||
|
vs our 246)"*. Not a disagreement: `21` was the first of two batches, and
|
||||||
|
`21 + 225 = 246`. Both twins now read `batches 2 · idx 246 · span 492 · gap 0`.
|
||||||
|
Mixing the index range into the de-dup key (same commit) makes every batch
|
||||||
|
appear. **Any conclusion drawn from a pre-2026-08-13 capture's `indices=` value,
|
||||||
|
or from `vbase − ibase`, is about one batch and not about the block.**
|
||||||
|
|
||||||
|
### ✅ FIXED, and it is the biggest silent defect found so far: the index run was one element late (2026-08-13)
|
||||||
|
|
||||||
|
Comparing captured index VALUES (not just counts) against our decode turned the
|
||||||
|
layout check above into a byte-level oracle — `examples/capture_index_bytes.rs`
|
||||||
|
lines each draw batch up against `GameMesh::indices` at the batch's own offset.
|
||||||
|
Result on `Stage_S02`: **76 of 93 index runs identical, 17 differing — and every
|
||||||
|
difference was a shift by exactly one element**, on buffers whose real index data
|
||||||
|
sits at **pad 2**.
|
||||||
|
|
||||||
|
Cause: `anchor_pool_mesh` took the **first** pad that validated, and pad 0 is
|
||||||
|
tried first *with the looser gate* (`XBG7_PAD0_CONSISTENCY` 0.70, against 0.85 for
|
||||||
|
pad ≥ 1). For a pad-2 block, reading at pad 0 yields `[true[1], true[2], …,
|
||||||
|
garbage]` — every index still in range, the pool still covered, the positions
|
||||||
|
untouched, and the winding often just above 0.70. So it validated, and every
|
||||||
|
triangle came out mis-wired.
|
||||||
|
|
||||||
|
**The signature is decidable offline** (`examples/index_pad_check.rs`): a shifted
|
||||||
|
run wires arbitrary vertices, so triangles come out **degenerate** (a repeated
|
||||||
|
index). In `Stage_S02`, 32 resources read at pad 0 with 1–2 156 degenerate
|
||||||
|
triangles and winding 0.63–0.76, while the same blocks at pad 2 give **zero**
|
||||||
|
degenerate triangles and winding 0.98–1.00. And degeneracy is near-perfectly
|
||||||
|
clean as an invariant: **282 of 283** correctly anchored blocks in that container
|
||||||
|
have zero degenerate triangles.
|
||||||
|
|
||||||
|
**Fix:** score every validating pad by `(degenerate triangles, then winding)` and
|
||||||
|
keep the best, instead of returning the first. Revert knob
|
||||||
|
`XBG7_PAD_FIRST_MATCH=1` restores the old behaviour, which is how the before/after
|
||||||
|
below was measured.
|
||||||
|
|
||||||
|
| measurement | first-match (old) | scored (new) |
|
||||||
|
|---|---|---|
|
||||||
|
| captured index runs identical to ours (`Stage_S02`, 2 025 elements) | 76 / 93 | **93 / 93** |
|
||||||
|
| decoded sub-meshes whose index run holds a degenerate triangle (disc-wide) | **579** | **16** |
|
||||||
|
| sub-meshes whose index run changed | — | **575** of 8 850 |
|
||||||
|
| resources decoded · vertex anchors · cross-container minority decodes | 6 209 · — · 89 | **unchanged** (6 209 · identical `vb` · 89) |
|
||||||
|
|
||||||
|
So 575 sub-meshes — 6.5 % of the disc's geometry — were being decoded with
|
||||||
|
mis-wired triangles under a completely correct-looking decode: right resource,
|
||||||
|
right buffer, right vertex count, right coverage. **No count-based metric could
|
||||||
|
see it**; only the captured index values, and then the degeneracy signature they
|
||||||
|
pointed at. Locked in by
|
||||||
|
`tests/mesh_disc.rs::decoded_index_runs_have_almost_no_degenerate_triangles`.
|
||||||
|
|
||||||
|
Honest limits: of the moved runs, **92** had a pad-0 reading with no degenerate
|
||||||
|
triangle and moved on the winding tie-break alone (83 such cases existed before
|
||||||
|
the fix, so the tie-break newly decides 9) — weaker evidence than the degeneracy
|
||||||
|
signature, and unverified by the capture. The **16** remaining degenerate runs are
|
||||||
|
the grouped `.dat` break composites in `ptc_pack` (`f102`/`f104`/`e107`, whose
|
||||||
|
marker lists are documented not to map onto the stored blocks), `e201_bdy_03_m`
|
||||||
|
(2 containers) and `_rou_f402_dead` (9) — each already suspect on other grounds,
|
||||||
|
and now the concrete next targets.
|
||||||
|
|
||||||
|
**And it is plainly visible** — the check the numbers kept failing at.
|
||||||
|
`ship_render --static` on `f101` (the ACROPOLIS, whose 25 448-vertex hull carried
|
||||||
|
2 156 degenerate triangles) both ways:
|
||||||
|
[before / after](../captures/f101-index-shift-before-after.png). The old decode is
|
||||||
|
a torn mess of shards; the new one is a coherent capital ship with flat decks,
|
||||||
|
panel lines, bridge tower and funnels. Same 31 991 triangles, same 4 placements,
|
||||||
|
same bounds — only the wiring differs. Third time this project has learned it:
|
||||||
|
**render the output**; a metric that cannot see a 1 600-unit slab could not see
|
||||||
|
this either.
|
||||||
|
|
||||||
|
### ✅ Following it through: degenerate index runs 582 → 1 (2026-08-13)
|
||||||
|
|
||||||
|
The pad-scoring fix left 16 dirty sub-meshes. Two follow-ups cleared all but one.
|
||||||
|
|
||||||
|
**1. The grouped path had the same first-match bug.** `anchor_grouped_meshes`
|
||||||
|
picks `ib0 = vb0 − span − pad` the same way, so it got the same scoring (pivot
|
||||||
|
run's degenerate count, then winding). That cleared every remaining `ptc_pack`
|
||||||
|
composite — `f102_break.dat` (161 degenerate triangles), `f104_break.dat` (3
|
||||||
|
sub-meshes) and `e107_break.dat` — 16 → 11.
|
||||||
|
|
||||||
|
**2. Prefer a degenerate-free candidate over an earlier dirty one.** The last two
|
||||||
|
resources were anchored on a *lookalike earlier in file order*:
|
||||||
|
`examples/better_home.rs` scores every candidate `(start, pad)` for a resource and
|
||||||
|
showed **exactly one** degenerate-free, pool-covering block for `e201_bdy_03_m`
|
||||||
|
(`0x316383C`, ours was `0x248D054` with 4 degenerate triangles) and one for
|
||||||
|
`_rou_f402_dead`. So `anchor_pool_mesh` now keeps first-match order for every
|
||||||
|
clean hit and only searches on when the accepted block is provably mis-fitted,
|
||||||
|
falling back to the dirty block if nothing clean exists (coverage can never
|
||||||
|
regress). 11 → 1.
|
||||||
|
|
||||||
|
| | first-match | + pad scoring | + these two |
|
||||||
|
|---|---|---|---|
|
||||||
|
| decoded sub-meshes with a degenerate index run (disc-wide) | 582 | 11 | **1** |
|
||||||
|
| captured index runs identical (`Stage_S02`) | 76/93 | 93/93 | **93/93** |
|
||||||
|
| resources decoded / misses | 6 209 / 85 | 6 209 / 85 | **6 209 / 85** |
|
||||||
|
| sub-meshes whose index run changed | — | 580 | 590 |
|
||||||
|
| of those, vertex anchor moved | — | 0 | **10** (`_rou_f402_dead` ×8, `e201_bdy_03_m` ×2) |
|
||||||
|
|
||||||
|
**The consistency screen went 89 → 96 minority decodes, and that is progress.**
|
||||||
|
All seven new rows are `_rou_f402_dead`: eight containers now agree on a
|
||||||
|
**32 × 25 × 8** box, which gives the resource a *majority for the first time*, so
|
||||||
|
the seven copies that still land elsewhere (`160×160×78`, `519×100000×519`,
|
||||||
|
`856×463×803`, `779×5769×5769`) are finally **named** instead of hiding behind "no
|
||||||
|
majority". Textbook case of consistency being the weaker witness: the number rose
|
||||||
|
because the decoder got better.
|
||||||
|
|
||||||
|
**The one remaining dirty run** is `_rou_f402_dead` in `Stage_S09`. Its
|
||||||
|
degenerate-free block (`0x17AE620`, validates at pad 0) is **claimed by
|
||||||
|
`e_rou_f003_Near`** — so distinct assignment blocks it, not a gate. Both are
|
||||||
|
24-vertex bounding boxes: the identity class that needs descriptor-level data, not
|
||||||
|
another heuristic. A winding-floor escalation for this case was written, measured
|
||||||
|
to fire for **nothing** on the disc, and reverted (the comment survives in
|
||||||
|
`anchor_pool_mesh`).
|
||||||
|
|
||||||
|
**Next target, with the caveat that killed the last attempt:** six containers
|
||||||
|
decode `_rou_f402_dead` to a *clean but wrong* block, so several degenerate-free
|
||||||
|
candidates exist and file order picks badly. The majority span would separate
|
||||||
|
them — but "flag, don't silently rewrite geometry on a vote" still stands, so this
|
||||||
|
needs the box-identity data, or a capture of a stage that draws it.
|
||||||
|
|
||||||
|
### A capture from a DIFFERENT mission — out-of-sample validation, and how containers get loaded (2026-08-13)
|
||||||
|
|
||||||
|
With the stage now selectable from a hand-edited save
|
||||||
|
([savegame notes](savegame-format.md#-solved-52-is-the-stage-and-the-save-picks-the-mission-2026-08-13)),
|
||||||
|
`ship_capture_close.sh` was run in **story stage 05** (`Lebendorf_far`, the Gallia
|
||||||
|
asteroid field) instead of stage 02 — three logs, ~11 200 draws, target
|
||||||
|
`UN_f105_TCAF_Cruiser` closed to 1 375 units.
|
||||||
|
|
||||||
|
**The pad fix validates out of sample.** These draws had no part in deriving it:
|
||||||
|
|
||||||
|
```
|
||||||
|
index runs compared: 124 identical · 0 differing · 4 no decoded resource
|
||||||
|
2 769 index elements checked against the GPU
|
||||||
|
```
|
||||||
|
|
||||||
|
So 124/124 index runs from a mission the fix never saw agree byte for byte, on top
|
||||||
|
of the 93/93 from the stage-02 capture.
|
||||||
|
|
||||||
|
**A mission has SEVERAL stage containers resident, and the drawn buffers split
|
||||||
|
between them.** Scoring the same logs against two containers:
|
||||||
|
|
||||||
|
| container | its own load constant | drawn buffers placed | what they are |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `Stage_S02.xpr` | `0x17FE3FF4` (same as the stage-02 run) | **65** | the shared TCAF/ADAN fleet — `f105_*`, `e105_*`, `e106_*`, `f106_*`, `_rou_*` |
|
||||||
|
| `Stage_S05.xpr` | `0x1927B7F4` | **5** | the **f101 ACROPOLIS** (`bdy_01/02/03`, `eng_01`, `wep_01`) — the mission's escort |
|
||||||
|
|
||||||
|
Both sets have exact index counts and exact pool coverage, so both placements are
|
||||||
|
real. The split is explained by content, not by guesswork: `f105_bdy_01` is in
|
||||||
|
**13 of the 22** stage containers and **not in `Stage_S05.xpr` at all**, while the
|
||||||
|
f101 parts the engine drew match S05's own copy. So the resident set follows the
|
||||||
|
**mission's unit roster** — every mission that fields the common fleet pulls the
|
||||||
|
container that holds it (`Stage_S02.xpr`, the largest at 57 MB), while its own
|
||||||
|
container supplies what is unique to it.
|
||||||
|
|
||||||
|
**Consequence for the remaining 82–85 misses:** flying a different *story* stage
|
||||||
|
is not the same as reaching a different *container*. To cover a specific container
|
||||||
|
one has to pick a mission whose roster contains units that live **only** there —
|
||||||
|
which is a static question (resource names per container × the stage's
|
||||||
|
`EnumUnit_SNN` roster), not another capture run. That is the cheap way to aim the
|
||||||
|
next capture, and the first-ever truth rows for a non-`Stage_S02` container (the
|
||||||
|
five f101 rows above) show the method works the moment the roster does.
|
||||||
|
|
||||||
|
### 🔎 ROOT CAUSE for a never-decoding family: a grouped pool can MIX STRIDES (2026-08-13)
|
||||||
|
|
||||||
|
A capture can do more than check anchors — it can name a resource we never decode.
|
||||||
|
`capture_ib_truth` now proposes an identity for every drawn buffer our decoder
|
||||||
|
cannot place, by matching the buffer's `(vertex, index)` counts against
|
||||||
|
**declared-but-not-decoded** resources. In the stage-05 and stage-16 mission
|
||||||
|
captures that fired on one buffer, and it identified a member of the
|
||||||
|
never-decoding set: **`n201_01` / `_02` / `_03`** in `Stage_S02.xpr` (three of the
|
||||||
|
63 resources that decode in no container at all).
|
||||||
|
|
||||||
|
The capture pins the whole group. Its four declared markers are
|
||||||
|
`(777,4464) (869,4464) (192,576) (869,4464)`, and the drawn offsets are
|
||||||
|
|
||||||
|
| sub | vertex buffer | index buffer | indices | verts | **stride** | shader |
|
||||||
|
|---|---|---|---|---|---|---|
|
||||||
|
| #0 | `0x32BA71C` | `0x32B39FC` | 4464 | 777 | **24** | `0xD2D7612373F4AE3D` |
|
||||||
|
| #1 | `0x32BEFF4` | `0x32B5CDC` | 4464 | 869 | **24** | `0xD742809411292720` |
|
||||||
|
| #2 | `0x32C416C` | `0x32B7FBC` | 576 | 192 | **24** | `0x57A54C86C90995F8` |
|
||||||
|
| #3 | `0x32C536C` | `0x32B843C` | 4464 | 869 | **28** | `0x4F5B7E6C2ED3460A` |
|
||||||
|
|
||||||
|
Measured against the file, the layout is **exactly what the decoder assumes**: the
|
||||||
|
index buffers pack tightly (`#0` ends where `#1` starts, …), the last one ends
|
||||||
|
*flush* at `vb0` (so pad 0, and the pool span 27 936 matches
|
||||||
|
`align4`-summed markers to the byte), the vertex buffers are contiguous, and every
|
||||||
|
sub-mesh's max index is `verts − 1`. Nothing about the grouping is wrong.
|
||||||
|
|
||||||
|
**What is wrong is one stride.** Sub-mesh #3 is stride **28**, not 24 — and each
|
||||||
|
sub-mesh has its **own vertex shader**, i.e. its own declaration.
|
||||||
|
`anchor_grouped_meshes` parses a *single* declaration per resource and applies its
|
||||||
|
stride to the whole pool, so it reads #3 out of phase: dumping that pool at stride
|
||||||
|
24 gives 372 non-finite position components out of 2 607, and
|
||||||
|
`mesh::debug_grouped_report` at the capture-proven `vb0` reports exactly that —
|
||||||
|
`pad 0: position component NaN is not finite/plausible`. The pivot is chosen as the
|
||||||
|
largest index count, ties going to the last marker, which lands **on the one
|
||||||
|
sub-mesh whose stride is wrong**, so the entire resource is declined.
|
||||||
|
|
||||||
|
So this family is not a threshold problem and not an anchoring problem: **the
|
||||||
|
descriptor must carry a declaration per sub-mesh**, and reading one for all of them
|
||||||
|
is the defect. Next step is to look for those per-sub-mesh declarations in the
|
||||||
|
descriptor (the four distinct shader hashes say the game has four), then let the
|
||||||
|
grouped path use them.
|
||||||
|
|
||||||
|
**Targeting, for the record** (`examples/miss_targets.rs`): of the misses, **63
|
||||||
|
decode nowhere** and 13 miss in one container while decoding in another. The
|
||||||
|
never-decoding set clusters as `Stage_S16.xpr` 21 (all `e901_wing_05_*`),
|
||||||
|
`ptc_pack.xpr` 12 (`.DAT` composites), `Base.xpr` 6 (`g005`, `t170`, `t180`, …),
|
||||||
|
then per-stage `n2xx` station groups (S02 `n201`, S06 `n202`, S07 `n203`,
|
||||||
|
S09/S25 `n205`, S15 `n207_208`). 58 of the 63 live in exactly one container.
|
||||||
|
Flying stage 16 did **not** get the `e901` wings drawn (the boss appears later in
|
||||||
|
the mission), which is the next lesson: choosing the mission puts a container in
|
||||||
|
memory, but the unit still has to be **on screen** for a draw to exist.
|
||||||
|
|
||||||
|
### ✅ The descriptor carries a declaration PER SUB-MESH — worth 38 misses (2026-08-13)
|
||||||
|
|
||||||
|
Following the `n201` mixed-stride finding: the descriptor was dumped around every
|
||||||
|
index marker (`examples/desc_dump.rs`), and the layout is unambiguous — **each
|
||||||
|
marker is followed by its own element triples**, terminated by
|
||||||
|
`off=0x00FF0000 / code=0xFFFFFFFF`:
|
||||||
|
|
||||||
|
| `n201_01` marker | verts / indices | elements (offset, code) | stride |
|
||||||
|
|---|---|---|---|
|
||||||
|
| `@0x428` | 777 / 4464 | 0 `2A23B9`, 12 `1A2360`, 20 `182886` | 24 |
|
||||||
|
| `@0x900` | 869 / 4464 | 0 `2A23B9`, 12 `1A2360`, 20 `2C235F` | 24 |
|
||||||
|
| `@0xDD8` | 192 / 576 | 0 `2A23B9`, 12 `1A2360`, 20 `182886` | 24 |
|
||||||
|
| `@0x12B0` | 869 / 4464 | 0 `2A23B9`, 12 `1A2360`, 20 `182886`, **24 `2C235F`** | **28** |
|
||||||
|
|
||||||
|
That is exactly the capture's `stride=28` on the fourth draw, and it explains the
|
||||||
|
four distinct vertex-shader hashes. `parse_vertex_decl` read the **first**
|
||||||
|
declaration and applied it to the whole pool; `all_vertex_decls` now reads one per
|
||||||
|
marker, and `anchor_grouped_meshes` uses each sub-mesh's own stride for the vertex
|
||||||
|
pool walk, the pivot validation and the read.
|
||||||
|
|
||||||
|
**Measured with `XBG7_SUBMESH_DECLS=1`:**
|
||||||
|
|
||||||
|
| | default | per-sub-mesh declarations |
|
||||||
|
|---|---|---|
|
||||||
|
| resources that never decode (disc-wide) | 85 | **47** |
|
||||||
|
| resources that decode in **no** container | 63 | **30** |
|
||||||
|
| capture oracles (`Stage_S02`) | 93/93 runs, 42/42 index counts | **unchanged** |
|
||||||
|
| cross-container minority decodes | 96 | 96 |
|
||||||
|
| decoded index runs with a degenerate triangle | 1 | 5 |
|
||||||
|
|
||||||
|
And `debug_grouped_report` at `n201_01`'s **capture-proven** pool start now reads
|
||||||
|
`pad 0: ACCEPTED`, where it used to read `position component NaN` — the block the
|
||||||
|
engine draws from is finally acceptable to the decoder.
|
||||||
|
|
||||||
|
**Selection had to catch up first** (it now has — see the next section):
|
||||||
|
|
||||||
|
* the three `n201_0x` copies all settle on ONE pool, so
|
||||||
|
`tests/mesh_consistency_disc.rs::twin_pairs_do_not_share_a_buffer` fails — a twin
|
||||||
|
collapse is the one thing this project has decided never to ship;
|
||||||
|
* production still picks a pool start 4 bytes before sub-mesh **#1** (`0x32BEFF0`)
|
||||||
|
instead of the proven `0x32BA71C`, even though that start **is** in the candidate
|
||||||
|
list, validates at pad 0, and is claimed by nobody in the final output — so the
|
||||||
|
remaining defect is in *choosing* among candidates, not in the format reading;
|
||||||
|
* four newly decoded `ptc_pack` `.dat` composites carry degenerate triangles
|
||||||
|
(`f202_break`, `e108_break`, `f106_break`, `eff_s901_e04`) — new coverage of
|
||||||
|
imperfect quality rather than a regression, but not clean either.
|
||||||
|
|
||||||
|
So the format question is **settled** (and capture-confirmed), the coverage win is
|
||||||
|
real and measured, and what stands between the two is the same
|
||||||
|
selection/distinct-assignment machinery that the pad work already improved once.
|
||||||
|
That is the next step, with `n201`'s proven offsets as the acceptance test.
|
||||||
|
|
||||||
|
### ✅ …and the selection bug it exposed: prefer the candidate that explains the WHOLE pool
|
||||||
|
|
||||||
|
With per-sub-mesh declarations on, `n201_01` decoded as a 2-part fragment **4 bytes**
|
||||||
|
off. The reason, from `debug_grouped_report` at both offsets:
|
||||||
|
|
||||||
|
```
|
||||||
|
vb0 0x32BA718 (4 bytes early) pad 2: ACCEPTED ← earlier in file order, so first-match took it
|
||||||
|
vb0 0x32BA71C (capture-proven) pad 0: ACCEPTED
|
||||||
|
```
|
||||||
|
|
||||||
|
Both validate for the **pivot** — the pivot alone cannot separate them. At the early
|
||||||
|
one, two of the four sub-meshes then fall out as out-of-range, so the resource decoded
|
||||||
|
as a fragment whose first sub-mesh sat at `0x32BEFF0` (= the early `vb0` + 777·24).
|
||||||
|
|
||||||
|
`anchor_grouped_meshes` now **builds** each accepted candidate and keeps the one that
|
||||||
|
explains the most of the declared pool, returning immediately when a candidate
|
||||||
|
explains all `n` sub-meshes and falling back to the best partial otherwise (so it can
|
||||||
|
never decode less than first-match did). The result is exact:
|
||||||
|
|
||||||
|
| `n201_01` sub-mesh | decoded vertex offset | capture-proven |
|
||||||
|
|---|---|---|
|
||||||
|
| #0 | `0x32BA71C` | `0x32BA71C` ✅ |
|
||||||
|
| #1 | `0x32BEFF4` | `0x32BEFF4` ✅ |
|
||||||
|
| #2 | `0x32C416C` | `0x32C416C` ✅ |
|
||||||
|
| #3 | `0x32C536C` | `0x32C536C` ✅ |
|
||||||
|
|
||||||
|
and `n201_02` / `n201_03` take their own distinct pools (`0x3353BEC`, `0x3388BEC`), so
|
||||||
|
the twin collapse is gone.
|
||||||
|
|
||||||
|
**Both changes are now the default** (`XBG7_SUBMESH_DECLS=0` reverts the declaration
|
||||||
|
reading):
|
||||||
|
|
||||||
|
| | before | after |
|
||||||
|
|---|---|---|
|
||||||
|
| resources that never decode | 85 | **47** |
|
||||||
|
| resources decoding in **no** container | 63 | **30** |
|
||||||
|
| decoded index runs with a degenerate triangle | 1 | **1** |
|
||||||
|
| cross-container minority decodes | 96 | 96 |
|
||||||
|
| captured index runs identical, stage-02 capture | 93/93 | **93/93** |
|
||||||
|
| captured index runs identical, stage-05 mission capture | 124/128 (4 undecoded) | **128/128** |
|
||||||
|
|
||||||
|
The last row is the one that matters most: the four buffers that capture could not
|
||||||
|
name are the `n201` family, and now they decode **and** their index runs match the
|
||||||
|
GPU byte for byte. Suite green (`twin_pairs_do_not_share_a_buffer` included) apart
|
||||||
|
from the pre-existing known-failing cross-container consistency test.
|
||||||
|
|
||||||
|
### Where the anchor work stands: 6 247 / 6 294 (99.25 %), and what the residual 47 is
|
||||||
|
|
||||||
|
`examples/why_missed.rs` reports the furthest gate for every resource a container
|
||||||
|
fails to decode. Disc-wide that is **47 rows / 43 distinct names**, and they are
|
||||||
|
not a threshold away — they are mostly **not ship geometry**:
|
||||||
|
|
||||||
|
| class | rows | what they are |
|
||||||
|
|---|---|---|
|
||||||
|
| `e_rou_` / `_rou_` pose & proxy composites | **30** | scene-composite records like `e_rou_e901_attackA_start`, `…_guard_end`, `…_stand` — 24-vertex marker boxes whose extent is **0.010** |
|
||||||
|
| `.DAT` particle composites (`ptc_pack`) | 6 | `h309.DAT`, `m001_n.DAT`, … — the marker lists that provably do not map onto the stored blocks |
|
||||||
|
| damage / LOD variants | 8 | `e101_bdy_02_d` (indices reach 13 171 of 15 430 vertices), `e901_wing_05_*_m`, … |
|
||||||
|
| props / other | 3 | `g005` (extent 0.196), `_rou_f001_wep_05`, `e_rou_e005` |
|
||||||
|
|
||||||
|
By gate: **extent 32 · coverage 8 · winding 7**. The extent bucket is almost
|
||||||
|
entirely the pose-proxy boxes — a 0.010-unit cube is a *marker*, not a mesh, and
|
||||||
|
lowering the floor to admit them was measured before and refuted (it bought 2
|
||||||
|
resources and cost cross-container consistency). The `e901_wing_05_L/R` pair is the
|
||||||
|
one genuinely interesting residual: winding **0.587 / 0.570** against the 0.70 floor,
|
||||||
|
which is what a **thin double-sided sheet** looks like when face normals are compared
|
||||||
|
to averaged vertex normals — plausible but unproven, and the only way to settle it is
|
||||||
|
a capture with the boss on screen (flying stage 16 was not enough: the container is
|
||||||
|
resident but the unit never appeared).
|
||||||
|
|
||||||
|
So the anchor line of work is **done for practical purposes**: every real mesh the
|
||||||
|
engine draws in three captured missions decodes, at the offsets the GPU used, with
|
||||||
|
index runs matching byte for byte (93/93 and 128/128).
|
||||||
|
|||||||
65
tools/re-capture/ab_probe.py
Normal file
65
tools/re-capture/ab_probe.py
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Which input is the AFTERBURNER, and what does it do?
|
||||||
|
|
||||||
|
The definition carries `AB_ConsumeShield_Begin 50`, `AB_ConsumeShield 10` and a set
|
||||||
|
of `AB_AV_*` turn caps far below the normal ones (roll 40 vs 125-200 °/s, pitch-up
|
||||||
|
30 vs 70-150) — so the burner should cost shield and cut agility. It carries no
|
||||||
|
`AB_*Velocity`, so whether it raises the speed target at all is an open question.
|
||||||
|
|
||||||
|
Method: hold `RT` (max-speed baseline), then hold each candidate button in turn and
|
||||||
|
measure speed over 1-second windows. A button that pushes speed past the RT plateau
|
||||||
|
is the burner. Buttons known to do something else are skipped: `RB` is the nose gun,
|
||||||
|
`Y` the missile mount, the d-pad the tactical map (see flight-controls-runtime.md).
|
||||||
|
|
||||||
|
Usage: ab_probe.py <out.csv> [hold_s]
|
||||||
|
"""
|
||||||
|
import math, os, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def windowed(seq, lo, hi):
|
||||||
|
a = [s for s in seq if s[0] >= lo][0]
|
||||||
|
b = [s for s in seq if s[0] <= hi][-1]
|
||||||
|
return math.dist(a[1:], b[1:]) / (b[0] - a[0])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
hold = float(sys.argv[2]) if len(sys.argv) > 2 else 5.0
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
rows = []
|
||||||
|
pad("trig", "RT", "1.0") # max-speed baseline for every phase
|
||||||
|
time.sleep(2.0)
|
||||||
|
for label in ("baseline", "A", "B", "X", "LB", "baseline2"):
|
||||||
|
if label.startswith("baseline"):
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
pad("press", label)
|
||||||
|
seq, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < hold:
|
||||||
|
p = speed_law.pos_at(w.fd, off)
|
||||||
|
seq.append((round(time.time() - t0, 3), *p))
|
||||||
|
time.sleep(0.05)
|
||||||
|
if not label.startswith("baseline"):
|
||||||
|
pad("release", label)
|
||||||
|
for s in seq:
|
||||||
|
rows.append((label, *s))
|
||||||
|
try:
|
||||||
|
v = [windowed(seq, t, t + 1.0) for t in range(int(hold) - 1)]
|
||||||
|
print(f"# {label:<10} speed per 1 s window: " + " ".join(f"{x:6.0f}" for x in v))
|
||||||
|
except Exception as e:
|
||||||
|
print(f"# {label:<10} failed: {e}")
|
||||||
|
pad("trig", "RT", "0.0"); pad("reset")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("phase,t,x,y,z\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print(f"# wrote {out_csv}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
53
tools/re-capture/ab_state_probe.py
Normal file
53
tools/re-capture/ab_state_probe.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Find the afterburner by what it COSTS, not by what it speeds up.
|
||||||
|
|
||||||
|
`ab_probe.py` held A/B/X/LB at full throttle and none of them moved the speed —
|
||||||
|
so either the burner is a different input or it does not raise the speed target
|
||||||
|
(the definition has no `AB_*Velocity`, only `AB_AV_*` turn caps and
|
||||||
|
`AB_ConsumeShield{,_Begin}` 10 / 50). This looks for the cost instead: sample a
|
||||||
|
window of the player object while each candidate is held, and report any float
|
||||||
|
that FALLS during the hold and not before it — `AB_ConsumeShield_Begin 50` should
|
||||||
|
be a visible step.
|
||||||
|
|
||||||
|
Usage: ab_state_probe.py [hold_s]
|
||||||
|
"""
|
||||||
|
import os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
WIN_LO, WIN_HI = 0x100, 0x220 # object window, relative to the position triple
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def snap(fd, off):
|
||||||
|
b = os.pread(fd, WIN_HI - WIN_LO, off + WIN_LO)
|
||||||
|
return [struct.unpack_from(">f", b, i)[0] for i in range(0, len(b) - 3, 4)]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
hold = float(sys.argv[1]) if len(sys.argv) > 1 else 4.0
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}; window {WIN_LO:#x}..{WIN_HI:#x}")
|
||||||
|
pad("trig", "RT", "1.0")
|
||||||
|
time.sleep(1.5)
|
||||||
|
for btn in ("LS", "RS", "A", "B", "X", "LB"):
|
||||||
|
before = snap(w.fd, off)
|
||||||
|
pad("press", btn)
|
||||||
|
time.sleep(hold)
|
||||||
|
during = snap(w.fd, off)
|
||||||
|
pad("release", btn)
|
||||||
|
time.sleep(1.0)
|
||||||
|
after = snap(w.fd, off)
|
||||||
|
drops = []
|
||||||
|
for i, (b, d, a) in enumerate(zip(before, during, after)):
|
||||||
|
# a float that fell while held and did not fall further after release
|
||||||
|
if b - d > 1.0 and (a - d) > -1.0 and abs(b) < 1e6:
|
||||||
|
drops.append((WIN_LO + i * 4, round(b, 1), round(d, 1), round(a, 1)))
|
||||||
|
tag = ", ".join(f"{o:#05x}: {b}->{d}->{a}" for o, b, d, a in drops[:4]) or "nothing fell"
|
||||||
|
print(f"# {btn:<3} {tag}")
|
||||||
|
pad("trig", "RT", "0.0"); pad("reset")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
53
tools/re-capture/cruise_ratio.py
Normal file
53
tools/re-capture/cruise_ratio.py
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Pin the world-unit / displayed-speed ratio at the one unambiguous point.
|
||||||
|
|
||||||
|
At neutral throttle the HUD reads exactly `CruisingVelocity` (350 for the player),
|
||||||
|
so no digit-reading is needed to know the game's own number — only a clean
|
||||||
|
measurement of how far the craft actually travels in world units.
|
||||||
|
|
||||||
|
Cleanliness matters more than length here: earlier ratios (1.19–1.29) were sampled
|
||||||
|
in a firefight where the craft is shoved around, and with a stick input the path is
|
||||||
|
longer than the displacement. So this flies straight, holds neutral throttle, and
|
||||||
|
takes ONE long displacement over a 20 s window, plus screenshots at both ends to
|
||||||
|
confirm the HUD never moved off 350.
|
||||||
|
|
||||||
|
Usage: cruise_ratio.py [window_s]
|
||||||
|
"""
|
||||||
|
import math, os, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
CRUISE = 350.0 # UN_f001_TCAF_DeltaSaber_T_Player CruisingVelocity
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def shot(name):
|
||||||
|
subprocess.run(["screenshot", f"/sylph-home/re/shots/{name}.png"], capture_output=True)
|
||||||
|
|
||||||
|
def main():
|
||||||
|
win = float(sys.argv[1]) if len(sys.argv) > 1 else 20.0
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
pad("reset")
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0")
|
||||||
|
time.sleep(6.0) # settle at cruise, sticks centred
|
||||||
|
shot("cruise_start")
|
||||||
|
p0, t0 = speed_law.pos_at(w.fd, off), time.time()
|
||||||
|
samples = [(0.0, *p0)]
|
||||||
|
while time.time() - t0 < win:
|
||||||
|
time.sleep(0.25)
|
||||||
|
samples.append((round(time.time() - t0, 3), *speed_law.pos_at(w.fd, off)))
|
||||||
|
shot("cruise_end")
|
||||||
|
p1, t1 = samples[-1][1:], samples[-1][0]
|
||||||
|
disp = math.dist(p0, p1)
|
||||||
|
path = sum(math.dist(samples[i][1:], samples[i + 1][1:]) for i in range(len(samples) - 1))
|
||||||
|
print(f"# window {t1:.1f}s displacement {disp:8.0f} path {path:8.0f} "
|
||||||
|
f"straightness {disp / path:.3f}")
|
||||||
|
print(f"# speed by displacement {disp / t1:7.1f}/s by path {path / t1:7.1f}/s")
|
||||||
|
print(f"# ratio vs HUD {CRUISE:.0f}: displacement {disp / t1 / CRUISE:.3f} path {path / t1 / CRUISE:.3f}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
89
tools/re-capture/flight_law2.py
Normal file
89
tools/re-capture/flight_law2.py
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Two measurements the first flight-model pass left open, in ONE flight.
|
||||||
|
|
||||||
|
1. **The `LT` half of the throttle curve** — `RT` was walked 0→1 and gave
|
||||||
|
`target = CruisingVelocity + RT·(MaximumVelocity − CruisingVelocity)`; `LT`
|
||||||
|
should mirror it down to `MinimumVelocity`.
|
||||||
|
2. **Roll rate** vs `AV_Roll_{Min,Max}` (200 / 125 °/s). Roll turns the craft about
|
||||||
|
its own forward axis, so the forward vector barely moves (3–5 °/s residual, which
|
||||||
|
is how `LX` was identified as roll at all) — measure a DIFFERENT matrix row.
|
||||||
|
|
||||||
|
Binding happens first and fast: the entity scan searches *changing* position
|
||||||
|
triples, so it only sees the craft while it still has speed. A mission left idling
|
||||||
|
drops out of the scan entirely.
|
||||||
|
|
||||||
|
Usage: flight_law2.py <out-prefix> [dwell_s]
|
||||||
|
"""
|
||||||
|
import json, math, os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def row_at(fd, off, cfg, row):
|
||||||
|
at = off + cfg["rot_delta"] + row * cfg["rot_stride"]
|
||||||
|
v = struct.unpack(">3f", os.pread(fd, 12, at))
|
||||||
|
n = math.sqrt(sum(c * c for c in v)) or 1.0
|
||||||
|
return tuple(c / n for c in v)
|
||||||
|
|
||||||
|
def ang(a, b):
|
||||||
|
d = max(-1.0, min(1.0, sum(a[i] * b[i] for i in range(3))))
|
||||||
|
return math.degrees(math.acos(d))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
prefix = sys.argv[1]
|
||||||
|
dwell = float(sys.argv[2]) if len(sys.argv) > 2 else 4.0
|
||||||
|
cfg = json.load(open("/tmp/nav-live.json"))
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
|
||||||
|
# ── 1. LT curve (speed from position) ─────────────────────────────────────
|
||||||
|
lt_rows = []
|
||||||
|
for v in (0.0, 0.25, 0.5, 0.75, 1.0):
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", str(v))
|
||||||
|
time.sleep(2.0)
|
||||||
|
seq, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < dwell:
|
||||||
|
seq.append((round(time.time() - t0, 3), *speed_law.pos_at(w.fd, off)))
|
||||||
|
time.sleep(0.05)
|
||||||
|
lt_rows += [(v, *s) for s in seq]
|
||||||
|
a, b = seq[0], seq[-1]
|
||||||
|
print(f"# LT={v:<5} speed {math.dist(a[1:], b[1:]) / (b[0] - a[0]):7.0f}/s")
|
||||||
|
|
||||||
|
# ── 2. Roll rate, measured on a non-forward row ───────────────────────────
|
||||||
|
roll_rows = []
|
||||||
|
other = 1 if cfg.get("fwd_row", 0) != 1 else 2
|
||||||
|
for label, trig in (("slow_roll", "LT"), ("fast_roll", "RT")):
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0")
|
||||||
|
pad("trig", trig, "1.0")
|
||||||
|
time.sleep(2.0)
|
||||||
|
pad("axis", "LX", "1.0")
|
||||||
|
seq, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < dwell:
|
||||||
|
seq.append((round(time.time() - t0, 3), *row_at(w.fd, off, cfg, other)))
|
||||||
|
time.sleep(0.05)
|
||||||
|
pad("axis", "LX", "0.0")
|
||||||
|
roll_rows += [(label, *s) for s in seq]
|
||||||
|
rates = []
|
||||||
|
for t in range(int(dwell) - 1):
|
||||||
|
a = [s for s in seq if s[0] >= t][0]
|
||||||
|
b = [s for s in seq if s[0] <= t + 1][-1]
|
||||||
|
rates.append(ang(a[1:], b[1:]) / (b[0] - a[0]))
|
||||||
|
print(f"# {label:<10} row {other} turn rate: " + " ".join(f"{r:6.1f}" for r in rates) + " deg/s")
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("reset")
|
||||||
|
|
||||||
|
with open(prefix + "-lt.csv", "w") as f:
|
||||||
|
f.write("lt,t,x,y,z\n")
|
||||||
|
for r in lt_rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
with open(prefix + "-roll.csv", "w") as f:
|
||||||
|
f.write("phase,t,ux,uy,uz\n")
|
||||||
|
for r in roll_rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print(f"# wrote {prefix}-lt.csv and {prefix}-roll.csv")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
82
tools/re-capture/flight_law3.py
Normal file
82
tools/re-capture/flight_law3.py
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Is the `_Min`/`_Max` pair a LERP on speed, and is roll really speed-independent?
|
||||||
|
|
||||||
|
Pitch measured 87 deg/s at minimum speed and 54 at maximum, against
|
||||||
|
`AV_PitchMinus_{Min,Max}` 75/40 — consistent with either a two-state switch or an
|
||||||
|
interpolation. A THIRD point settles it: at half throttle the craft sits midway
|
||||||
|
between cruise and maximum, so an interpolation must put the pitch rate between the
|
||||||
|
two, while a switch cannot.
|
||||||
|
|
||||||
|
Roll measured ~144 and ~150 in the two regimes, but only 2 s apart — not enough
|
||||||
|
settle for a 126 -> 1342 speed change. Here every phase settles 5 s.
|
||||||
|
|
||||||
|
Usage: flight_law3.py <out.csv> [dwell_s]
|
||||||
|
"""
|
||||||
|
import json, math, os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
SETTLE = 5.0
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def row_at(fd, off, cfg, row):
|
||||||
|
at = off + cfg["rot_delta"] + row * cfg["rot_stride"]
|
||||||
|
v = struct.unpack(">3f", os.pread(fd, 12, at))
|
||||||
|
n = math.sqrt(sum(c * c for c in v)) or 1.0
|
||||||
|
return tuple(c / n for c in v)
|
||||||
|
|
||||||
|
def ang(a, b):
|
||||||
|
return math.degrees(math.acos(max(-1.0, min(1.0, sum(a[i] * b[i] for i in range(3))))))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
dwell = float(sys.argv[2]) if len(sys.argv) > 2 else 4.0
|
||||||
|
cfg = json.load(open("/tmp/nav-live.json"))
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
fwd, other = cfg.get("fwd_row", 0), (1 if cfg.get("fwd_row", 0) != 1 else 2)
|
||||||
|
rows = []
|
||||||
|
phases = [
|
||||||
|
# label, throttle, stick, matrix row to watch
|
||||||
|
("pitch_slow", ("LT", 1.0), ("LY", 1.0), fwd),
|
||||||
|
("pitch_mid", ("RT", 0.5), ("LY", 1.0), fwd),
|
||||||
|
("pitch_fast", ("RT", 1.0), ("LY", 1.0), fwd),
|
||||||
|
("roll_slow", ("LT", 1.0), ("LX", 1.0), other),
|
||||||
|
("roll_fast", ("RT", 1.0), ("LX", 1.0), other),
|
||||||
|
]
|
||||||
|
for label, (trig, tv), (axis, av), row in phases:
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0")
|
||||||
|
pad("axis", "LX", "0.0"); pad("axis", "LY", "0.0")
|
||||||
|
pad("trig", trig, str(tv))
|
||||||
|
time.sleep(SETTLE) # 5 s: a full 126 -> 1342 change needs ~2 s
|
||||||
|
# speed at the moment of the turn, so the regime is recorded not assumed
|
||||||
|
p0 = speed_law.pos_at(w.fd, off); time.sleep(0.6); p1 = speed_law.pos_at(w.fd, off)
|
||||||
|
v_at_turn = math.dist(p0, p1) / 0.6
|
||||||
|
pad("axis", axis, str(av))
|
||||||
|
seq, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < dwell:
|
||||||
|
seq.append((round(time.time() - t0, 3), *row_at(w.fd, off, cfg, row)))
|
||||||
|
time.sleep(0.05)
|
||||||
|
pad("axis", axis, "0.0")
|
||||||
|
rows += [(label, *s) for s in seq]
|
||||||
|
rates = []
|
||||||
|
for t in range(int(dwell) - 1):
|
||||||
|
a = [s for s in seq if s[0] >= t][0]
|
||||||
|
b = [s for s in seq if s[0] <= t + 1][-1]
|
||||||
|
rates.append(ang(a[1:], b[1:]) / (b[0] - a[0]))
|
||||||
|
mean = sum(rates) / len(rates)
|
||||||
|
print(f"# {label:<11} speed {v_at_turn:6.0f}/s rate {mean:6.1f} deg/s " +
|
||||||
|
" ".join(f"{r:5.0f}" for r in rates))
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("reset")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("phase,t,ax,ay,az\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print(f"# wrote {out_csv}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
72
tools/re-capture/pitch_gametime.py
Normal file
72
tools/re-capture/pitch_gametime.py
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Is the clock factor universal, or does it apply only to linear motion?
|
||||||
|
|
||||||
|
The mission clock runs ~1.26x wall time, which fully explains the linear
|
||||||
|
measurements. Applied to the angular ones it predicts a wall-time pitch rate of
|
||||||
|
~94 deg/s for `AV_PitchMinus_Min` 75 — but the settled measurement read 74.9.
|
||||||
|
Either that was luck inside a noisy sample or angular integration is frame-based.
|
||||||
|
|
||||||
|
The flaw in comparing across runs is that the emulator's speed depends on scene
|
||||||
|
load, so the clock ratio is not a constant of the machine. This measures BOTH in
|
||||||
|
the same run: a HUD screenshot brackets each turn phase, so the mission clock's
|
||||||
|
own advance over that phase converts wall seconds to game seconds.
|
||||||
|
|
||||||
|
Usage: pitch_gametime.py <out.csv> [dwell_s] (then read the HUD TIME off the shots)
|
||||||
|
"""
|
||||||
|
import json, math, os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def shot(n):
|
||||||
|
subprocess.run(["screenshot", f"/sylph-home/re/shots/{n}.png"], capture_output=True)
|
||||||
|
|
||||||
|
def row_at(fd, off, cfg, row):
|
||||||
|
at = off + cfg["rot_delta"] + row * cfg["rot_stride"]
|
||||||
|
v = struct.unpack(">3f", os.pread(fd, 12, at))
|
||||||
|
n = math.sqrt(sum(c * c for c in v)) or 1.0
|
||||||
|
return tuple(c / n for c in v)
|
||||||
|
|
||||||
|
def ang(a, b):
|
||||||
|
return math.degrees(math.acos(max(-1.0, min(1.0, sum(a[i] * b[i] for i in range(3))))))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
dwell = float(sys.argv[2]) if len(sys.argv) > 2 else 8.0
|
||||||
|
cfg = json.load(open("/tmp/nav-live.json"))
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
fwd = cfg.get("fwd_row", 0)
|
||||||
|
rows = []
|
||||||
|
for label, (trig, tv) in (("slow", ("LT", 1.0)), ("fast", ("RT", 1.0))):
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("axis", "LY", "0.0")
|
||||||
|
pad("trig", trig, str(tv))
|
||||||
|
time.sleep(5.0)
|
||||||
|
shot(f"gt_{label}_a") # HUD TIME at the start of the phase
|
||||||
|
t0 = time.time()
|
||||||
|
pad("axis", "LY", "1.0") # nose down = PitchMinus
|
||||||
|
seq = []
|
||||||
|
while time.time() - t0 < dwell:
|
||||||
|
seq.append((round(time.time() - t0, 3), *row_at(w.fd, off, cfg, fwd)))
|
||||||
|
time.sleep(0.05)
|
||||||
|
pad("axis", "LY", "0.0")
|
||||||
|
wall = seq[-1][0]
|
||||||
|
shot(f"gt_{label}_b") # HUD TIME at the end
|
||||||
|
rows += [(label, *s) for s in seq]
|
||||||
|
total = sum(ang(seq[i][1:], seq[i + 1][1:]) for i in range(len(seq) - 1))
|
||||||
|
print(f"# {label:<5} wall {wall:5.2f}s swept {total:7.1f}deg "
|
||||||
|
f"rate {total / wall:6.1f} deg/wall-s "
|
||||||
|
f"(x1.26 -> {total / wall * 1.26:6.1f} deg/game-s if the clock applies)")
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("reset")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("phase,t,fx,fy,fz\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print("# read HUD TIME off gt_slow_a/b and gt_fast_a/b to get the run's own ratio")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
74
tools/re-capture/roll_gametime.py
Normal file
74
tools/re-capture/roll_gametime.py
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Is the clock factor universal, or does it apply only to linear motion?
|
||||||
|
|
||||||
|
The mission clock runs ~1.26x wall time, which fully explains the linear
|
||||||
|
measurements. Applied to the angular ones it predicts a wall-time pitch rate of
|
||||||
|
~94 deg/s for `AV_Roll_Min` 75 — but the settled measurement read 74.9.
|
||||||
|
Either that was luck inside a noisy sample or angular integration is frame-based.
|
||||||
|
|
||||||
|
The flaw in comparing across runs is that the emulator's speed depends on scene
|
||||||
|
load, so the clock ratio is not a constant of the machine. This measures BOTH in
|
||||||
|
the same run: a HUD screenshot brackets each turn phase, so the mission clock's
|
||||||
|
own advance over that phase converts wall seconds to game seconds.
|
||||||
|
|
||||||
|
Usage: roll_gametime.py <out.csv> [dwell_s] (then read the HUD TIME off the shots)
|
||||||
|
"""
|
||||||
|
import json, math, os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def shot(n):
|
||||||
|
subprocess.run(["screenshot", f"/sylph-home/re/shots/{n}.png"], capture_output=True)
|
||||||
|
|
||||||
|
def row_at(fd, off, cfg, row):
|
||||||
|
at = off + cfg["rot_delta"] + row * cfg["rot_stride"]
|
||||||
|
v = struct.unpack(">3f", os.pread(fd, 12, at))
|
||||||
|
n = math.sqrt(sum(c * c for c in v)) or 1.0
|
||||||
|
return tuple(c / n for c in v)
|
||||||
|
|
||||||
|
def ang(a, b):
|
||||||
|
return math.degrees(math.acos(max(-1.0, min(1.0, sum(a[i] * b[i] for i in range(3))))))
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
dwell = float(sys.argv[2]) if len(sys.argv) > 2 else 8.0
|
||||||
|
cfg = json.load(open("/tmp/nav-live.json"))
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
# Roll turns the craft about its FORWARD axis, so the forward row barely moves —
|
||||||
|
# watch another row of the rotation matrix instead.
|
||||||
|
fwd = 1 if cfg.get("fwd_row", 0) != 1 else 2
|
||||||
|
rows = []
|
||||||
|
for label, (trig, tv) in (("slow", ("LT", 1.0)), ("fast", ("RT", 1.0))):
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("axis", "LX", "0.0")
|
||||||
|
pad("trig", trig, str(tv))
|
||||||
|
time.sleep(5.0)
|
||||||
|
shot(f"roll_{label}_a") # HUD TIME at the start of the phase
|
||||||
|
t0 = time.time()
|
||||||
|
pad("axis", "LY", "1.0") # nose down = Roll
|
||||||
|
seq = []
|
||||||
|
while time.time() - t0 < dwell:
|
||||||
|
seq.append((round(time.time() - t0, 3), *row_at(w.fd, off, cfg, fwd)))
|
||||||
|
time.sleep(0.05)
|
||||||
|
pad("axis", "LX", "0.0")
|
||||||
|
wall = seq[-1][0]
|
||||||
|
shot(f"roll_{label}_b") # HUD TIME at the end
|
||||||
|
rows += [(label, *s) for s in seq]
|
||||||
|
total = sum(ang(seq[i][1:], seq[i + 1][1:]) for i in range(len(seq) - 1))
|
||||||
|
print(f"# {label:<5} wall {wall:5.2f}s swept {total:7.1f}deg "
|
||||||
|
f"rate {total / wall:6.1f} deg/wall-s "
|
||||||
|
f"(x1.26 -> {total / wall * 1.26:6.1f} deg/game-s if the clock applies)")
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("reset")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("phase,t,fx,fy,fz\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print("# read HUD TIME off roll_slow_a/b and roll_fast_a/b to get the run's own ratio")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
129
tools/re-capture/speed_law.py
Normal file
129
tools/re-capture/speed_law.py
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Measure the craft's speed law and check it against its definition.
|
||||||
|
|
||||||
|
The unit definition gives `Acceleration`, `Deceleration`, `MinimumVelocity`,
|
||||||
|
`CruisingVelocity` and `MaximumVelocity` (harvested 2026-08-13), but not how the
|
||||||
|
game applies them. This holds each throttle input and samples the player's own
|
||||||
|
position at ~10 Hz, so speed and its rate of change are measured rather than
|
||||||
|
assumed.
|
||||||
|
|
||||||
|
Why not `ctrl_probe.py`: it re-scans for the player when it starts, and that scan
|
||||||
|
misses in roughly half the samples on a busy stage (entities move while it walks
|
||||||
|
memory). This locks onto the player object ONCE and then only re-reads its
|
||||||
|
position triple, which is why it survives a firefight.
|
||||||
|
|
||||||
|
Usage: speed_law.py <out.csv> [hold_s]
|
||||||
|
"""
|
||||||
|
import glob, os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import gworld, entities2
|
||||||
|
|
||||||
|
|
||||||
|
def require_live_emulator():
|
||||||
|
"""Refuse to measure a corpse.
|
||||||
|
|
||||||
|
A killed Canary leaves its `/dev/shm/xenia_memory_*` image behind AND leaves its
|
||||||
|
last frame on the X display, so a dead emulator looks alive from both of the
|
||||||
|
obvious angles: the screenshot shows a mission in progress and the memory image
|
||||||
|
still parses. The scans then report `0 moving triples` / "player entity not
|
||||||
|
found", which reads like a tooling bug rather than a dead game. Note `pgrep -x
|
||||||
|
xenia_canary` is NOT enough — zombies match it — so the state letter is checked.
|
||||||
|
"""
|
||||||
|
out = subprocess.run(["ps", "-o", "pid=,stat=", "-C", "xenia_canary"],
|
||||||
|
capture_output=True, text=True).stdout
|
||||||
|
live = [l for l in out.splitlines() if l.split()[1:2] and not l.split()[1].startswith("Z")]
|
||||||
|
if not live:
|
||||||
|
stale = glob.glob("/dev/shm/xenia_memory_*")
|
||||||
|
sys.exit(f"no live xenia_canary (zombies only); {len(stale)} stale shm image(s) "
|
||||||
|
f"— the screen and the memory file are both leftovers, relaunch first")
|
||||||
|
|
||||||
|
def find_player(retries=8):
|
||||||
|
"""Lock onto the player object that is actually FLYING.
|
||||||
|
|
||||||
|
Verifies the emulator is alive first — see `require_live_emulator`.
|
||||||
|
|
||||||
|
A mission holds more than one `*_Player` object — `entities2 list` shows two —
|
||||||
|
and at least one of them never moves. Taking the first match locks onto that
|
||||||
|
one, and then every probe reads a speed of exactly 0 while the game is visibly
|
||||||
|
flying (and the HUD keeps reading 350). So sample each candidate twice and keep
|
||||||
|
the one that displaces."""
|
||||||
|
require_live_emulator()
|
||||||
|
for _ in range(retries):
|
||||||
|
w = gworld.World()
|
||||||
|
defs = entities2.definitions(w)
|
||||||
|
movers = entities2.moving(w.fd, w.size)
|
||||||
|
cands = [(off, nm) for off, nm, _, _ in entities2.typed(w.fd, defs, movers, 0x130)
|
||||||
|
if nm.endswith("_Player")]
|
||||||
|
best = None
|
||||||
|
for off, nm in cands:
|
||||||
|
a = pos_at(w.fd, off)
|
||||||
|
time.sleep(0.5)
|
||||||
|
b = pos_at(w.fd, off)
|
||||||
|
d = sum((b[i] - a[i]) ** 2 for i in range(3)) ** 0.5
|
||||||
|
if best is None or d > best[0]:
|
||||||
|
best = (d, off, nm)
|
||||||
|
# A craft can be briefly slow (launch, a hard turn), so do not demand a big
|
||||||
|
# step — just prefer the candidate that moves at all. The failure this
|
||||||
|
# guards against is the STATIC duplicate, which never moves by any amount.
|
||||||
|
if best and best[0] > 0.05:
|
||||||
|
return w, best[1], best[2]
|
||||||
|
print(f"# {len(cands)} player candidates, best displacement "
|
||||||
|
f"{best[0] if best else 0:.3f} — retrying", flush=True)
|
||||||
|
time.sleep(2)
|
||||||
|
return None, None, None
|
||||||
|
|
||||||
|
def pos_at(fd, off):
|
||||||
|
b = os.pread(fd, 12, off)
|
||||||
|
return struct.unpack(">3f", b)
|
||||||
|
|
||||||
|
def pad(*args):
|
||||||
|
subprocess.run(["vgamepad", *args], capture_output=True)
|
||||||
|
|
||||||
|
def sample(fd, off, seconds, hz=20):
|
||||||
|
"""Raw (t, x, y, z) samples. Speed is NOT computed per sample: the guest
|
||||||
|
updates the position at its own rate, so a 10 Hz difference alternates
|
||||||
|
between 0 and a double step — the first run of this probe read 0, 1519, 1985,
|
||||||
|
0, 2681 … for a craft flying smoothly. Differentiate over a window instead."""
|
||||||
|
out, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < seconds:
|
||||||
|
p = pos_at(fd, off)
|
||||||
|
out.append((round(time.time() - t0, 3), p[0], p[1], p[2]))
|
||||||
|
time.sleep(1.0 / hz)
|
||||||
|
return out
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
hold = float(sys.argv[2]) if len(sys.argv) > 2 else 8.0
|
||||||
|
w, off, nm = find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm} at file offset {off:#x}")
|
||||||
|
rows = []
|
||||||
|
# RT/LT are ANALOGUE TRIGGERS, not buttons: `vgamepad trig RT 1.0` holds full
|
||||||
|
# throttle, `trig RT 0.0` releases. Using `hold RT` (the button verb) is a
|
||||||
|
# silent no-op — the first run of this probe measured only the drift of a
|
||||||
|
# craft nobody was flying.
|
||||||
|
for label, keys in (("idle", [("RT", 0.0), ("LT", 0.0)]),
|
||||||
|
("RT", [("RT", 1.0), ("LT", 0.0)]),
|
||||||
|
("coast", [("RT", 0.0), ("LT", 0.0)]),
|
||||||
|
("LT", [("LT", 1.0), ("RT", 0.0)]),
|
||||||
|
("coast2", [("RT", 0.0), ("LT", 0.0)])):
|
||||||
|
for axis, v in keys:
|
||||||
|
pad("trig", axis, str(v))
|
||||||
|
seq = sample(w.fd, off, hold)
|
||||||
|
for t, x, y, z in seq:
|
||||||
|
rows.append((label, t, x, y, z))
|
||||||
|
# windowed speed: displacement over the phase's middle second
|
||||||
|
mid = [s for s in seq if seq[-1][0] * 0.4 <= s[0] <= seq[-1][0] * 0.9]
|
||||||
|
if len(mid) > 2:
|
||||||
|
d = sum((mid[-1][i] - mid[0][i]) ** 2 for i in (1, 2, 3)) ** 0.5
|
||||||
|
print(f"# {label:<8} windowed speed {d / (mid[-1][0] - mid[0][0]):8.1f}/s")
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("phase,t,x,y,z\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(f"{r[0]},{r[1]},{r[2]},{r[3]},{r[4]}\n")
|
||||||
|
print(f"# wrote {out_csv} ({len(rows)} samples)")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
59
tools/re-capture/throttle_curve.py
Normal file
59
tools/re-capture/throttle_curve.py
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Is the throttle ANALOGUE, and is full deflection the afterburner?
|
||||||
|
|
||||||
|
speed_law.py measured a settled speed of ~1 530 under full `RT` against a
|
||||||
|
`MaximumVelocity` of 1 200 — attributed to the emulated time base because the same
|
||||||
|
~1.2x appears in the turn rates. But `RT` is an analogue trigger, so there is a
|
||||||
|
second reading worth excluding: that partial deflection reaches MaximumVelocity and
|
||||||
|
FULL deflection is the afterburner (which would also explain why no button toggles
|
||||||
|
it). This walks the trigger 0.00 -> 1.00 and reports the settled speed at each step.
|
||||||
|
|
||||||
|
Usage: throttle_curve.py <out.csv> [dwell_s]
|
||||||
|
"""
|
||||||
|
import math, os, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import speed_law
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def windowed(seq, lo, hi):
|
||||||
|
a = [s for s in seq if s[0] >= lo][0]
|
||||||
|
b = [s for s in seq if s[0] <= hi][-1]
|
||||||
|
return math.dist(a[1:], b[1:]) / (b[0] - a[0])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
dwell = float(sys.argv[2]) if len(sys.argv) > 2 else 6.0
|
||||||
|
axis = sys.argv[3] if len(sys.argv) > 3 else "RT" # RT ramps up, LT ramps down
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
rows = []
|
||||||
|
for v in (0.0, 0.25, 0.5, 0.75, 1.0):
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0")
|
||||||
|
pad("trig", axis, str(v))
|
||||||
|
time.sleep(6.0) # settle: 5 s+ is what the turn-rate fix showed is needed
|
||||||
|
# Screenshot the HUD at the settled speed: its readout is in the
|
||||||
|
# DEFINITION's unit (it shows 350 at neutral = CruisingVelocity), so it is
|
||||||
|
# the ground truth the position-derived number has to be compared against.
|
||||||
|
subprocess.run(["screenshot", f"/sylph-home/re/shots/hud_{axis}_{v}.png"],
|
||||||
|
capture_output=True)
|
||||||
|
seq, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < dwell:
|
||||||
|
seq.append((round(time.time() - t0, 3), *speed_law.pos_at(w.fd, off)))
|
||||||
|
time.sleep(0.05)
|
||||||
|
for s in seq:
|
||||||
|
rows.append((v, *s))
|
||||||
|
wins = [windowed(seq, t, t + 1.0) for t in range(int(dwell) - 1)]
|
||||||
|
print(f"# {axis}={v:<4} settled speed per 1 s window: " + " ".join(f"{x:6.0f}" for x in wins))
|
||||||
|
pad("trig", "RT", "0.0"); pad("reset")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("rt,t,x,y,z\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print(f"# wrote {out_csv}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
87
tools/re-capture/turn_law.py
Normal file
87
tools/re-capture/turn_law.py
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Measure the craft's TURN rates, and whether they depend on speed.
|
||||||
|
|
||||||
|
The unit definition carries `AA_Yaw_{Max,Min}`, `AA_PitchPlus_{Max,Min}`,
|
||||||
|
`AA_Roll_{Max,Min}` — pairs whose obvious reading is "rate at maximum speed" and
|
||||||
|
"rate at minimum speed", i.e. agility falling as the craft goes faster (for the
|
||||||
|
player: yaw 65°/s vs 120°/s, roll 475°/s vs 750°/s). That is a prediction, so
|
||||||
|
measure it: hold a throttle to pin the speed regime, hold a stick axis, and
|
||||||
|
differentiate the craft's own forward vector.
|
||||||
|
|
||||||
|
Same discipline as speed_law.py: lock onto the player object once, sample at
|
||||||
|
20 Hz, and differentiate over 1-second windows (the guest updates slower than the
|
||||||
|
sample rate).
|
||||||
|
|
||||||
|
Usage: turn_law.py <out.csv> [hold_s]
|
||||||
|
"""
|
||||||
|
import json, math, os, struct, subprocess, sys, time
|
||||||
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
import gworld, entities2, speed_law
|
||||||
|
|
||||||
|
def fwd_at(fd, off, cfg):
|
||||||
|
"""The craft's forward row out of its rotation matrix (entities2 `self` bound
|
||||||
|
rot_delta / rot_stride / fwd_row and validated the row against motion)."""
|
||||||
|
at = off + cfg["rot_delta"] + cfg["fwd_row"] * cfg["rot_stride"]
|
||||||
|
v = struct.unpack(">3f", os.pread(fd, 12, at))
|
||||||
|
n = math.sqrt(sum(c * c for c in v)) or 1.0
|
||||||
|
s = cfg.get("fwd_sign", 1)
|
||||||
|
return tuple(s * c / n for c in v)
|
||||||
|
|
||||||
|
def pad(*a):
|
||||||
|
subprocess.run(["vgamepad", *a], capture_output=True)
|
||||||
|
|
||||||
|
def rate(seq, lo, hi):
|
||||||
|
"""Degrees per second between the first sample at/after `lo` and the last at/before `hi`."""
|
||||||
|
a = [s for s in seq if s[0] >= lo][0]
|
||||||
|
b = [s for s in seq if s[0] <= hi][-1]
|
||||||
|
dot = max(-1.0, min(1.0, sum(a[1 + i] * b[1 + i] for i in range(3))))
|
||||||
|
return math.degrees(math.acos(dot)) / (b[0] - a[0])
|
||||||
|
|
||||||
|
def main():
|
||||||
|
out_csv = sys.argv[1]
|
||||||
|
hold = float(sys.argv[2]) if len(sys.argv) > 2 else 6.0
|
||||||
|
cfg = json.load(open("/tmp/nav-live.json"))
|
||||||
|
w, off, nm = speed_law.find_player()
|
||||||
|
if not w:
|
||||||
|
sys.exit("player entity not found after retries")
|
||||||
|
print(f"# locked on {nm}")
|
||||||
|
rows = []
|
||||||
|
# (label, throttle, axis, value) — throttle pins the speed regime, so the
|
||||||
|
# Max/Min pair in the definition can be told apart.
|
||||||
|
# LX is ROLL (the forward vector barely moves under it) and the right stick
|
||||||
|
# does not steer at all — measured. LY is pitch, and `vgamepad` documents
|
||||||
|
# `LY: -1 = up`, so LY=+1 is nose DOWN = the `PitchMinus` family.
|
||||||
|
phases = [
|
||||||
|
("slow_down", ("LT", 1.0), ("LY", 1.0)), # AV_PitchMinus_Min 75 deg/s
|
||||||
|
("fast_down", ("RT", 1.0), ("LY", 1.0)), # AV_PitchMinus_Max 40
|
||||||
|
("slow_up", ("LT", 1.0), ("LY", -1.0)), # AV_PitchPlus_Min 150
|
||||||
|
("fast_up", ("RT", 1.0), ("LY", -1.0)), # AV_PitchPlus_Max 70
|
||||||
|
]
|
||||||
|
for label, (trig, tv), (axis, av) in phases:
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0")
|
||||||
|
pad("axis", "LX", "0.0"); pad("axis", "LY", "0.0"); pad("axis", "RX", "0.0")
|
||||||
|
pad("trig", trig, str(tv))
|
||||||
|
time.sleep(1.5) # let the speed settle before turning
|
||||||
|
pad("axis", axis, str(av))
|
||||||
|
seq, t0 = [], time.time()
|
||||||
|
while time.time() - t0 < hold:
|
||||||
|
f = fwd_at(w.fd, off, cfg)
|
||||||
|
seq.append((round(time.time() - t0, 3), *f))
|
||||||
|
time.sleep(0.05)
|
||||||
|
pad("axis", axis, "0.0")
|
||||||
|
for s in seq:
|
||||||
|
rows.append((label, *s))
|
||||||
|
try:
|
||||||
|
r = [rate(seq, t, t + 1.0) for t in (1.0, 2.0, 3.0) if seq[-1][0] > t + 1.0]
|
||||||
|
print(f"# {label:<11} turn rate per 1 s window: " + " ".join(f"{x:6.1f}" for x in r) + " deg/s")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"# {label:<11} rate failed: {e}")
|
||||||
|
pad("trig", "RT", "0.0"); pad("trig", "LT", "0.0"); pad("reset")
|
||||||
|
with open(out_csv, "w") as f:
|
||||||
|
f.write("phase,t,fx,fy,fz\n")
|
||||||
|
for r in rows:
|
||||||
|
f.write(",".join(str(x) for x in r) + "\n")
|
||||||
|
print(f"# wrote {out_csv} ({len(rows)} samples)")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
120
tools/re-capture/unit_dump_layout.py
Normal file
120
tools/re-capture/unit_dump_layout.py
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Read EVERY field of the live unit-definition objects, using the code-derived
|
||||||
|
layout instead of solving offsets from the disc.
|
||||||
|
|
||||||
|
`unit_runtime.py` scores `(field, offset, encoding)` triples against the disc
|
||||||
|
records, so it can only place fields the disc actually values — 58 of 153 on a
|
||||||
|
single-mission snapshot. The layout in `data/unit_definition_layout.txt` was read
|
||||||
|
out of the title's own loader (`sub_82341A20`: the field NAME of every store is a
|
||||||
|
string in the image), so it places **all** of them, including the ones no disc
|
||||||
|
record ever sets. That is exactly the Route-B target: the defaulted fields.
|
||||||
|
|
||||||
|
Discipline is unchanged — every field the disc DOES value is cross-checked against
|
||||||
|
the object, and a mismatch is reported rather than written. Angle fields are
|
||||||
|
degrees on disc and radians in the object (see the layout header), so those are
|
||||||
|
compared after conversion.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
unit_dump_layout.py <layout.txt> <tokens.txt> <snap.bin>... [--csv out.csv]
|
||||||
|
"""
|
||||||
|
import csv
|
||||||
|
import math
|
||||||
|
import re
|
||||||
|
import struct
|
||||||
|
import sys
|
||||||
|
|
||||||
|
sys.path.insert(0, __file__.rsplit("/", 1)[0])
|
||||||
|
import unit_runtime as ur # object locator + disc token reader
|
||||||
|
|
||||||
|
# Angle fields are DEGREES on disc and RADIANS in the object. The set is wider
|
||||||
|
# than the `AV_`/`AA_` families: a prefix may precede them (`AB_AA_PitchPlus` =
|
||||||
|
# afterburner) and some carry neither (`Through_AngleMaximum`). Both cases showed
|
||||||
|
# up as lone "contradictions" whose object value was exactly the disc value in
|
||||||
|
# radians — which is the tell.
|
||||||
|
ANGLE = re.compile(r"(^|_)(AV|AA)_|Bank|Angle|Turn_AngularVelocity")
|
||||||
|
|
||||||
|
|
||||||
|
def read_layout(path):
|
||||||
|
"""[(offset, kind, name)] from the '# offset kind field' table."""
|
||||||
|
out = []
|
||||||
|
for line in open(path):
|
||||||
|
line = line.strip()
|
||||||
|
if not line or line.startswith("#"):
|
||||||
|
continue
|
||||||
|
parts = line.split()
|
||||||
|
if len(parts) < 3:
|
||||||
|
continue
|
||||||
|
off, kind, name = parts[0], parts[1].lower(), parts[2]
|
||||||
|
try:
|
||||||
|
# The layout table writes offsets in DECIMAL (`48 f32 Size_X`), while
|
||||||
|
# the solver's CSV prints them in hex — parsing this file as hex puts
|
||||||
|
# every field 0x18 bytes late and makes the disc cross-check fail on
|
||||||
|
# everything, which is how the mistake announces itself.
|
||||||
|
out.append((int(off, 10), kind, name))
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def value_at(raw, off, kind):
|
||||||
|
if off + 4 > len(raw):
|
||||||
|
return None
|
||||||
|
if kind in ("f32", "float"):
|
||||||
|
return struct.unpack_from(">f", raw, off)[0]
|
||||||
|
if kind in ("word", "u32", "int", "bool"):
|
||||||
|
return struct.unpack_from(">I", raw, off)[0]
|
||||||
|
return None # str: a guest pointer, not a value
|
||||||
|
|
||||||
|
|
||||||
|
def as_float(s):
|
||||||
|
try:
|
||||||
|
return float(str(s).rstrip("fF"))
|
||||||
|
except ValueError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
layout_path, tokens_path = sys.argv[1], sys.argv[2]
|
||||||
|
snaps = [a for a in sys.argv[3:] if not a.startswith("--")]
|
||||||
|
out_csv = next((a.split("=", 1)[1] for a in sys.argv if a.startswith("--csv=")), None)
|
||||||
|
|
||||||
|
layout = read_layout(layout_path)
|
||||||
|
disc, _ambiguous = ur.read_tokens(tokens_path)
|
||||||
|
objs, conflicts = ur.runtime_objects(snaps)
|
||||||
|
print(f"# layout fields: {len(layout)} runtime objects: {len(objs)} "
|
||||||
|
f"disc units: {len(disc)} matched: {len(set(objs) & set(disc))}")
|
||||||
|
if conflicts:
|
||||||
|
print(f"# !! objects differing between snapshots: {conflicts}")
|
||||||
|
|
||||||
|
rows, agree, disagree = [], 0, 0
|
||||||
|
for unit in sorted(objs):
|
||||||
|
raw = objs[unit]
|
||||||
|
drec = disc.get(unit, {})
|
||||||
|
for off, kind, name in layout:
|
||||||
|
v = value_at(raw, off, kind)
|
||||||
|
if v is None:
|
||||||
|
continue
|
||||||
|
dv = as_float(drec.get(name)) if name in drec else None
|
||||||
|
if dv is not None:
|
||||||
|
# The disc values this field: it is a CHECK, not a new value.
|
||||||
|
cmpv = math.degrees(v) if ANGLE.search(name) and isinstance(v, float) else v
|
||||||
|
ok = abs(cmpv - dv) <= max(1e-3, abs(dv) * 1e-3)
|
||||||
|
agree, disagree = (agree + 1, disagree) if ok else (agree, disagree + 1)
|
||||||
|
if not ok:
|
||||||
|
print(f"# MISMATCH {unit} {name} @{off:#05x}: object {cmpv!r} vs disc {dv!r}")
|
||||||
|
rows.append([unit, name, f"{off:#05x}", kind, repr(v), "disc",
|
||||||
|
"verified" if ok else "CONTRADICTED"])
|
||||||
|
else:
|
||||||
|
rows.append([unit, name, f"{off:#05x}", kind, repr(v),
|
||||||
|
"defaulted-on-disc", "layout-derived"])
|
||||||
|
print(f"# cross-check against the disc: {agree} agree, {disagree} disagree")
|
||||||
|
print(f"# rows: {len(rows)} ({sum(1 for r in rows if r[5] == 'defaulted-on-disc')} defaulted)")
|
||||||
|
if out_csv:
|
||||||
|
w = csv.writer(open(out_csv, "w", newline=""))
|
||||||
|
w.writerow(["unit", "field", "offset", "enc", "value", "source", "conf"])
|
||||||
|
w.writerows(rows)
|
||||||
|
print(f"# wrote {out_csv}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user