我要请一周假“从错误中吸取教训”博客系列,因为NCAA篮球锦标赛快到了! 我不能错过担任篮球职务的机会。
我在印第安纳州长大,现在住在肯塔基州列克星敦附近,所以我是一个天生的篮球迷。 当我还是个小孩子的时候(很多很多年前),我梦想着最后一击赢得四强。 荣耀和名誉将是我的!
唉,这并不是注定的,因为我从来都不是一个非常好的球员。 我的借口过去是(现在也是)将其归咎于我的身高。 您看,天气好的时候我的身高大约只有 5 英尺 6 英寸(167 厘米)。 我们都知道篮球运动是由身高超过 6 英尺(大多数接近 7 英尺及以上)的球员主导的。 像马格西·博格斯(Muggsy Bogues)或斯普德·韦伯(Spud Webb)这样的矮个子球员是罕见的例外。
身高优势有明显的原因:更好的篮板能力、在“篮筐上方”打球、防守时更宽的臂展、移动球员时更大的体积等等。 矮个子球员可以比高个子球员拥有一些优势(例如速度),但如今这项运动绝对是“大个子的游戏”。
尽管如此,我还是想知道这个游戏是否被“操纵”以偏向更高的玩家,因此我从来都不是一个好的玩家。 所以我决定尝试证明一个简单的例子:较高的球员在罚球时比矮小的球员更有优势。
所需的输出图
我正在寻找的是罚球的“操作窗口”图,以便我可以比较高个球员和矮个球员的窗口。 这将涉及对篮球的初始速度与球的初始角度(或轨迹)的组合进行建模,确定投篮是“命中”还是“未命中”,并绘制结果。 最终,这应该会产生如下图:
Figure 1: Example of Free Throw Tolerance WindowFigure 1: Example of Free Throw Tolerance WindowFigure 1: Example of Free Throw Tolerance WindowFigure 1: Example of Free Throw Tolerance Window图 1:罚球容差窗口示例
此外,我们应该能够为镜头设置动画,如下所示:
Figure 2: Animation of Free Throws for Constant Input Velocity, Varying TrajectoryFigure 2: Animation of Free Throws for Constant Input Velocity, Varying TrajectoryFigure 2: Animation of Free Throws for Constant Input Velocity, Varying TrajectoryFigure 2: Animation of Free Throws for Constant Input Velocity, Varying Trajectory图 2:恒定输入速度、变化轨迹的罚球动画
您对如何执行此操作及其含义感兴趣吗? 继续阅读!
开发模型
对于我的模型,我使用了美国男子篮球场和球尺寸:
罚球释放点:距篮板前表面 15 英尺(水平)
球门直径:18英寸
球门高度:离地 10 英尺(垂直)
球门中心:篮板前15英寸
篮球直径:9.55 英寸
我引入了一些假设和约束来简化模型:
该模型有三个输入变量:
- 篮球的“发射”高度(即释放点距地面的高度)
- 我看了两个高度:离地面 6.5 英尺(大约是我的出手点,手臂伸展),离地面 8.5 英尺(大个子投篮的地方)
- 篮球的出手速度
- 篮球的出手角度(或初始轨迹)
模型的输出(对于释放高度、初始速度和初始轨迹的每种组合)是“成功”或“未命中”的分类值。
运动方程是标准弹道方程。 这些都显示在所附的 Word 文档中。
成功/失败标准
对于“命中”的投篮,我要求投篮“嗖嗖”地穿过网,完全不接触篮筐。 这个标准乍一看似乎很简单:当球的中心位于轮缘高度且处于向下的轨迹时,球是否位于轮缘的最前部和最后部位置之间? (请记住,我们只关注完美居中(从左到右)的镜头,因此边缘的其余部分并不重要。)
Figure 3: Ball and Basket Geometry for Made and Missed ShotsFigure 3: Ball and Basket Geometry for Made and Missed ShotsFigure 3: Ball and Basket Geometry for Made and Missed ShotsFigure 3: Ball and Basket Geometry for Made and Missed Shots图 3:投篮命中和未命中的球和篮筐几何形状
但上面“击球”图中显示的球可能实际上并没有“嗖嗖”。考虑到该图像此时球的轨迹可能相对“平坦”,如下所示:
Figure 4: Effect of Final Ball Trajectory on Make/MissFigure 4: Effect of Final Ball Trajectory on Make/MissFigure 4: Effect of Final Ball Trajectory on Make/MissFigure 4: Effect of Final Ball Trajectory on Make/Miss图 4:最终球轨迹对漏球/漏球的影响
因此,我们还必须考虑球的最终角度,以及它缩小了挥杆射门的窗口 W 的事实:
Figure 5: Geometry involved in determining Make/MissFigure 5: Geometry involved in determining Make/MissFigure 5: Geometry involved in determining Make/MissFigure 5: Geometry involved in determining Make/Miss图 5:确定成功/失败所涉及的几何形状
因此,标准是当球的中心位于篮筐高度且处于向下轨迹时:
- 球中心的 X 位置必须位于篮圈的前部和后部之间。
- W 必须至少与球直径一样大。
- 球不能接触由最终角度和边缘直径描述的狭窄通道的任何一侧。
实施模型
弹道方程和约束被编码为 JMP 脚本语言 (JSL)。 该脚本 (ballistic calcs.jsl) 附在本文中,以防您想尝试自己运行它。 该代码非常简单,并且根本没有针对速度进行优化(因此,如果需要评估许多速度和轨迹的组合,则可能需要一些时间)。 如果您想深入研究,该代码有很好的注释。 主要组件包括:
- 提供了一个自定义用户输入面板来控制操作。
- 将创建一个新数据表,其中包含将存储的每个变量的新列。
- 两个嵌套循环,一个用于步进初始球速度,一个用于步进初始轨迹角度。
- 在这些循环中,进行所有弹道计算以使球到达最终位置(即,在边缘高度,向下轨迹)。
- 然后使用最终的球位置和轨迹来确定击球是否如之前所定义的“摆动”。
- 根据计算结果,分类“makemiss”变量设置为“Make”或“Miss”。
- 对于初始速度和初始轨迹的这种特定组合,所有变量都存储在数据表中,包括 makemiss 变量。
- 最后,一旦完成所有计算并将结果存储在新的数据表中,我就会绘制速度与轨迹操作窗口的关系,并向数据表添加脚本以轻松重新创建绘图。
计算完成后,数据表包含所有结果,然后可以将其绘制出来。 我针对以下情况运行了代码:
案件
|
1
|
2
|
|
|
|
初始高度,英尺
|
6.5
|
8.5
|
|
|
|
初始速度,fps
|
|
|
最低
|
20
|
20
|
最高
|
50
|
50
|
增量
|
0.05
|
0.05
|
|
|
|
初始轨迹,度数
|
|
|
最低
|
35
|
35
|
最高
|
89
|
89
|
增量
|
0.05
|
0.05
|
这产生了两个数据表,一个用于每个初始高度,每个包含近 650,000 行(一个用于初始速度和轨迹的每种组合)。
(注意:在我的笔记本电脑上完成这些案例中的每一个大约需要两分钟。)
任意投掷容差窗口输出
我想看到“罚球窗口”,显示初始速度与初始轨迹的散点图,其中的点根据成功或失败进行颜色编码。 这可以在 Graph Builder 中轻松完成联合管理计划。 我们来谈谈“高个子”的容忍窗口:
Figure 6: Free Throw Tolerance Window for Tall PlayerFigure 6: Free Throw Tolerance Window for Tall PlayerFigure 6: Free Throw Tolerance Window for Tall PlayerFigure 6: Free Throw Tolerance Window for Tall Player图 6:高个子球员的罚球容差窗口上图中的蓝色区域显示了高个子罚球所需的初始速度和初始角度的组合。 请注意以下事项:
- 在低速(22-24 fps)下,拍摄角度相对较低。 这是有道理的,因为以高弹道进行软投篮不会进入篮筐。
- 在大角度(70 度以上)时,初速度必须很高。 在这种情况下,我们的射击非常高。 (事实上,当角度接近 90 度时,初始速度会趋向无穷大。)
如果我们扩展上图以强调低速区域:
Figure 7: Zoom In on Free Throw Tolerance Window for Tall PlayerFigure 7: Zoom In on Free Throw Tolerance Window for Tall PlayerFigure 7: Zoom In on Free Throw Tolerance Window for Tall PlayerFigure 7: Zoom In on Free Throw Tolerance Window for Tall Player图 7:放大高个球员的罚球容差窗口
现在我们可以更好地看到:
- 如果射击者始终以相同的初始速度射击(以黄线为例),则射击所需的角度范围。
- 如果射击者始终以相同的初始角度射击(例如绿线),则射击所需的初始速度范围。
- 如果射手相当一致,则速度和角度的允许范围的典型窗口(红色框就是一个例子)。
比较短与高的性能
我手动将两个测试用例(矮个射手与高个射手)的结果合并到一个图表中:
Figure 8: Comparing Short vs. Tall Player Free Throw Tolerance WindowFigure 8: Comparing Short vs. Tall Player Free Throw Tolerance WindowFigure 8: Comparing Short vs. Tall Player Free Throw Tolerance WindowFigure 8: Comparing Short vs. Tall Player Free Throw Tolerance Window图 8:比较矮个与高个球员的罚球容差窗口
现在我们可以开始看到矮个和高个球员之间的差异:
- 矮个子球员必须比高个子球员更努力、更高角度地投篮(当然,我们都知道这一点)。
- 随着发射角度的增加,两条曲线会收敛(这是有道理的——两名球员都发射非常高的球,因此起始高度不太重要)。
- 一般来说,高个玩家的窗口(即蓝色区域)比矮个玩家的窗口(黄色区域)稍大。
此时,我对我的论文感觉很好,但轮廓可视化有一个奇怪的行为。 请注意,在上面的图中(尤其是图 7),当我们从低角度到高角度时,蓝色曲线似乎以大约 22.5 fps 的速度开始,然后是可接受的速度略有下降随着角度增加,然后再次增加。 我想知道这是否是真的。
动画拍摄
为了研究这个奇怪的现象,我选择观察一个高个子以恒定的初始速度投篮,仅改变投篮角度。 球的运动很容易计算(简单的抛物线),因此我计算了给定角度下球随时间的 xy 位置。 我在多个角度上重复了此操作,所有角度均使用相同的初始速度和 8.5 英尺的发射高度。
我编写了第二个脚本(animation.jsl,也附在本文中),它生成此数据并将其存储在 JMP 数据表中。 然后,我使用气泡图对结果进行动画处理(每个新镜头在时间上略有偏移),并将其存储在 GIF 文件中。
第一个动画显示一个高个子(释放点距地面 8.5 英尺),以 22.3 fps 的初始速度射门:
Figure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial TrajectoriesFigure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial TrajectoriesFigure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial TrajectoriesFigure 9: Animation of Tall Player Shooting: 22.3 fps Initial Velocity at Different Initial Trajectories图 9:高个子玩家射击的动画:不同初始轨迹的初始速度为 22.3 fps
上面的动画显示了多次射击尝试,随着射击角度的改变,所有尝试都具有相同的初始速度。 (每次射击都标有初始发射角度(以度为单位)。)如果初始角度太浅或太陡,则射击会击中篮筐的前部(因此被认为是“未击中”,因为它没有“嗖嗖”。 ”)绿色镜头是“成功”,红色镜头是“未命中”。 如果角度恰到好处,球就会毫无阻碍地穿过篮筐。
然而,如果我们稍微提高初始速度(到 22.4 fps),我们会得到这个动画:
Figure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectoriesFigure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectoriesFigure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectoriesFigure 10: Tall Player, Initial Velocity 22.4 fps, different initial trajectories图 10:高个子玩家,初始速度 22.4 fps,不同的初始轨迹
在这里,我们再次看到,如果角度太浅或太陡,球就会接触到篮筐的前部。 然而,我们还看到,实际上有两个初始角度区域会导致“入球”,它们被球撞击篮筐后部的区域分开。 这是一个意想不到的结果,如果没有可视化工具,我不会注意到它联合管理计划!
真实数据支持研究结果吗?
根据上图中显示的窗口,我感觉很好,矮个子球员比个子高的球员罚球更困难。 当然,有大量数据可以证明这是否属实。
我下载了 1950 年后出生的 NBA 球员的球员身高和终生罚球百分比,这些球员在职业生涯中至少有 1000 次罚球尝试。 然后,我使用 Fit Y by X 平台绘制了高度与百分比的关系:
Figure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attemptsFigure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attemptsFigure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attemptsFigure 11: Free Throw Percentage vs. Height for NBA players born post-1950 with at least 1000 free throw attempts图 11:1950 年后出生且罚球次数至少达到 1000 次的 NBA 球员罚球命中率与身高的关系
唉,我的论文终究没有得到证实。 有一个非常明显的趋势,矮个子球员的罚球命中率高于高个子球员。 事实上,如果我的论点是正确的,那么像里克·巴里(Rick Barry)这样的老球员(他的罚球命中率很低)的命中率将会非常低。 (巴里整个职业生涯的投篮命中率为 90.0%。)
显然,还有其他影响在起作用。 上面详细介绍了一些模型假设。 其他可能包括:
- 练习罚球所花费的时间
- 眼手协调
- 动力(也许矮个子球员在罚球方面更加努力,以弥补场上其他方面的缺陷)
结论
用乔治·博克斯的话来说,“所有模型都是错误的,但有些模型是有用的。”
在这种情况下,如果我尝试在当地酒吧争论我的观点,我的模型可能会很有用。 但显然我的弹道模型是错误的。 还有许多其他因素决定篮球中罚球的能力。
我想我需要承认我并不是那么出色的运动员。 尽管如此,我还是希望您喜欢这次旅行,并且也许对 JMP 如何成为满足您的数据探索需求的有用工具有一些想法。
与此同时……c赫斯,有人吗?