Spaces:
Running
Running
"""LBW decision logic for the cricket DRS demo. | |
This module encapsulates the high‑level logic used to decide whether a | |
batsman is out leg before wicket (LBW) based on the ball's trajectory. | |
In professional systems the decision depends on many factors: where | |
the ball pitched, the line it travelled relative to the stumps, the | |
height of impact on the pad/glove, and whether the batsman offered a | |
shot. To keep this example straightforward we apply a very simple | |
rule: | |
* If the predicted trajectory intersects the stumps, the batsman is | |
declared **OUT**. | |
* Otherwise the batsman is **NOT OUT**. | |
We also return the index of the frame deemed to be the impact frame. | |
Here we take the impact frame to be the last frame where the ball was | |
detected. In a more complete system one would detect the moment of | |
contact with the pad or glove and use that as the impact frame. | |
""" | |
from __future__ import annotations | |
from typing import List, Tuple | |
def make_lbw_decision( | |
centers: List[Tuple[int, int]], | |
trajectory_model: dict, | |
will_hit_stumps: bool, | |
) -> Tuple[str, int]: | |
"""Return a simple LBW decision based on trajectory intersection. | |
Parameters | |
---------- | |
centers: list of tuple(int, int) | |
Sequence of detected ball centres. | |
trajectory_model: dict | |
The polynomial model fitted to the ball path (unused directly | |
here but included for extensibility). | |
will_hit_stumps: bool | |
Prediction that the ball's path intersects the stumps. | |
Returns | |
------- | |
Tuple[str, int] | |
The decision text (``"OUT"`` or ``"NOT OUT"``) and the index | |
of the impact frame. The impact frame is taken to be the | |
index of the last detection. | |
""" | |
impact_frame_idx = len(centers) - 1 if centers else -1 | |
decision = "OUT" if will_hit_stumps else "NOT OUT" | |
return decision, impact_frame_idx |