code wiki / (root) / nx_torque.nx

nx_torque.nx

buildroot/runtime/nx_torque.nx

5490 B142 linesdepth 5pulls 6 transitivereach 1 importersview sourcekind library
docsdependenciesstructsconstsfunctions

about

nx_torque.nx -- 3D torque vector primitive (rotational analog of nx_force). Layer 1 physics per [[feedback-engineering-sciences-bits-up-3d-print-first]]. Key composition demo: nx_torque_from_position_force computes τ = r × F via nx_force_cross + bit-cast. This is the FIRST substrate primitive that BUILDS a different-type primitive from COMPOSING another -- demonstrating the cross-primitive composition pattern the engineering sciences arc relies on. Unit convention: Q14 Newton-metres (N·m). 1 Q14 unit = 1/16384 N·m = 61 µN·m. Range ±5e14 N·m -- vastly exceeds any engineering use (NEMA-23 stepper holding torque ~1 N·m; jet engine thrust ~10⁶ N·m). IMPORTANT unit-pairing convention for the cross product: position r in metres (Q14) force F in Newtons (Q14) result τ in N·m (Q14) Slicer/printer callers operate in mm by default. Convert position from Q14 mm to Q14 m by dividing by 1000 (integer division loses sub-µm precision, acceptable for motor-sizing calcs). Or use millimetric variant queued for v2. Composes: nx_force (force vector input + reuses cross product) nx_isqrt (magnitude via Q28 sum-of-squares) nx_i128 / nx_muldiv_i64 (overflow protection for large-scale ops) Future v2 enhancements: nx_torque_from_position_force_mm (mm-position variant for slicer) nx_torque_required_for_angular_accel (τ = Iα, needs nx_inertia) nx_torque_at_lever (planar 2D case for simple analyses) license_tier: ORIGINAL

dependencies 4 imports · 1 importers

nx_syscalls.nx nx_isqrt.nx nx_i128.nx nx_force.nx nx_torque.nx nx_torque_test.nx

imports: nx_syscalls.nxnx_isqrt.nxnx_i128.nxnx_force.nx

imported by: nx_torque_test.nx

structs

59struct NxTorque

consts

42const NX_TORQUE_Q14: i64 = 16384
46const NX_TORQUE_OK: i64 = 0
47const NX_TORQUE_ERR_NULL_INPUT: i64 = 1
48const NX_TORQUE_ERR_NULL_FORCE: i64 = 2
65const NX_TORQUE_BYTES: i64 = 24

functions

50func nx_torque_verdict_name(v: i64) -> *u8
called by 1: main
69func nx_torque_new(tx_q14: i64, ty_q14: i64, tz_q14: i64) -> *NxTorque
77func nx_torque_zero() -> *NxTorque
called by 1: main calls 1: nx_torque_new
94func nx_torque_from_position_force(rx_q14: i64, ry_q14: i64, rz_q14: i64,
116func nx_torque_add(a: *NxTorque, b: *NxTorque) -> *NxTorque
called by 1: main calls 1: nx_torque_new
122func nx_torque_sub(a: *NxTorque, b: *NxTorque) -> *NxTorque
calls 1: nx_torque_new
128func nx_torque_scale(t: *NxTorque, scalar_q14: i64) -> *NxTorque
136func nx_torque_magnitude_q14(t: *NxTorque) -> i64
called by 1: main calls 1: nx_isqrt