Source: https://guthlabs.ai/docs/instruments/projectile-motion-solver/mechanism/

instrument mechanism / verified-clean

# Projectile Motion Solver mechanism

The inspectable method record for Projectile Motion Solver, kept separate from implementation and qualification.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Model scope

The honest-label vacuum trajectory unless drag model enabled is appropriate, but the current specification is not sufficient for a correct optional-drag implementation. The declared height input is ignored by the listed no-drag formulas, and the listed drag equation is not a valid complete 2D projectile model. Verdict is FAIL until the nonzero-height equations and a fully specified vector drag integrator are implemented.

- The no-drag formulas R=v²sin(2θ)/g, h=v²sin²(θ)/(2g), and t=2v sin(θ)/g assume launch and landing elevations are equal and launch height is zero. They do not correctly use the declared height input.

- For nonzero launch height H, the no-drag flight time must be t=(v0 sinθ+sqrt((v0 sinθ)²+2gH))/g, range=v0 cosθ·t, and absolute maximum height is H+(v0 sinθ)²/(2g).

- The stated drag equation dv/dt=-g-kv|v|/m is a one-dimensional scalar equation, not a complete 2D projectile model. Quadratic air drag should use vector acceleration ax=-(k/m)|v|vx and ay=-g-(k/m)|v|vy, where |v|=sqrt(vx²+vy²).

- The drag implementation does not specify a numerical integration algorithm, timestep, landing-event interpolation, or convergence/termination tolerance, so drag outputs are not deterministic or reproducible.

- The drag parameter k is ambiguous: it could be a quadratic-drag parameter rho·Cd·A, with units kg/m, or another coefficient. If Cd is supplied, air density and reference area are also required.

## Units and conventions

- Angles are assumed to be in radians by the trigonometric formulas; if the UI accepts degrees, it must explicitly convert degrees to radians.

- v0 is in m/s, height and range are in m, g is in m/s², mass is in kg, and flight time is in s.

- The no-drag formulas assume a uniform gravitational field and no air resistance.

- For a quadratic drag model written as k|v|v, k has units kg/m; k/m therefore has units 1/m.

- The supplied standard-atmosphere air density is unused unless k is derived from rho, drag coefficient Cd, and frontal area A.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "mode": "no_drag",
    "v0_m_per_s": 20,
    "angle_deg": 45,
    "launch_height_m": 0,
    "g_m_per_s2": 9.81,
    "sample_x_m": [
      0,
      10,
      20,
      40.77472
    ]
  },
  "expected_outputs": {
    "range_m": 40.77472,
    "max_height_above_launch_m": 10.19368,
    "absolute_max_height_m": 10.19368,
    "flight_time_s": 2.883208,
    "trajectory_y_m": [
      0,
      7.5475,
      10.19,
      0
    ],
    "apex_x_m": 20,
    "roots_m": [
      0,
      40.77472
    ]
  },
  "working": "Convert angle: theta=45*pi/180=pi/4. sin(theta)=sqrt(2)/2 and sin(2theta)=1. Range=(20^2)(1)/9.81=400/9.81=40.77472 m. Maximum height=20^2(0.5)/(2*9.81)=200/19.62=10.19368 m. Flight time=2*20*(sqrt(2)/2)/9.81=28.284271/9.81=2.883208 s. With y(x)=x*tan(theta)-g*x^2/(2*v0^2*cos^2(theta))=x-9.81*x^2/400: y(0)=0; y(10)=10-981/400=7.5475 m; y(20)=20-3924/400=10.19 m; y(40.77472) is approximately 0. The apex occurs at half the range, x=20 m."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The optional-drag branch is not reproducible from the specification because its numerical integration settings and drag-vector interpretation are unspecified. The solver also needs explicit validation for zero mass and explicit angle units; otherwise it can produce undefined or physically nonsensical results.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/projectile-motion-solver/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/projectile-motion-solver/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/projectile-motion-solver/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche6/tranche6-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
