Real haptic trainers reproduce the "feel" of a needle crossing tissue by driving a motor with a resistance value looked up from the needle's current depth. Each tissue layer has its own stiffness, and the transition into a new layer produces a brief spike — the sensation of the tip "popping" through a boundary — before resistance settles to that layer's baseline. This simulator computes the same curve from insertion depth and renders it as a live force meter instead of motor torque.
F(depth) = base(layer) + spike · bump(t_layer)
tip = entry + dir(angle)·depth + tremor(t)·depth
hit = |tip − vessel_axis| ≤ vessel_radius
- Insertion depth — how far the tip has advanced along the needle's axis; the force meter and current layer both update live as it crosses skin, fat and muscle.
- Approach angle — the needle's tilt from vertical; a steeper angle changes how far laterally the tip drifts by the time it reaches the vessel's depth.
- Hand tremor — a small angular jitter applied at the entry point, amplified at the tip the deeper the needle goes, exactly as real hand unsteadiness is magnified over a longer needle.
- Attempt puncture — samples the tip's instantaneous position (tremor included) and scores it against the hidden vessel; a hit shows a flashback cue, a miss shows how close it was.
- New patient — randomizes skin/fat thickness and vessel depth, since real patient anatomy varies and is never directly visible before the attempt.
Real-world relevance: this layered resistance-plus-tremor model is the core teaching mechanism behind IV/venipuncture and regional-anesthesia haptic trainers — it lets a novice build the same "feel" for tissue planes that experienced clinicians rely on, without risk to a real patient.