Interactive tennis serve simulator

Serve Lab

Experiment with serve speed, contact height, court position, target placement, air resistance and spin—and see how they affect the ball’s flight and net clearance. The simulator calculates the launch angle and aim needed to reach your chosen landing point.

Start with a serve of your own

Enter an estimated speed and contact height, or explore an example. Then try changing one thing at a time.

Serve outcome

Updates as you change your serve settings.

IN · clears netServe speed100.0 mphContact height2.75 m
Net clearance
?

Gap between the bottom of the ball and the net at crossing. Positive clears; negative hits the net. This is not a serve-in percentage.

Landing point
?

The target you selected. Launch elevation and sideways aim are solved to reach it; the model does not simulate random serving error.

deep
Box margin
?

Distance from the selected target to its nearest service-box boundary. Larger margin leaves more room for error, but does not quantify your consistency.

Flight time
?

Time from racket contact to first ground contact. Playback can continue through an illustrative rebound.

Launch angle
?

Calculated elevation needed to hit your target. A negative value means the ball leaves the racket downward.

Speed at bounce
?

Speed just before first ground contact, after any air resistance. It is not the rebound speed.

Trajectory · side elevation

Vertical scale enlarged for readability

model pathno-dragnetrebound estimate

0 m1 m2 m3 m netservice line

0 ms
contactnet · first bounceend of rebound

Placement · top view

Full doubles court · width enlarged 50%

receiving baseline server’s baseline

Live spin inspector

Ball rotation, spin axis and racket contact

server view · launch spin · 3D axis
dark arrowrear-face brush orange arrow · spin axiscyan ring · spin plane
Server view (racket side) · no spin selected.
Total spin0RPM0.0 rotations/sec
Combined spinFlat / no spinaxis inactive
Vertical component
0 rpm
Side component
0 rpm
Longitudinal component
0 rpm
Illustrative brushing directionNo brush selected

The arrow shows rear-face brushing implied by topspin and sidespin, not an exact contact patch. Clock positions are approximate. Longitudinal spin needs out-of-plane contact geometry; a 2D arrow cannot specify it.

Set your starting serve

An estimate is enough to begin. You can edit it later.

1. Serve speed

Use a measured speed if you have one. Otherwise enter a rough estimate or use the example below.

2. Contact height

The ball’s height when you hit it—not your own height. It includes your upward reach, the racket and any jump. The simulator supports 2.00–3.60 m.

Help me estimate contact height

A side-on video paused at contact can help you estimate where the ball is relative to your standing height. Camera angle and distance can distort the comparison, so treat it as approximate.

There is no fixed amount to add to your body height: reach, racket position and jump vary. If you are unsure, use the example and try a slightly higher or lower contact point to see the effect.

Your target, court position, drag and starting spin will use the example setup. This creates a starting point for experiments, not a measurement of your whole serve. Saved in this browser only.

A guided introduction

Explore one change at a time

How much room does a serve have?

Serve Lab began with a simple question: how do contact height and serve speed affect clearance over the net? The starting point was a first serve around 160 km/h—roughly 100 mph—and the surprisingly small margins involved in getting it into the service box.

It grew into an interactive way to explore serving position, targets, air resistance, three-dimensional spin and an illustrative bounce. Use it to understand relationships and compare scenarios.

You do not need to understand every control at once. Begin with height and speed, then add one layer at a time. Opening this guide does not change your current serve.

Features & model

Explore what Serve Lab does, how its controls work and the assumptions behind the results. Open a section for details.

