PhysWall · Basketball

PhysWall inverts a closed, non-linear physical law at a single measurement point — and refuses when the inverse is not unique.

PhysWall · The Physical-Logic Gateway · four-dimensional gap decomposition · Beta

The gateway between what physics allows and what the numbers show — geometry sets the expectation, the data measures the distance from it.

What this does. Every three-pointer is a thrown object. Given how much a shooter's release speed varies from shot to shot, geometry alone decides what fraction of their attempts fall inside the rim. This tool computes that number, compares it to what the player actually shoots, and reports the difference.

A gap does not mean a bad shooter. It means something other than the arc is doing the work — defensive pressure, shot selection, fatigue, or mechanics. The point is to separate the part that is physics from the part that is not, so a coach knows which one to address.

Worked out in your browser. This tool is not an inversion of a physical law, so there is no server answer to sign — it is a significance calculation, and it says so rather than implying otherwise.

1.45%

Lower σ = tighter mechanics = higher expected FG%. Move the slider to see how consistency changes what physics predicts.

ZoneDist.PredictedObservedGap ⓘ
Corner 322 ft38.6%38.6%0.0
Wing 323.8 ft35.5%36.5%+0.4
Top key25 ft34.5%34.6%+0.1
Non-RA paint8 ft78.2%44.2%−34.0

⚠ COMPARE TWO SHOOTERS — AND WATCH THE ORDER FLIP

A percentage is not comparable across the floor. Accuracy falls about 0.8 points per foot, so two shooters at the same number are not the same shooter if one is standing closer. Set both and see.

Shooter A
3P%
Zone
Shooter B
3P%
Zone

 

⚠ This falls out of combining two things, neither of which was ours — the inversion above, and a distance slope measured by somebody else across ~25,000 attempts. It is a consequence, not a validated ranking, and nobody has checked it against a scouting outcome.

⚠ DEFENSIVE REACH — BUILD ONE AND SEE WHERE IT LANDS

DRI is not derived from a physical law. It is an index of four box-score rates, each standing in for a dimension of coverage, and it is checkable by direction rather than by formula: a known rim protector should score high, a pure shooter should not. Move the four and see.

STL per 36 — horizontal
1.00
BLK per 36 — vertical
0.60
REB per 36 — spatial
6.0
TOV per 36 — liability
1.80

 

⚠ Read this one by direction, not by the number. It is a weighting of counting stats, so what it can tell you is whether a player covers ground, protects the rim, or does neither — not by how much. The release consistency above is a different kind of thing: it comes out of the geometry of the shot, and it has a measured value.

DEFENSIVE PRESSURE DECOMPOSITION

Defence does not show up as a number of its own. What shows up is a gap: what the physics says a shot from here should go in at, against what it actually goes in at. The first half of that needs a shooter — so set one, and the gap is what is left over.

1.45%
Zone Physical exp. Observed From defence

43% = (78.2−44.2)/78.2. Fraction of physical expectation removed by defense. Corner 3 is ~100% ballistic — defense minimal.

And the corner row is the calibration point, not a result. σ is set so the corner matches, which is why it lands at zero. The finding is what happens to the other rows once that is fixed: the same σ and the same physics predict 78.2% in the paint, and the paint returns 44.2%. Defence is not spread evenly across the floor, and the arc is where it can do least.

PLAYER PHYSICAL SIGNALS
Coach Wall
"Tap any player above, or enter one of your own further down. I'll tell you what the physics says about their mechanics — and whether the sample is big enough to mean anything."

PHYSICAL MODEL — RELEASE CONSISTENCY σ

TRADE ANALYZER — SAME SHOOTER, DIFFERENT ARC

σ belongs to the player — it is their release mechanics and it travels with them. The three-point line does not: NBA 7.24 m above the break, FIBA 6.75 m. Same shooter, a 2.3-point shift in what geometry expects. Pick a player and a destination.

Player
Moves to
Tracking data, when you have it

CUSTOM PLAYER — TRY YOUR OWN

Name
3P%
3PA (attempts)
2P%
League

LOAD YOUR OWN ROSTER

The three teams here are what I had box scores for. Any roster works — the arc does not care who is shooting.

Three columns are required: name, 3P%, 3PA. That is enough for the arc.

