code wiki / (root) / nx_ballistics.nx

nx_ballistics.nx

buildroot/runtime/nx_ballistics.nx

7158 B143 linesdepth 0pulls 0 transitivereach 1 importersview sourcekind librarytopic ballistics
docsdependenciesstructsconstsfunctions

about

nx_ballistics.nx -- Simulates projectile motion with and without air drag for ballistic trajectory visualization.

dependencies 0 imports · 1 importers

nx_ballistics.nx nx_ballistics_gate.nx

imports: none

imported by: nx_ballistics_gate.nx

structs

none

consts

2const O_MAGIC_3141593: i64 = 3141593
3const O_MAGIC_6283185: i64 = 6283185
4const O_MAGIC_1570796: i64 = 1570796
5const O_MAGIC_4096: i64 = 4096
13const W: i64 = 256
14const H: i64 = 256
15const O_FB: i64 = 0
16const N: i64 = 2 // 0 = vacuum, 1 = drag
17const O_X: i64 = 524288
18const O_Y: i64 = 524304
19const O_VX: i64 = 524320
20const O_VY: i64 = 524336
21const O_GND: i64 = 524352 // grounded flags
22const O_WX: i64 = 524368
23const O_WY: i64 = 524376
24const O_STEP: i64 = 524384
25const O_RST: i64 = 524392 // post-landing pause counter
26const O_TR: i64 = 524400 // trails: N*TRAILN*2 (display px)
27const TRAILN: i64 = 160
28const SC: i64 = 1000000
29const V0: i64 = 200000 // launch speed
30const GSTEP: i64 = 200 // gravity (velocity decrement / step)
31const K: i64 = 1 // drag coefficient
32const DSCALE: i64 = 566000000 // drag divisor (tunes drag ~25% of gravity at launch)
33const LAUNCH: i64 = 959931 // 55 deg in micro-rad
34const STEPS_PER_TICK: i64 = 8

functions

36func rgb(r: i64, g: i64, b: i64) -> i64 { return (r & 255) | ((g & 255) << 8) | ((b & 255) << 16) }
called by 1: render_impl
37func isqrt(N0: i64) -> i64 { if N0<2 { return N0 } var x: i64=N0; var y: i64=(x+1)/2; while y<x { x=y; y=(x + N0/x)/2 } return x }
called by 1: vmag
38func sin_fixed(Xin: i64) -> i64
50func cos_fixed(X: i64) -> i64 { return sin_fixed(X+O_MAGIC_1570796) }
called by 2: init_implvx0_of calls 1: sin_fixed
51func vmag(vx: i64, vy: i64) -> i64 { return isqrt(vx*vx+vy*vy) }
called by 2: acc_xacc_y calls 1: isqrt
53func acc_x(vx: i64, vy: i64, drag: i64) -> i64 { if drag==0 { return 0 } return 0 - K*vmag(vx,vy)*vx/DSCALE }
called by 3: step_one_implrange_atflight calls 1: vmag
54func acc_y(vx: i64, vy: i64, drag: i64) -> i64 { if drag==0 { return 0-GSTEP } return (0-GSTEP) - K*vmag(vx,vy)*vy/DSCALE }
called by 3: step_one_implrange_atflight calls 1: vmag
56func putpx(base: i64, px: i64, py: i64, c: i64) -> i64
called by 2: discrender_impl
60func disc(base: i64, px: i64, py: i64, r: i64, c: i64) -> i64
called by 1: render_impl calls 1: putpx
67func clear_fb(base: i64, c: i64) -> i64 { let fb: *i64=(base+O_FB) as *i64; var i: i64=0; while i<W*H { fb[i]=c; i=i+1 } return 0 }
called by 1: render_impl
69func init_impl(base: i64) -> i64
83func step_one_impl(base: i64) -> i64
called by 1: tick_impl calls 2: acc_xacc_y
97func wx_to_px(base: i64, wx: i64) -> i64 { let WX: *i64=(base+O_WX) as *i64; return 4 + wx*248/WX[0] }
98func wy_to_py(base: i64, wy: i64) -> i64 { let WY: *i64=(base+O_WY) as *i64; return 250 - wy*242/WY[0] }
99func record_trail(base: i64) -> i64
called by 1: tick_impl calls 2: wx_to_pxwy_to_py
106func tick_impl(base: i64, cmd: i64) -> i64
118func render_impl(base: i64) -> i64
137func ww() -> i64 { return W }
called by 1: main
138func hh() -> i64 { return H }
called by 1: main
139func fb_off() -> i64 { return O_FB }
called by 1: main
140func init() -> i64 { return init_impl(0) }
calls 1: init_impl
141func tick(cmd: i64) -> i64 { return tick_impl(0, cmd) }
calls 1: tick_impl
142func render() -> i64 { return render_impl(0) }
calls 1: render_impl
143func mem_bytes() -> i64 { return O_TR + N*TRAILN*2*8 + O_MAGIC_4096 }
called by 1: main