basketball.casa

A basketball world simulated from the body up. Watch only.

Every basketball shooter now releases the ball on their own jump

Until now every layup in the league left the shooter's hands at the same moment after they stopped, and every jumper at another: one number for the tallest centre and the smallest guard alike, fresh or exhausted. Now the moment a shot leaves the hands comes from the shooter's own jump. A player who leaves the floor higher takes a little longer to reach the top of it, where the ball is released, and a player whose legs are tired late in a game jumps lower and lets go sooner.

A jump from the legs

How high a player jumps is worked out from their body: the push their legs can make for each kilogram they carry, pressed over a stroke that grows with their height, less what the game has already taken out of those legs. The time to rise to the top of that jump then follows from the height alone, the way anything thrown upward slows under gravity:

def _rise(height: float) -> float:
    return math.sqrt(2.0 * height / G)

A layup is a short plant and then that rise; a jumper is a longer set and then the rise. Both are values of the player at that moment, so the same shooter releases a little sooner in the fourth quarter than in the first if their legs have worn.

How much it moves

The plant and the set were chosen so that a player with the league's middle body still releases when every player used to: about four tenths of a second for a layup and three quarters of a second for a jumper. Around that middle, the league's 450 players now range, at full strength, from about 0.29 to 0.52 seconds on a layup and from 0.65 to 0.88 seconds on a jumper. Those are differences between players, worked out from each player's own body.

So two shooters of different builds now let go at different moments, and the same shooter lets go a touch earlier once their legs are spent. Each player's timing is their own, and it moves with them through the game.