Five more open the defensive index: MP, STL, BLK, DRB, TOV. All five or none — four rates with the fifth treated as league average is a number that looks complete and is not.

The header names are Basketball-Reference's own, so a Per Game table pastes in with nothing renamed: Share & Export → Get table as CSV.

Required: name, 3P%, 3PA. Optional: team, league, GP, 2P%, PTS, position, age. League takes nba, el or bcl — it sets which arc the player is judged against, and defaults to NBA.

TRACKING DATA — LOAD IT WHEN YOU HAVE IT

The model predicts what an open shot goes in at. A box score mixes open and contested attempts, so the gap it measures contains two things that cannot be separated. Load uncontested splits and the verdict sharpens: a shooter whose open looks match the arc has a shot-selection problem, not a mechanical one, and those need different work.

CSV: player, uncontested_3PM, uncontested_3PA. Optional: contested_3PM, contested_3PA. Names are matched loosely on surname, so an export from any provider should land.

TEAM PHYSICAL PROFILE — ORI vs DRI

HOW TO READ THESE NUMBERS

ORI and DRI are on a 0–100 scale. 50 is the baseline — a player contributing at the average level of the dataset. Numbers above 55 are meaningfully above baseline; below 45 are below it.

These numbers are checkable by direction, not by formula. A known defensive anchor should score high on DRI. A pure shooter should score high on ORI. If they don't, the index is wrong — and that is the check.

WHAT GOES INTO ORI — Offensive Physical Rating

Built from three offensive statistics, each measuring a different dimension:

Statistic What it measures
3P% How far above or below the arc's prediction the player shoots from three — the core physical signal of this app
2P% Paint efficiency — how close to the physical ceiling the player gets inside the arc
AST, TOV, MP Creation value — net passes that become baskets minus giveaways, per minute played
WHAT GOES INTO DRI — Defensive Reach Index

Built from four defensive statistics, each corresponding to a physical dimension of coverage:

Statistic What it measures
STL Horizontal coverage — anticipation and closing speed across the floor
BLK Vertical coverage — peak jump height and timing at the rim
REB Spatial control — positioning and pursuit after the shot
TOV, MP Liability adjustment — turnovers extend opponent possessions, per minute played
QUADRANTS — split at ORI = 55, DRI = 62

Complete (ORI↑ DRI↑) · Offensive (ORI↑ DRI↓) · Defensive (ORI↓ DRI↑) · Developing (ORI↓ DRI↓).
Thresholds are fixed reference values, not league medians.

WHAT A FULL EUROLEAGUE SEASON SHOWED

The FIBA number was a prediction with nothing behind it until now. A full 2024-25 EuroLeague season — 14,981 attempts, from Basketball Reference — settles half of it.

The gap holds. Geometry predicts Europe should shoot 2.30 points better because the line is 49 cm closer. Observed: 36.35% against Portland's 34.82%, a gap of 1.53 points with a standard error of 1.00. That is 0.77σ from the prediction — the arc was right.

The level is high. Both leagues shoot about 1.1 points below what the model expects, by almost the same amount. A constant offset in both places is not noise; it is the model predicting an open shot while a box score counts every shot, contested ones included. Which is the thing tracking data fixes, and why the loader above exists.

So: trust a gap more than a level. The difference between two players, or between two leagues, is measured against the same offset and it cancels.

WHY THERE IS NO SINGLE COMBINED SCORE

ORI and DRI are independent axes, so they are read as a logical AND — a player is complete when both clear their threshold, not when their average does. Averaging them would rank a player at ORI 70 / DRI 40 the same as one at 55 / 55, and those are different players. This is the same reason the D1–D7 engine returns seven separate verdicts rather than one score: independent constraints define a rectangle, not a distance from an ideal point.

ORI and DRI are not predictions of the shot-arc model. ORI uses its 3P gap as one input; DRI does not use it at all. Neither index produces a physical forecast — a player's position on this chart is a description, not a prediction. The zone table above is the only thing the physics itself produces.

ORI — offensive
DRI — defensive
hover dot for name
ORI vs DRI scatter.

Data sources — what we use now
All player statistics are from Basketball Reference (public). The EuroLeague validation uses the same source: 2024-25 season totals, 260 players, 14,981 three-point attempts. Box-score totals: games played, FG%, 3P%, 2P%, assists, turnovers, steals, blocks, rebounds, minutes. These are the inputs to ORI and DRI as described in the ⓘ panel above.