Actions and presets
Starting serve and experiments
Enter estimated speed and contact height, or use a labelled example. Try less speed, higher contact or added topspin. Combine the experiment toggles or switch them off individually. Each uses your starting value for that setting; return to the full starting setup at any time. Only speed and height are personalised, and the starting serve is stored in this browser.
Play / Pause
Animate the serve and its estimated rebound, or pause to inspect it.
Reset
Restore the default 100 mph setup with air resistance on and no spin.
Share this serve
Copy a link containing your serve settings and speed units. Opening it restores that setup, ready to play.
Save this serve
Name and save your current settings and speed units in this browser. Choose a saved serve to load it immediately and compare setups. Changed settings mark the selected serve as modified. Update saved serve stores those changes; save under a new name to keep both versions. Rename changes its name without changing the settings. Delete asks for confirmation before removing a save. Clearing browser data removes saves; use Share to transfer setups between devices.
Timeline
Scrub through the flight and rebound. Markers identify net crossing, first bounce and the current time.
Placement presets
Start with the default, T serve, Wide or Safer setup. These change several variables and reset spin to zero.
Spin presets
Choose Flat, Slice, Kick or Topspin. The presets assume a right-handed server.
Serve variables
Serve side
Switch between deuce and ad courts.
Speed and contact height
Set the ball’s launch speed and its height above the court at racket contact.
Baseline position
Move the contact point sideways along the baseline.
Contact inside the court
Move contact forward from the baseline to represent reaching or jumping into the court.
Target depth and width
Choose the landing distance beyond the net and across the opposite service box.
Topspin / backspin
Adjust the spin component primarily responsible for downward or upward aerodynamic movement.
Sidespin
Adjust the spin component primarily responsible for sideways curve.
Longitudinal spin
Add rotation around the court’s lengthwise axis, contributing to the combined spin and estimated rebound.
Air resistance and drag factor
Enable or disable quadratic drag and adjust its strength.
Control groups and impact labels
Controls are grouped by purpose. Expand Contact position, Target position, Spin or Air resistance for more settings. High, Medium and Low labels describe approximate net-clearance sensitivity near the default setup, not overall importance.
Serve outcome and statistics
Outcome strip
See whether the calculated serve clears the net, alongside the current speed and contact height. Results update as you change settings.
Net clearance
The gap between the bottom of the ball and the net at crossing.
Landing point
Your selected landing depth and placement.
Box margin
Distance from the selected target to its nearest service-box boundary.
Flight time
Time from racket contact to first ground contact.
Launch angle
The calculated vertical launch angle needed to reach your target.
Speed at bounce
Ball speed immediately before its first ground contact.
Playback readouts
Inspect the ball’s position and movement at the selected time.
Court and trajectory diagrams
Side elevation
Follow the flight, net crossing and estimated rebound from the side. The vertical scale is enlarged for readability.
Court overview
View both baselines, doubles alleys, singles lines, contact point, target and path. Display width is enlarged by 50%; calculations use regulation dimensions.
Comparison path
Compare with a path without spin when spin is active, or without drag when only drag is active.
Ball markers
Follow the current ball position in both views while playing or scrubbing.
Spin visualisation and bounce
Rotating tennis ball
Seams and surface details make the rotation direction visible. Animation is slowed for readability.
Spin axis and plane
See how the spin components combine into a three-dimensional rotation.
RPM readouts
Read individual spin components and the combined spin rate.
Racket contact illustration
Explore an illustrative contact region and brushing direction from the server’s perspective.
Estimated rebound
See how impact, friction and spin affect the ball after the first bounce. The ball inspector continues to show launch spin.
Guidance and preferences
How to use Serve Lab
Follow a guided introduction, beginning with the original question about contact height, serve speed and net clearance, then adding position, drag and spin.
Guided examples
Apply example setups directly from the guide.
Contextual help
Use the question-mark buttons beside controls and statistics for explanations.
mph / km/h
Convert speed displays without changing the underlying serve. Your preference is remembered in this browser.
Appearance
Choose light, dark or system mode using the header icons. Your preference is remembered.
Desktop and mobile
Use the simulator with a layout that adapts to your screen.
Questions or feedback
Contact info@servelab.app using the email link in the page footer.
Model assumptions and limitations
Target-based calculation
The landing point is an input. The simulator solves vertical launch angle and horizontal aim to reach it; it does not predict random serving errors.
Net faults
The calculated path can hit the net. Any flight drawn beyond that collision is hypothetical, and rebound is omitted.
Flight physics
Gravity, optional quadratic drag and a simplified spin-induced aerodynamic force determine the flight. Spin RPM is assumed constant during flight.
Bounce
Restitution and friction are illustrative parameters, not measurements calibrated to a particular court surface.
Racket contact
The contact display explains spin; it is not a simulation of racket–ball impact.
Margins are not probabilities
Clearance and box margin describe this modelled serve. They do not estimate your first-serve success percentage.
Geeky stuff

Three transparent force layers

Geometry applies gravity. Air resistance adds quadratic drag. Spin adds 3D Magnus force from the selected RPM vector. The numerical solver adjusts both elevation and sideways aim to preserve your target. Assumptions: 57.7 g, 67 mm ball and air density 1.225 kg/m³.

Fdrag = ½ρCdAv²   ·   FMagnus = ½ρACLv²   ·   S = rω⊥/v
Running checks…

What remains simplified

  • Fixed 3D spin vector within each flight segment; spin changes at bounce
  • CL = min(0.35, 0.60 × spin ratio) as a working approximation
  • No spin-dependent change to the separate drag setting
  • Rotating seam uses a smooth spherical dog-bone approximation; felt flecks are visual only
  • No wind, ball deformation or line-call tolerances

Bounce estimate: rigid thin-shell ball, restitution 0.75, friction coefficient 0.55. Friction opposes contact slip, capped by the normal impulse, and changes both speed and spin. These are illustrative parameters, not calibrated to a court surface. Rebound ends at the receiving baseline or second bounce. Vertical-axis sidespin alone does not give a sideways impact impulse.

Net clearance uses the bottom of the ball, including its 3.35 cm radius. Net height uses a labelled parabolic sag approximation from 0.914 m at centre to 1.07 m at the singles sidelines.

Court constants: 23.77 m baseline-to-baseline, 8.23 m singles width, 6.40 m net-to-service-line. Spin presets are illustrative, and all measurements are analytical estimates rather than coaching or officiating data.