見出し画像

テニス x 物理 〜ショットの軌跡をPythonで計算!〜

トップスピンサーブをPythonで!

テニスの試合では、選手たちはさまざまな回転のショットを駆使して戦う。

その中でも、トップスピンサーブ、aka キックサーブは、セカンドサービスの際に多用される「キーショット」だ。

縦回転のスピンをかけるこのショットは、通常よりも曲線的な軌跡を描き、地面につく際に、高く跳ね、手元で伸びる。

回転による力の作用を物理学では「マグヌス効果/Magnus Effect」と言ったりする。

この記事では、Pythonを駆使して、トップスピンサーブの軌道を計算する方法について説明しようと思う。

1. 必要なライブラリのインポート

NumPyとMatplotlibを使用して、軌跡を計算するため、必要なライブラリをインポートする。

import numpy as np import 
matplotlib.pyplot as plt

2. 定数の設定

次に、計算に必要な定数、例えば、重力加速度やボールの初速度、ボールを放つ角度、そして、スピンの角速度(回転数)などを定義する。

g = 9.81 # 重力加速度 (m/s^2) 
v0 = 20 # 初速度 (m/s) 
theta = np.radians(-6.5) # 発射角度 (45度をラジアンに変換) 
angular_frequency = 0 # スピンの角速度 (rad/s) 
t = np.linspace(0, 1.5, 100) # 時間間隔 (0から1.5秒まで)

3. トップスピンの軌跡の計算

ボールにトップスピンをかけることで、下向きの力が発生し、軌跡が変化する。

これは、流体力学を勉強するとわかる事なのだが、トップスピンのかかったボールの上部では、向かってくる空気の流れとボールの回転がそれぞれ逆方向に向かうため、気圧が高くなる。

逆に、回転するボールの下部は、向かってくる空気の流れとボールの回転が一致するため、気圧が低くなるのだ。

すると、気圧差により、上から下へと力が働き、トップスピンの効いた球は、地面の方向へ落ちるのだ。

この現象をPython で打つ場合、運動方程式を解いて、時間に対するボールの動きをそれぞれx軸方向とy軸方向で、導出する必要がある。

その導出結果だけ下に書こう。

def calculate_trajectory_topspin(): 
x_topspin = v0 * np.cos(theta) * t 
y_topspin = v0 * np.sin(theta) * t - 0.5 * g * t**2 + (angular_frequency * t / 2) * v0 * np.cos(theta) 
return x_topspin, y_topspin

4. プロットして可視化

最後に、計算した軌跡を可視化する。Matplotlibを使用して、トップスピンサーブの軌跡をグラフにプロットする。

plt.figure(figsize=(10, 6)) 
x_topspin, y_topspin = calculate_trajectory_topspin() 
plt.plot(x_topspin, y_topspin, label='トップスピン') 
plt.title('トップスピンショットの軌跡') 
plt.xlabel('水平距離 (m)') 
plt.ylabel('垂直距離 (m)') 
plt.legend() 
plt.grid(True) 
plt.show()

ちなみに今回は、サーブを打つ場合を仮定しているため、ボールの放たれるボールの放たれる高さを2.5m、そして、ボールが落ちる/着地する位置をサービスライン上と設定した。

なおかつ、放たれるサーブはベースラインのセンターマークからネットの一番低い位置(センター部分)を通ると仮定している。

得られるプロットは以下の通りだ。(紫色で示されているのが、ネットで、高さが0.914mだ。)

Effect of Angular Frequency on Serve Trajectory
Angular frequency とは、球の角速度、つまりは、回転速度を表しており、テニスでは、回転速度を rpm (Revolution per minute) という単位で測っている。 簡単にいうと『一分間に何回一周の回転をするのか』という単位である。

分布から見える事として一番顕著なのは、回転量が多いサービスの方が、よりネットの高い位置を通っており、回転がゼロのサーブ(水色のフラットサービス)は、ネットスレスレの位置を通過している点だ。

回転量が最も多い赤色の軌道は、地面がボールに触れる際の角度が、急 / 鋭角のため、跳ね方も高くなることが予想される。反対に、回転力が少なくなれば、低く滑ることが推測できる。

実際の研究とこの結果を比べてみると、、、

"トップ選手のサービス回転量が概ね、1st サービスは 1000~3500rpm、2nd サービス は 3000~5000rpm の中に分布していることがうかがえる。"

From https://sports-performance.jp/paper/1018/1018.pdf

青、オレンジ、そして緑のサービスは、現実的な回転量で、実際のコートで見られるショットだ。しかし、赤色のサービスの回転量は、相当な技術が必要だということがわかる。

発見

一つ新たに分かったことは、回転力の高いサービスほど、サービスを放つ角度(水平に対する角度)が高くなければいけないという点だ。

全てのサービスが同じ地点で落下するようにプログラミングすると、回転量とサービスが放たれる角度は以下のような関係となる。

色         回転量          水平に対する角度
青   0      - 6.5
黄   1870     10
緑   4640     30
赤   8630     50

Data from python programming

ここからわかる事は、トップスピンサーブを打つ際、想像している以上に、打つ角度を上方向に向けなければならないということだ。

最低でも、フラットサーブと比べ、15度は変えることが推奨される。

結論

ショットの軌跡をPythonで計算してみた結果、実際のデータとの合致を確認できた。

この記事を通して、プログラミングをもっと身近に感じてもらえれば最高です!

それでは、また次回!Stay tuned!



この記事が気に入ったらサポートをしてみませんか?