What paid tracking data would add
The NBA's official tracking provider (Second Spectrum) captures 25 frames per second from cameras in every arena. This unlocks data unavailable in public box scores: contested vs uncontested FG% per zone — the physical model predicts what an open shot should go in at; tracking tells us whether the shot was actually open. Play-type breakdown (isolation, pick-and-roll ball-handler, spot-up, cut) — ORI could separate a player's mechanics from their shot selection. Defensive FG% allowed per zone — DRI would measure actual opponent efficiency instead of proxying it through steals and blocks. Closing speed and distance covered — the physical quantities the model reasons about, measured directly instead of inferred.

The model does not change when better data arrives. The same physical constraint applies — only the signal gets sharper. This is the architecture: physics sets the expectation, data measures the gap.

support

WHERE THIS COMES FROM

Gilovich, Vallone and Tversky (1985) reported that basketball shooting shows no hot hand. That result stood for 33 years and was taught as a standard example of people misreading randomness.

Miller and Sanjurjo (2018) showed the original analysis carried a bias, and correcting it reverses part of the conclusion. Econometrica 86(6), 2019–2047, free as arXiv:1902.01265.

And their own Appendix A.2 limits it: the bias is negligible when an observer sees many sequences. This tool is about a short run by one player. It does not carry over to a season-long or league-wide analysis, and an analyst pooling thousands of sequences is not exposed to the effect.

Nothing here was measured by us. The mathematics is published, the correction is published, and the limit is the authors' own.

WHAT THIS MODEL DOES

Every shot in basketball follows a ballistic arc. Given a release angle and speed, physics determines whether the ball enters the hoop. The model asks: what fraction of shots land inside the rim's tolerance window?

THE ONE PARAMETER — σ

σ is the player's release consistency — the standard deviation of shot-to-shot variation in release speed. Launch angle sits at a stationary point of the range equation and contributes ~7% of the tolerance window per degree — an order of magnitude less than release speed (~189% per 1%). A lower σ means tighter, more repeatable mechanics. Calibrated at σ = 1.45% from NBA corner-3 data (38.6% observed).
Move the slider to model different consistency levels.

WHAT THE ZONE TABLE SHOWS

For each zone, the expected FG% a player with this σ should make — purely from geometry. The gap between this expectation and a player's actual percentage is the signal: positive means above physics, negative means below.

NBA and FIBA use different three-point distances. The FIBA-NBA gap is validated against a full 2024-25 EuroLeague season: 36.35% on 14,981 attempts vs Portland's 34.82%, observed gap 1.53 points where geometry predicts 2.30 (z=−0.77).

What the shot arc predicts at this release consistency (σ=1.45%, set from NBA corner-3 data). Move slider to see sensitivity.

What drives the difference between zones
~25,000 attempts · public shot data · 2023-24

The three predictions above land within half a point of the observed numbers, across zones that differ by four points. That is the model working.

An independent analysis of ~25,000 attempts then answered the next question — what actually makes one zone harder. Accuracy falls about 0.8 points per foot, and the corners land exactly where that line says a 22.9-foot shot should.

Fitted against the same three numbers:

tolerance window per zone   within 0.42 points
distance alone              within 0.14 points

fitted slope                -1.3 points per foot
independently measured      -0.8 points per foot

Distance is the driver. Which is useful, because distance is something a coach can change and a tolerance window is not: the gap between the corner and the top of the key is roughly two and a half feet, and that is where the four points live.

So the zone tolerances here are best read as a stand-in for distance rather than as a geometric property of the spot. The part that is geometric, and separately confirmed by tracking data, is the one below it: release speed is what varies, and the angle is not.

THE PARAMETER, AND WHERE ELSE IT TURNS UP

That parameter was picked from geometry — it is the term that survives when you ask what a ballistic arc is sensitive to — and everything above was built around it before any of the following was read.

It turns out to be an established measure in the shot-mechanics literature, arrived at from the opposite direction. Slegers & Love (2024), working from motion capture of 31 professional players, assessed shooting accuracy using "the standard deviation of the intra-individual release velocity as a proxy, given its relevance to distance control."

