テニス 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だ。)
分布から見える事として一番顕著なのは、回転量が多いサービスの方が、よりネットの高い位置を通っており、回転がゼロのサーブ(水色のフラットサービス)は、ネットスレスレの位置を通過している点だ。
回転量が最も多い赤色の軌道は、地面がボールに触れる際の角度が、急 / 鋭角のため、跳ね方も高くなることが予想される。反対に、回転力が少なくなれば、低く滑ることが推測できる。
実際の研究とこの結果を比べてみると、、、
青、オレンジ、そして緑のサービスは、現実的な回転量で、実際のコートで見られるショットだ。しかし、赤色のサービスの回転量は、相当な技術が必要だということがわかる。
発見
一つ新たに分かったことは、回転力の高いサービスほど、サービスを放つ角度(水平に対する角度)が高くなければいけないという点だ。
全てのサービスが同じ地点で落下するようにプログラミングすると、回転量とサービスが放たれる角度は以下のような関係となる。
ここからわかる事は、トップスピンサーブを打つ際、想像している以上に、打つ角度を上方向に向けなければならないということだ。
最低でも、フラットサーブと比べ、15度は変えることが推奨される。
結論
ショットの軌跡をPythonで計算してみた結果、実際のデータとの合致を確認できた。
この記事を通して、プログラミングをもっと身近に感じてもらえれば最高です!
それでは、また次回!Stay tuned!