code wiki / (root) / nx_gsplat_fit_aniso_gate.nx

nx_gsplat_fit_aniso_gate.nx

buildroot/runtime/nx_gsplat_fit_aniso_gate.nx

35071 B516 linesdepth 3pulls 6 transitivereach 0 importersview sourcekind gate/prooftopic gsplat
docsdependenciesstructsconstsfunctions

about

nx_gsplat_fit_aniso_gate.nx -- FITTING ON THE QUALITY PATH: the anisotropic surfel reconstructor. WHY THIS GATE EXISTS. nx_gsplat_fit_gate proved the ISOTROPIC path can be fitted from an image. That is the blob path. The ANISOTROPIC path is the one that renders oriented surfels -- the representation that carries actual quality -- and until 2026-08-23 it could be rendered but never FITTED. A reconstructor that stops where the representation starts to matter is not a reconstructor. ★★THE ACCEPT RULE IS THE ONE THE ISOTROPIC GATE'S FIRST RED TAUGHT US, AND IT IS INHERITED DELIBERATELY. v1 of that gate demanded the error fall at EVERY step; the optimiser reached loss=0 and correctly STOPPED, so the rule demanded the impossible and would have REWARDED A JITTERER. The rule splits at the only boundary in the mathematics: WHILE loss > 0 -- a residual remains, so descent must STRICTLY reduce the error. ONCE loss == 0 -- converged, so the error must be EXACTLY CONSTANT. Both phases must occur or the tooth is vacuous and says so, and the convergence floor is DERIVED: an image cannot localise a gaussian finer than a pixel, so world-units-per-pixel IS the floor. ★T0 IS THE TOOTH THAT MAKES THIS GATE DIFFERENT FROM ITS ISOTROPIC SIBLING. If the fixture's surfels happened to project to CIRCLES, the anisotropic gradient would reduce term-for-term to the isotropic one and this gate would prove NOTHING NEW while passing everything. So the conic is measured and the scene must be genuinely elliptical -- ca != cc or cb != 0 -- before any other tooth is believed. license_tier: ORIGINAL expect_exit: 0

dependencies 4 imports · 0 importers

nx_syscalls.nx nx_itrig.nx nx_gsplat.nx nx_gate_verdict.nx nx_gsplat_fit_aniso_gate.nx

imports: nx_syscalls.nxnx_itrig.nxnx_gsplat.nxnx_gate_verdict.nx

imported by: nobody (leaf or entry point)

call flow from main pre-order; caps 40 nodes / depth 6 declared; ↻ = already shown

main gv_ctr sys_mmap nxa_die sys_write sys_exit nxa_lock_take nxa_lock_addr sys_write ↻ nxa_lock_give nxa_lock_addr ↻ nxa_report_overrun sys_write ↻ nxa_dump_printable sys_write ↻ nxa_dump_sizes sys_write ↻ gv_head gv_puts sys_write ↻ gs_stride_aniso gs_w gs_h gs_focal_for sys_mmap ↻ gs_nb gs_expn gs_build_explut fa_truth gs_stride_aniso ↻ gs_set_aniso gs_fxa gs_render_aniso_at gs_project_sort_at it_sin4096 it_cos4096 it_sin4096 ↻ gs_isqrt vm_isqrt gs_proj_x_at

structs

none

consts

27const FA_NG: i64 = 6
28const FA_STEPS: i64 = 12
29const FA_CAMZ: i64 = 30
36const FA_RTAN: i64 = 560
37const FA_XSTEP: i64 = 3600
38const FA_ZSTEP: i64 = 1100
44const FA_TRIG_ONE: i64 = 4096
47const FA_VIEWS: i64 = 3
60const FA_RAYZ: i64 = 4400
63const FA_VIEW_YAW: i64 = 1924
64const FA_OVSTEP: i64 = 900
65const FA_PERTURB: i64 = 300
66const FA_TILT: i64 = 181 // 256/sqrt(2): a 45-degree surfel tilt, so the projection is an ELLIPSE
67const FA_W64: i64 = 8
68const FA_BGR: i64 = 26
69const FA_BGG: i64 = 28
70const FA_BGB: i64 = 44

functions

72func fa_abs(v: i64) -> i64 { if v < 0 { return 0 - v } return v }
called by 1: fa_poserr
75func fa_truth(g: *i64) -> i64
91func fa_copy(dst: *i64, src: *i64, n: i64) -> i64
called by 1: main
96func fa_poserr(g: *i64, t: *i64) -> i64
called by 1: main calls 2: gs_stride_anisofa_abs
107func main() -> i64