Same quantity. Different reason. They reached it from biomechanics and coaching practice; this reached it from the geometry of a parabola through a hoop. That the two converge is the point — and it was found by checking afterwards, the way an outside reviewer would, rather than by starting from the literature and building to fit it.

Two further results in the same line of work sit alongside it. Mullineaux & Uhl (2010) found that successful shots cluster near an optimal minimum release speed rather than at higher speeds. And Slegers (2022) found that peak performance comes from matching a player's own mechanics rather than conforming to a fixed ideal release angle — which is the same conclusion this model reaches by treating the angle as a free choice and the speed as the thing that must be repeatable.

THE FOUR THINGS EVERY TOOL HERE HAS TO DO

This is not a basketball model that happens to be careful. It is one shape, used four times, and shooting is where it is easiest to check:

a relationship, backwards   release scatter → what fraction goes in
                            becomes: the percentage → the scatter

a window                    the rim's tolerance, from geometry

a refusal                   no verdict when the sample is too small
                            to carry one, which is an output and
                            not a missing one

a stated source            every threshold names where it came from

The tool on this site with no physics in it at all meets the same four. Which is the point: the shape is what makes an answer trustworthy, and physics is where it was found rather than what makes it hold.

CHECKED AGAINST ~180,500 SHOTS NOBODY COUNTED FOR US

⚠ The tilde is not modesty. Three of the four counts are exact to the shot; the court-zone set is published as ~25,000. A sum of three exact figures and one rounded to the nearest thousand, printed to the unit, claims a precision it does not have. This read 180,513 until an outside reviewer said so.

This model came out of geometry, not data. Every figure below was produced by somebody else, for their own reasons, before any of it was read here — and each one is followed by what it did to the model.

90,970  three-point attempts   found three errors of presentation
49,562  free throws            confirmed the core assumption
25,000  shots by court zone    took the zone differences away
14,981  EuroLeague attempts    where the arc's prediction was tested
        ———————
~180,500  shots · four independent sources

  plus  31 players             motion capture — the parameter
        (not shots, not counted above)

Two of them confirmed something, one took something away, and one found a boundary. All four could have found nothing, which is what makes them worth quoting at all.

⚠ The EuroLeague line is the only one where the model said what it expected before anyone looked. The European arc is shorter, so shooting there should be easier — by about 2.3 points, on the geometry. A full season came back at 1.5. Half the effect is real and half of it is not there, and a gap that size on that many shots could still be chance. It is written down as a miss rather than a match.

WHAT TWO INDEPENDENT DATASETS SAID ABOUT THIS MODEL

Two collections of numbers exist that were produced without knowing this model exists, and both grade it. They share no provider, no method, and no shot type.

90,970 three-point attempts
Elias · official league counting

Outcomes only. Made or missed, by zone.

What it caught: three errors. A gap presented as tight that the official count put at +3.7%. A catch-and-shoot figure matched against the wrong cell — catch-and-shoot is roughly half contested, and the model predicts an open shot. And nine players from one team standing in for a league baseline, which turned a refutation into a false agreement.

All three are fixed, and a subset is now refused as a league proxy by type rather than by review.

49,562 free throws
Hawk-Eye · optical, 60 fps, 3D

Launch conditions. Speed, angle and height at release.

What it confirmed: this model varies release speed and holds the angle fixed, because the angle sits where small errors barely matter. A physics group measured that separately from 21,964 tracked shots and found the same — and that speed consistency predicts shot quality at r = 0.73 against angle at r = 0.35.

Velocity to reach the hoop centre, from geometry with nothing fitted: 14.94 mph. Measured: 14.74.

⚠ AND THE NUMBER THAT ONLY EXISTS BECAUSE THEY DISAGREED

The two do not reconcile, and the size of the gap is itself a quantity nobody publishes.

league free-throw average           ~78%
pure-swish window, from geometry    ±1.20%

  → model needs             σ = 0.49%   (0.07 mph)
     tracking measured          σ = 1.6-1.9% (0.24-0.28 mph)

  rim forgiveness = 3.3 to 3.9x

A shot that touches the rim frequently still drops, so the window that actually admits a ball is three to four times wider than a clean swish. That ratio falls out of the disagreement, not from either dataset alone.

So the σ here is not what a tracking camera would hand you. It is smaller, because it already assumes the rim helps. It puts shooters in the right order, and the number itself belongs to this model rather than to the shot.

