{"calculator":{"slug":"sprint-splits-calculator","math":{"href":"https://www.tracktoolspro.com/api/calculators/sprint-splits-calculator","jsonPointer":"/calculator/math","version":"2026-10-21.1","implementationVersion":"b5a8aca7b85361476e0321a08b7fa5f516fc9535","scope":"Canonical HTTP function and documented corresponding mounted-form math. This is public inspectable documentation, not access control or independent empirical validation.","unitNotation":"Input paths use [] and *; output paths are JSON Pointers with * (one segment) and ** (descendants). Empty output path denotes scalar result. Units apply to numeric quantities or explicitly described numeric strings; labels/statuses/booleans are dimensionless. More specific units, including count/index exceptions, override broad patterns.","interfaceNotes":["HTTP input is described by the adjacent inputSchema. The original handlers may accept numeric strings; this metadata adds no validation.","Mounted forms accept displayed clock/unit strings and enforce their own limits. Mounted tools limit strings to 200 characters and numeric parts to magnitude 1000000. Do not assume mounted/API input interchangeability.","Some legacy extreme/invalid tuples can produce null/empty results or nonfinite numbers serialized as null. Those are unavailable answers, not exact numerical predictions. Per-calculator domain describes the intended mathematical inputs."],"kind":"heuristic","implementationFiles":["lib/formulas/sprint-splits.ts"],"equations":["100m: vAvg=100/targetTime, vMax=1.15*vAvg; begin cumulative clock at0.15s reaction. For each10m: factor=0.7+(distance/30)*0.3 through30m,0.98 through60m,1 through80m; final factor negative/even/realistic=0.96/0.94/0.92. Segment time=segmentDistance/(vMax*factor).","100m: round initial moving segments/cumulative times0.001s, then scale by targetTime/unroundedRawTotal; cumulative rounds0.01s, splitTime0.001s. Recompute speed=segmentDistance/roundedNormalizedSplitTime, round0.01m/s. Reaction is in cumulative time, not first moving segment.","200m: first 100=targetTime*1.03/2, second100=targetTime-first 100; negative uses first-half50m weights[.52,.48], second[.48,.52]; otherwise first[.48,.52], second[.5,.5].","400m: multiply targetTime by canonical100m distributions: negative[.265,.255,.245,.235], even[.24,.25,.255,.255], realistic[.23,.24,.26,.27]; accumulate in order; velocity=100/unroundedSplitTime."],"inputUnits":{"event":"m","targetTime":"s","strategy":"enum/string (dimensionless)"},"outputUnits":{"/*/distance":"m","/*/cumulativeTime":"s","/*/splitTime":"s","/*/velocity":"m/s"},"domain":["Event100/200/400; positive finite target and representable positive rows, else []."],"rounding":["100m rounding order is part of algorithm;200m raw numbers;400m times/speed0.01."],"assumptions":["Uses the entered values and the selected convention; this documentation does not strengthen existing validation."],"limitations":["Heuristic phase templates, not measured biomechanics or an elite-pattern law. The even label retains slight fade weights; negative/even labels do not make the100/200 model a fitted athlete-specific plan."],"mountedPageNotes":[],"workedExamples":[{"input":{"event":400,"targetTime":52,"strategy":"realistic"},"expected":{"/3/cumulativeTime":52},"absoluteTolerance":1e-8,"note":"Illustrative canonical-handler result; not independent validation of an empirical model."}],"constantsAndTables":{"events":{"100":{"label":"100m","splits":[10,20,30,40,50,60,70,80,90,100],"phases":[{"name":"Drive Phase","start":0,"end":30},{"name":"Transition","start":30,"end":50},{"name":"Max Velocity","start":50,"end":80},{"name":"Deceleration","start":80,"end":100}]},"200":{"label":"200m","splits":[50,100,150,200],"phases":[{"name":"Curve","start":0,"end":100},{"name":"Straight","start":100,"end":200}]},"400":{"label":"400m","splits":[100,200,300,400],"phases":[{"name":"First 100","start":0,"end":100},{"name":"Float (100-200)","start":100,"end":200},{"name":"Maintain (200-300)","start":200,"end":300},{"name":"Finish (300-400)","start":300,"end":400}]}},"reactionSeconds100m":0.15,"peakAverageVelocityRatio":1.15,"acceleration":[0.7,0.3],"nearPeakRatio":0.98,"decelerationRatios":{"negative":0.96,"even":0.94,"realistic":0.92},"curveRatio200m":1.03,"distributions400m":{"negative":[0.265,0.255,0.245,0.235],"even":[0.24,0.25,0.255,0.255],"realistic":[0.23,0.24,0.26,0.27]}},"sources":[{"title":"Canonical HTTP binding at the documented implementation revision","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/calculator-functions.ts","note":"Existing calculation handler; math metadata is additive."},{"title":"lib/formulas/sprint-splits.ts","url":"https://github.com/wickthumb/track_tools_pro_marketing/blob/b5a8aca7b85361476e0321a08b7fa5f516fc9535/lib/formulas/sprint-splits.ts","note":"Primary implementation source for these equations/tables, not a claim of scientific calibration."}]},"annotations":{"readOnlyHint":true,"consequentialHint":false},"name":"Sprint Splits Calculator","description":"This sprint splits calculator turns a goal time into realistic 100m, 200m, and 300m checkpoints for the open 100m, 200m, and 400m. Use it as a 400m split calculator when you need a phase-by-phase race model — drive, float, maintain, finish — with even, negative, or realistic fade patterns instead of distance-race lap targets.","category":"Sprints & Hurdles","method":"POST","endpoint":"/api/calculators/sprint-splits-calculator","page":"/calculators/sprint-splits-calculator","inputSchema":{"type":"object","required":["event","targetTime"],"properties":{"event":{"type":"integer","description":"Sprint event distance.","enum":[100,200,400],"default":400},"targetTime":{"type":"number","description":"Target finish time in seconds.","minimum":0},"strategy":{"type":"string","description":"Pacing strategy.","enum":["realistic","even","negative"],"default":"realistic"}}},"example":{"event":400,"targetTime":52,"strategy":"realistic"}}}