nx_torque.nx
buildroot/runtime/nx_torque.nx
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
imports: nx_syscalls.nxnx_isqrt.nxnx_i128.nxnx_force.nx
imported by: nx_torque_test.nx
structs
| 59 | struct NxTorque |
consts
| 42 | const NX_TORQUE_Q14: i64 = 16384 |
| 46 | const NX_TORQUE_OK: i64 = 0 |
| 47 | const NX_TORQUE_ERR_NULL_INPUT: i64 = 1 |
| 48 | const NX_TORQUE_ERR_NULL_FORCE: i64 = 2 |
| 65 | const NX_TORQUE_BYTES: i64 = 24 |
functions
| 50 | func nx_torque_verdict_name(v: i64) -> *u8 called by 1: main |
| 69 | func nx_torque_new(tx_q14: i64, ty_q14: i64, tz_q14: i64) -> *NxTorque |
| 77 | func nx_torque_zero() -> *NxTorque |
| 94 | func nx_torque_from_position_force(rx_q14: i64, ry_q14: i64, rz_q14: i64, |
| 116 | func nx_torque_add(a: *NxTorque, b: *NxTorque) -> *NxTorque |
| 122 | func nx_torque_sub(a: *NxTorque, b: *NxTorque) -> *NxTorque calls 1: nx_torque_new |
| 128 | func nx_torque_scale(t: *NxTorque, scalar_q14: i64) -> *NxTorque |
| 136 | func nx_torque_magnitude_q14(t: *NxTorque) -> i64 |