⚠ And 3.3-3.9x is measured on free throws. A three-pointer arrives at a flatter entry angle, so its forgiveness is probably smaller — carrying this across shot types has not been checked, and is not claimed.

⚠ WHERE THIS MODEL STOPS BEING RIGHT

This model aims at the centre of the hoop. Optical tracking of hundreds of millions of shots says the highest make rate is centred 11 inches deep — two inches past centre, because a ball off the back of the rim frequently still drops. Coaches taught the swish for decades; the tracking data did not agree.

So the model has an assumption sitting at zero that the world puts at two inches. The useful question is where that costs anything, and the answer is not everywhere:

                  aiming centre   aiming 2" deep   cost
three-pointer         36.0%           36.1%        ~0
free throw            91.5%           92.6%        1.1
free throw, 3" short  85.0%              —         6.5

On a three-pointer the hand shakes far more than two inches, so the aim point vanishes into the scatter and the assumption is harmless. On a free throw the hand is steady enough that where you aim starts to matter as much as how steadily you shoot.

Which sets a boundary rather than a correction. This model is sound on long shots, and on short accurate ones it is optimistic — by a few points, in a direction we can name.

⚠ And it explains part of the 3.3-3.9 figure above, which was computed on free throws: some of that gap is the rim being forgiving, and some of it is this model aiming at the wrong point. Those are two separate effects, and how much each contributes is not something anyone has separated.

THREE COMPETITIONS, NOT TWO — AND WHAT THE ARC TURNED OUT NOT TO EXPLAIN

Holon reads differently from the other two, and it is not close. A Champions League season is 6 to 12 games, so a player accumulates 30 to 60 three-point attempts — enough to detect a 20-point gap and nothing smaller. On top of that, they use a different ball there than in their domestic league, which loosens the release without saying so anywhere in the box score. Holon verdicts are indicative at best. Maccabi's 38 EuroLeague games and Portland's 82 are a different order of evidence.

The three teams here play in three different competitions, and the app used to label two of them the same. Portland plays 82 NBA games of 48 minutes. Maccabi plays 38 EuroLeague games of 40. Holon plays roughly 14 in the Basketball Champions League. The arc is identical in the two European competitions — 6.75 m against the NBA's 7.24 m — so the geometric expectation is the same for both, but the seasons are not comparable and the app now says so on every card.

The arc gives FIBA a geometric advantage: the line is 6.75 m instead of 7.24 m, which at an unchanged release consistency is worth +2.2 percentage points. Checked against whole-league data, that advantage does not appear:

  NBA EuroLeague gap
predicted 35.6%37.8% +2.2
all shots 36.0%35.8% −0.2
catch-and-shoot 37.6% matches
season minutes ~2,800~1,050 2.7×

On all shots the prediction is wrong by 2.4 points and wrong in sign. On catch-and-shoot it lands within 0.2 points. The difference between those two rows is that a third of EuroLeague threes are pull-ups, taken on the move, and they convert at 32.3% rather than 37.6%.

The geometry was right and the assumption around it was not. The model predicts a set, open shot. Extending it to a league average silently assumed that release consistency travels unchanged across leagues; it does not. Solving backwards from the observed number puts EuroLeague σ at roughly 1.54% against the NBA's 1.45% — about 6% looser, which is what a higher share of shots on the move would produce.

An NBA player logs roughly 2.7 times the season minutes of a European one, so fatigue is a fair objection to attributing all of this to shot profile — and it is not answered here. Postseason shooting does fall, 35.96% to 34.76% league-wide, but that comparison moves at least six things at once: accumulated fatigue and injuries peak, pressure peaks, defence tightens and isolations rise, while rest between games also rises and rotations shorten. The 1.21-point drop fits any of them or all of them. What the arc explains and what the calendar explains are not separated by the data loaded here. Separating them needs month-by-month splits, or back-to-backs against rested games, or the catch-and-shoot and pull-up split within the same games — each moving one variable instead of six.

So the zone table below should be read as catch-and-shoot expectations, not league averages, and a player's gap is only comparable across leagues once their shot profile is. That is exactly what the tracking import resolves.

A checking tool, not professional advice. It tells you what a measurement does and does not support; what to do about that is your decision.